[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/workspace/libs/plasma
From: Petri Damstén <petri.damsten () kdemail ! net>
Date: 2008-11-02 15:29:00
Message-ID: 1225639740.195409.30199.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 879173 by pdamsten:
Support for metadata in PackageStructure.
M +2 -9 package.cpp
M +61 -1 packagestructure.cpp
M +7 -1 packagestructure.h
--- trunk/KDE/kdebase/workspace/libs/plasma/package.cpp #879172:879173
@@ -50,8 +50,7 @@
PackagePrivate(const PackageStructure::Ptr st, const QString &p)
: structure(st),
basePath(p),
- valid(QFile::exists(basePath)),
- metadata(0)
+ valid(QFile::exists(basePath))
{
if (valid && basePath[basePath.length() - 1] != '/') {
basePath.append('/');
@@ -60,13 +59,11 @@
~PackagePrivate()
{
- delete metadata;
}
PackageStructure::Ptr structure;
QString basePath;
bool valid;
- PackageMetadata *metadata;
};
Package::Package(const QString &packageRoot, const QString &package,
@@ -179,11 +176,7 @@
PackageMetadata Package::metadata() const
{
- //FIXME: this only works for native plasma packges; should fall back to... PackageStructure?
- if (!d->metadata) {
- d->metadata = new PackageMetadata(d->basePath + "metadata.desktop");
- }
- return *d->metadata;
+ return d->structure->metadata();
}
const QString Package::path() const
--- trunk/KDE/kdebase/workspace/libs/plasma/packagestructure.cpp #879172:879173
@@ -1,5 +1,5 @@
/******************************************************************************
-* Copyright 2007 by Aaron Seigo <aseigo@kde.org> *
+* Copyright 2007 by Aaron Seigo <aseigo@kde.org> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
@@ -20,12 +20,15 @@
#include "packagestructure.h"
#include <QMap>
+#include <QFileInfo>
#include <KConfigGroup>
#include <KStandardDirs>
#include <KServiceTypeTrader>
#include <KUrl>
#include <KTemporaryFile>
+#include <KTempDir>
+#include <KZip>
#include <kio/netaccess.h>
#include <kio/job.h>
@@ -62,6 +65,15 @@
class PackageStructurePrivate
{
public:
+ PackageStructurePrivate()
+ : metadata(0)
+ {
+ }
+ ~PackageStructurePrivate()
+ {
+ delete metadata;
+ }
+
QString type;
QString path;
QString contentsPrefix;
@@ -70,6 +82,7 @@
QMap<QByteArray, ContentStructure> contents;
QStringList mimetypes;
static QHash<QString, PackageStructure::Ptr> structures;
+ PackageMetadata *metadata;
};
QHash<QString, PackageStructure::Ptr> PackageStructurePrivate::structures;
@@ -403,6 +416,7 @@
void PackageStructure::createNewWidgetBrowser(QWidget *parent)
{
+ Q_UNUSED(parent)
emit newWidgetBrowserFinished();
}
@@ -426,6 +440,52 @@
d->servicePrefix = servicePrefix;
}
+PackageMetadata PackageStructure::metadata()
+{
+ if (!d->metadata) {
+ QString metadataPath;
+ QString package = d->path;
+ KTempDir tempdir;
+
+ QFileInfo fileInfo(package);
+ if (fileInfo.exists()) {
+ QString path;
+
+ if (fileInfo.isDir()) {
+ path = package;
+ } else {
+ KZip archive(package);
+ if (archive.open(QIODevice::ReadOnly)) {
+ const KArchiveDirectory *source = archive.directory();
+ const KArchiveEntry *metadata = source->entry("metadata.desktop");
+
+ if (metadata) {
+ path = tempdir.name();
+ source->copyTo(path);
+ } else {
+ kWarning() << "No metadata file in package" << package;
+ }
+ } else {
+ kWarning() << "Could not open package file:" << package;
+ }
+ }
+ if (!path.isEmpty()) {
+ metadataPath = path + "/metadata.desktop";
+ if (!QFile::exists(metadataPath)) {
+ metadataPath.clear();
+ kWarning() << "No such file:" << metadataPath;
+ }
+ }
+ }
+ if (metadataPath.isEmpty()) {
+ d->metadata = new PackageMetadata();
+ } else {
+ d->metadata = new PackageMetadata(metadataPath);
+ }
+ }
+ return *d->metadata;
+}
+
} // Plasma namespace
#include "packagestructure.moc"
--- trunk/KDE/kdebase/workspace/libs/plasma/packagestructure.h #879172:879173
@@ -28,6 +28,7 @@
#include <KDE/KSharedPtr>
#include <plasma/version.h>
+#include "packagemetadata.h"
class KConfigBase;
@@ -80,7 +81,7 @@
*
* @arg type the type of package. This is often application specific.
**/
- explicit PackageStructure(QObject *parent = 0,
+ explicit PackageStructure(QObject *parent = 0,
const QString &type = i18nc("A non-functional package", "Invalid"));
/**
@@ -272,6 +273,11 @@
*/
void setServicePrefix(const QString &servicePrefix);
+ /**
+ * @return the package metadata object.
+ */
+ virtual PackageMetadata metadata();
+
Q_SIGNALS:
/**
* Emitted when the new widget browser process completes.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic