Cleanup of Package classes as discussed on panel-devel.
* Add convenience constructor to the Package class. * Make some methods const in PackageStructures. * Use QByteArray to store keys in PackageStructures, so that they are compared by value, and not by address. * Add a test checking that the path to the metadata file is retrieved correctly. svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=741935
This commit is contained in:
parent
9603d8cf57
commit
b88aea051e
@ -68,6 +68,12 @@ Package::Package(const QString& packageRoot, const QString& package,
|
||||
{
|
||||
}
|
||||
|
||||
Package::Package(const QString &packagePath, const PackageStructure &structure)
|
||||
: d(new Private(structure, packagePath))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Package::~Package()
|
||||
{
|
||||
delete d;
|
||||
|
@ -47,6 +47,15 @@ class PLASMA_EXPORT Package
|
||||
**/
|
||||
Package(const QString& packageRoot, const QString& package,
|
||||
const PackageStructure& structure);
|
||||
|
||||
/**
|
||||
* Construct a Package object.
|
||||
*
|
||||
* @arg packagePath full path to the package directory
|
||||
* @arg structure the package structure describing this package
|
||||
*/
|
||||
Package(const QString &packagePath, const PackageStructure &structure);
|
||||
|
||||
~Package();
|
||||
|
||||
/**
|
||||
|
@ -89,7 +89,7 @@ void PackageMetadata::write(const QString& filename) const
|
||||
config.writeEntry("Description", d->description);
|
||||
config.writeEntry("Icon", d->icon);
|
||||
config.writeEntry("X-KDE-Screenshot", d->screenshot);
|
||||
config.writeEntry("ServiceTypes", d->serviceType);
|
||||
config.writeEntry("X-KDE-ServiceTypes", d->serviceType);
|
||||
config.writeEntry("X-KDE-PluginInfo-Name", d->name);
|
||||
config.writeEntry("X-KDE-PluginInfo-Author", d->author);
|
||||
config.writeEntry("X-KDE-PluginInfo-Email", d->email);
|
||||
@ -112,7 +112,7 @@ void PackageMetadata::read(const QString& filename)
|
||||
d->description = config.readEntry("Description", d->description);
|
||||
d->icon = config.readEntry("Icon", d->icon);
|
||||
d->screenshot= config.readEntry("X-KDE-Screenshot", d->screenshot);
|
||||
d->serviceType = config.readEntry("ServiceTypes", d->serviceType);
|
||||
d->serviceType = config.readEntry("X-KDE-ServiceTypes", d->serviceType);
|
||||
d->author = config.readEntry("X-KDE-PluginInfo-Author", d->author);
|
||||
d->email = config.readEntry("X-KDE-PluginInfo-Email", d->email);
|
||||
d->version = config.readEntry("X-KDE-PluginInfo-Version", d->version);
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
#include "packagestructure.h"
|
||||
|
||||
#include <QHash>
|
||||
#include <QMap>
|
||||
|
||||
namespace Plasma
|
||||
{
|
||||
@ -53,7 +53,7 @@ class PackageStructure::Private
|
||||
{
|
||||
public:
|
||||
QString type;
|
||||
QHash<const char*, ContentStructure> contents;
|
||||
QMap<QByteArray, ContentStructure> contents;
|
||||
QStringList mimetypes;
|
||||
};
|
||||
|
||||
@ -84,28 +84,28 @@ PackageStructure& PackageStructure::operator=(const PackageStructure& rhs)
|
||||
return *this;
|
||||
}
|
||||
|
||||
QString PackageStructure::type()
|
||||
QString PackageStructure::type() const
|
||||
{
|
||||
return d->type;
|
||||
}
|
||||
|
||||
QList<const char*> PackageStructure::directories()
|
||||
QList<const char*> PackageStructure::directories() const
|
||||
{
|
||||
QList<const char*> dirs;
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
while (it != d->contents.constEnd()) {
|
||||
if (it.value().directory) {
|
||||
dirs << it.key();
|
||||
dirs << it.key().constData();
|
||||
}
|
||||
++it;
|
||||
}
|
||||
return dirs;
|
||||
}
|
||||
|
||||
QList<const char*> PackageStructure::requiredDirectories()
|
||||
QList<const char*> PackageStructure::requiredDirectories() const
|
||||
{
|
||||
QList<const char*> dirs;
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
while (it != d->contents.constEnd()) {
|
||||
if (it.value().directory &&
|
||||
it.value().required) {
|
||||
@ -116,10 +116,10 @@ QList<const char*> PackageStructure::requiredDirectories()
|
||||
return dirs;
|
||||
}
|
||||
|
||||
QList<const char*> PackageStructure::files()
|
||||
QList<const char*> PackageStructure::files() const
|
||||
{
|
||||
QList<const char*> files;
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
while (it != d->contents.constEnd()) {
|
||||
if (!it.value().directory) {
|
||||
files << it.key();
|
||||
@ -129,10 +129,10 @@ QList<const char*> PackageStructure::files()
|
||||
return files;
|
||||
}
|
||||
|
||||
QList<const char*> PackageStructure::requiredFiles()
|
||||
QList<const char*> PackageStructure::requiredFiles() const
|
||||
{
|
||||
QList<const char*> files;
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.constBegin();
|
||||
while (it != d->contents.constEnd()) {
|
||||
if (!it.value().directory && it.value().required) {
|
||||
files << it.key();
|
||||
@ -162,9 +162,9 @@ void PackageStructure::addFileDefinition(const char* key, const QString& path, c
|
||||
d->contents[key] = s;
|
||||
}
|
||||
|
||||
QString PackageStructure::path(const char* key)
|
||||
QString PackageStructure::path(const char* key) const
|
||||
{
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
if (it == d->contents.constEnd()) {
|
||||
return QString();
|
||||
}
|
||||
@ -172,9 +172,9 @@ QString PackageStructure::path(const char* key)
|
||||
return it.value().path;
|
||||
}
|
||||
|
||||
QString PackageStructure::name(const char* key)
|
||||
QString PackageStructure::name(const char* key) const
|
||||
{
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
if (it == d->contents.constEnd()) {
|
||||
return QString();
|
||||
}
|
||||
@ -184,7 +184,7 @@ QString PackageStructure::name(const char* key)
|
||||
|
||||
void PackageStructure::setRequired(const char* key, bool required)
|
||||
{
|
||||
QHash<const char*, ContentStructure>::iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::iterator it = d->contents.find(key);
|
||||
if (it == d->contents.end()) {
|
||||
return;
|
||||
}
|
||||
@ -192,9 +192,9 @@ void PackageStructure::setRequired(const char* key, bool required)
|
||||
it.value().required = required;
|
||||
}
|
||||
|
||||
bool PackageStructure::required(const char* key)
|
||||
bool PackageStructure::required(const char* key) const
|
||||
{
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
if (it == d->contents.constEnd()) {
|
||||
return false;
|
||||
}
|
||||
@ -209,7 +209,7 @@ void PackageStructure::setDefaultMimetypes(QStringList mimetypes)
|
||||
|
||||
void PackageStructure::setMimetypes(const char* key, QStringList mimetypes)
|
||||
{
|
||||
QHash<const char*, ContentStructure>::iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::iterator it = d->contents.find(key);
|
||||
if (it == d->contents.end()) {
|
||||
return;
|
||||
}
|
||||
@ -217,9 +217,9 @@ void PackageStructure::setMimetypes(const char* key, QStringList mimetypes)
|
||||
it.value().mimetypes = mimetypes;
|
||||
}
|
||||
|
||||
QStringList PackageStructure::mimetypes(const char* key)
|
||||
QStringList PackageStructure::mimetypes(const char* key) const
|
||||
{
|
||||
QHash<const char*, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
QMap<QByteArray, ContentStructure>::const_iterator it = d->contents.find(key);
|
||||
if (it == d->contents.constEnd()) {
|
||||
return QStringList();
|
||||
}
|
||||
|
@ -70,27 +70,27 @@ public:
|
||||
/**
|
||||
* Type of package this structure describes
|
||||
**/
|
||||
QString type();
|
||||
QString type() const;
|
||||
|
||||
/**
|
||||
* The directories defined for this package
|
||||
**/
|
||||
QList<const char*> directories();
|
||||
QList<const char*> directories() const;
|
||||
|
||||
/**
|
||||
* The required directories defined for this package
|
||||
**/
|
||||
QList<const char*> requiredDirectories();
|
||||
QList<const char*> requiredDirectories() const;
|
||||
|
||||
/**
|
||||
* The individual files, by key, that are defined for this package
|
||||
**/
|
||||
QList<const char*> files();
|
||||
QList<const char*> files() const;
|
||||
|
||||
/**
|
||||
* The individual required files, by key, that are defined for this package
|
||||
**/
|
||||
QList<const char*> requiredFiles();
|
||||
QList<const char*> requiredFiles() const;
|
||||
|
||||
/**
|
||||
* Adds a directory to the structure of the package. It is added as
|
||||
@ -115,12 +115,12 @@ public:
|
||||
/**
|
||||
* @return path relative to the package root for the given entry
|
||||
**/
|
||||
QString path(const char* key);
|
||||
QString path(const char* key) const;
|
||||
|
||||
/**
|
||||
* @return user visible name for the given entry
|
||||
**/
|
||||
QString name(const char* key);
|
||||
QString name(const char* key) const;
|
||||
|
||||
/**
|
||||
* Sets whether or not a given part of the structure is required or not.
|
||||
@ -135,7 +135,7 @@ public:
|
||||
/**
|
||||
* @return true if the item at path exists and is required
|
||||
**/
|
||||
bool required(const char* key);
|
||||
bool required(const char* key) const;
|
||||
|
||||
/**
|
||||
* Defines the default mimetypes for any definitions that do not have
|
||||
@ -159,7 +159,7 @@ public:
|
||||
/**
|
||||
* @return the mimetypes associated with the path, if any
|
||||
**/
|
||||
QStringList mimetypes(const char* key);
|
||||
QStringList mimetypes(const char* key) const;
|
||||
|
||||
/**
|
||||
* Copy constructor
|
||||
|
@ -239,9 +239,9 @@ void PlasmoidPackageTest::entryList()
|
||||
void PlasmoidPackageTest::knownPackages()
|
||||
{
|
||||
// Don't do strange things when package root doesn't exists.
|
||||
QDir pRoot = QDir(mPackageRoot);
|
||||
QDir pRoot = QDir(mPackageRoot + "blah");
|
||||
QVERIFY(!pRoot.exists());
|
||||
p = new Plasma::Package(mPackageRoot, mPackage, *ps);
|
||||
p = new Plasma::Package(mPackageRoot + "blah", mPackage, *ps);
|
||||
QCOMPARE(p->knownPackages(mPackageRoot), QStringList());
|
||||
delete p;
|
||||
|
||||
@ -278,4 +278,14 @@ void PlasmoidPackageTest::knownPackages()
|
||||
QVERIFY(packages.contains(plamoid2));
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::metadata()
|
||||
{
|
||||
QString plasmoid("plasmoid_with_metadata");
|
||||
createTestPackage(plasmoid);
|
||||
|
||||
QString path = mPackageRoot + '/' + plasmoid + "/metadata.desktop";
|
||||
p = new Plasma::Package(mPackageRoot, plasmoid, *ps);
|
||||
QCOMPARE(p->filePath("metadata"), path);
|
||||
}
|
||||
|
||||
QTEST_KDEMAIN(PlasmoidPackageTest, NoGUI)
|
||||
|
@ -36,6 +36,7 @@ private Q_SLOTS:
|
||||
void filePath();
|
||||
void entryList();
|
||||
void knownPackages();
|
||||
void metadata();
|
||||
|
||||
private:
|
||||
void removeDir(const QString &subdir);
|
||||
|
Loading…
Reference in New Issue
Block a user