[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/plasma
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2008-11-03 3:57:03
Message-ID: 1225684623.948842.16741.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 879356 by aseigo:

simplify this quite a bit by moving some of the code out to a helper method; as an added bonus \
this avoids creating tempdir and other objects unnecessarily


 M  +35 -36    packagestructure.cpp  


--- trunk/KDE/kdebase/workspace/libs/plasma/packagestructure.cpp #879355:879356
@@ -74,6 +74,8 @@
         delete metadata;
     }
 
+    void createPackageMetadata(const QString &path);
+
     QString type;
     QString path;
     QString contentsPrefix;
@@ -440,49 +442,46 @@
     d->servicePrefix = servicePrefix;
 }
 
-PackageMetadata PackageStructure::metadata()
+void PackageStructurePrivate::createPackageMetadata(const QString &path)
 {
-    if (!d->metadata) {
-        QString metadataPath;
-        QString package = d->path;
-        KTempDir tempdir;
+    if (metadata) {
+        delete metadata;
+        metadata = 0;
+    }
 
-        QFileInfo fileInfo(package);
-        if (fileInfo.exists()) {
-            QString path;
+    QString metadataPath(path + "/metadata.desktop");
+    if (!QFile::exists(metadataPath)) {
+        metadataPath.clear();
+        kWarning() << "No metadata file in the package, expected it at:" << metadataPath;
+    }
 
-            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");
+    metadata = new PackageMetadata(metadataPath);
+}
 
-                    if (metadata) {
-                        path = tempdir.name();
-                        source->copyTo(path);
-                    } else {
-                        kWarning() << "No metadata file in package" << package;
-                    }
-                } else {
-                    kWarning() << "Could not open package file:" << package;
-                }
+PackageMetadata PackageStructure::metadata()
+{
+    if (!d->metadata && !d->path.isEmpty()) {
+        QFileInfo fileInfo(d->path);
+
+        if (fileInfo.isDir()) {
+            d->createPackageMetadata(d->path);
+        } else if (fileInfo.exists()) {
+            KZip archive(d->path);
+            if (archive.open(QIODevice::ReadOnly)) {
+                const KArchiveDirectory *source = archive.directory();
+                KTempDir tempdir;
+                source->copyTo(tempdir.name());
+                d->createPackageMetadata(tempdir.name());
+            } else {
+                kWarning() << "Could not open package file:" << d->path;
             }
-            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);
-        }
     }
+
+    if (!d->metadata) {
+        d->metadata = new PackageMetadata();
+    }
+
     return *d->metadata;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic