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

List:       kde-commits
Subject:    [plasmate/terietor/porting] plasmate: From now on packagehandler is creating/populating our template
From:       Antonis Tsiapaliokas <kok3rs () gmail ! com>
Date:       2014-03-17 14:00:34
Message-ID: E1WPY5i-00016d-P9 () scm ! kde ! org
[Download RAW message or body]

Git commit b3c18557d9cc7456b3fe424be6458e918e2705da by Antonis Tsiapaliokas.
Committed on 13/03/2014 at 13:35.
Pushed by tsiapaliokas into branch 'terietor/porting'.

> From now on packagehandler is creating/populating our templates.
We don't need the startpage to do that for us.

M  +89   -17   plasmate/packagehandler.cpp
M  +7    -3    plasmate/packagehandler.h
M  +3    -6    plasmate/projectmanager/projectmanager.cpp
M  +3    -63   plasmate/startpage.cpp
M  +4    -1    plasmate/tests/CMakeLists.txt
M  +4    -2    plasmate/tests/packagehandlertest.cpp
M  +2    -1    plasmate/tests/packagemodeltest.cpp

http://commits.kde.org/plasmate/b3c18557d9cc7456b3fe424be6458e918e2705da

diff --git a/plasmate/packagehandler.cpp b/plasmate/packagehandler.cpp
index 508f225..63ead23 100644
--- a/plasmate/packagehandler.cpp
+++ b/plasmate/packagehandler.cpp
@@ -20,8 +20,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 
-#include "packagehandler.h"
-
 #include <Plasma/PluginLoader>
 
 #include <KDirWatch>
@@ -33,6 +31,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <QStandardPaths>
 #include <QMimeDatabase>
 
+#include "packagehandler.h"
+#include "editors/metadata/metadatahandler.h"
+
 PackageHandler::Node::Node(const QString &name, const QString &description,
                            const QStringList &mimeTypes, PackageHandler::Node *parent)
     : m_name(name),
@@ -125,11 +126,6 @@ PackageHandler::~PackageHandler()
 {
 }
 
-void PackageHandler::setPackageType(const QString &type)
-{
-    m_package = Plasma::PluginLoader::self()->loadPackage(type);
-}
-
 QString PackageHandler::contentsPrefix() const
 {
     QString contentsPrefixPaths = m_package.contentsPrefixPaths().at(0);
@@ -146,12 +142,15 @@ void PackageHandler::setPackagePath(const QString &path)
     } else {
         m_packagePath = path;
     }
+}
 
-    if (!QDir(m_packagePath).exists()) {
-        //FIXME missing metadata
-        createPackage();
-    }
+void PackageHandler::loadPackage()
+{
+    MetadataHandler metadataHandler;
+    metadataHandler.setFilePath(m_packagePath + QLatin1Char('/') + QStringLiteral("metadata.desktop"));
+    metadataHandler.serviceTypes().at(0);
 
+    m_package = Plasma::PluginLoader::self()->loadPackage(metadataHandler.serviceTypes().at(0));;
     m_package.setPath(m_packagePath);
 }
 
@@ -192,7 +191,9 @@ QString PackageHandler::packagePath() const
     return m_packagePath;
 }
 
-void PackageHandler::createPackage()
+void PackageHandler::createPackage(const QString &userName, const QString &userEmail,
+                                   const QString &serviceType, const QString &pluginName,
+                                   const QString &mainScriptName, const QString &api, const QString \
&fileExtension)  {
     QDir dir;
     dir.mkpath(m_packagePath);
@@ -201,10 +202,29 @@ void PackageHandler::createPackage()
     const QString metadataFilePath = m_packagePath + QStringLiteral("metadata.desktop");
     QFile f(metadataFilePath);
     f.open(QIODevice::ReadWrite);
-    // FIXME write the metadata now
 
+    MetadataHandler metadataHandler;
+    metadataHandler.setFilePath(metadataFilePath);
+    metadataHandler.setName(pluginName);
+    metadataHandler.setServiceTypes(QStringList() << serviceType);
+    metadataHandler.setVersion(QChar(1));
+    metadataHandler.setAuthor(userName);
+    metadataHandler.setEmail(userEmail);
+    metadataHandler.setLicense(QStringLiteral("GPL"));
+    metadataHandler.setPluginApi(api);
+    metadataHandler.setMainScript(QStringLiteral("/ui/") + mainScriptName);
+    metadataHandler.writeFile();
+
+    QString mainScript = metadataHandler.mainScript();
+    mainScript = mainScript.split(QLatin1Char('/')).last();
+    if (mainScript != m_fileDefinitions[QStringLiteral("mainscript")]) {
+        m_fileDefinitions[QStringLiteral("mainscript")] = mainScript;
+    }
+
+    m_package = Plasma::PluginLoader::self()->loadPackage(metadataHandler.serviceTypes().at(0));;
+    m_package.setPath(m_packagePath);
     createRequiredDirectories();
-    createRequiredFiles();
+    createRequiredFiles(serviceType, pluginName, userName, userEmail, fileExtension);
 }
 
 void PackageHandler::createRequiredDirectories()
@@ -215,7 +235,8 @@ void PackageHandler::createRequiredDirectories()
     }
 }
 
-void PackageHandler::createRequiredFiles()
+void PackageHandler::createRequiredFiles(const QString &serviceType, const QString &pluginName,
+                                         const QString &userName, const QString &userEmail, const \
QString &fileExtension)  {
     // a package may require a file like ui/main.qml
     // but the ui dir may not be required, so lets check for them
@@ -229,17 +250,68 @@ void PackageHandler::createRequiredFiles()
             QFile f;
             const QString filePath = dir.path() + QLatin1Char('/') +
                                      m_fileDefinitions[it];
+            QString templateFilePath;
 
             if (it == QLatin1String("mainscript")) {
+                if (serviceType == "Plasma/Applet") {
+                    templateFilePath.append("mainPlasmoid");
+                } else if (serviceType == "KWin/WindowSwitcher") {
+                    templateFilePath.append("mainTabbox");
+                } else if (serviceType == "KWin/Script") {
+                    templateFilePath.append("mainKWinScript");
+                } else if (serviceType == "KWin/Effect") {
+                    templateFilePath.append("mainKWinEffect");
+                }
+
                 f.setFileName(QStandardPaths::locate(QStandardPaths::DataLocation,
-                                    QStringLiteral("templates/mainPlasmoid.qml")));
+                                    QStringLiteral("templates/") + templateFilePath + fileExtension));
                 const bool ok = f.copy(filePath);
                 if (!ok) {
                     emit error(QStringLiteral("The mainscript file hasn't been created"));
                 }
+
+                f.setFileName(filePath);
+                f.open(QIODevice::ReadWrite);
+
+                // Now open these files, and substitute the main class, author, email and date fields
+                QByteArray tmpPluginName(pluginName.toLocal8Bit());
+                QByteArray tmpAuthor(userName.toLocal8Bit());
+                QByteArray tmpEmail(userEmail.toLocal8Bit());
+                QByteArray rawData = f.readAll();
+                f.close();
+                f.open(QIODevice::WriteOnly);
+
+                QByteArray replacedString("$PLASMOID_NAME");
+                if (rawData.contains(replacedString)) {
+                    rawData.replace(replacedString, tmpPluginName);
+                }
+                replacedString.clear();
+
+                replacedString.append("$AUTHOR");
+                if (rawData.contains(replacedString)) {
+                    rawData.replace(replacedString, tmpAuthor);
+                }
+                replacedString.clear();
+
+                replacedString.append("$EMAIL");
+                if (rawData.contains(replacedString)) {
+                    rawData.replace(replacedString, tmpEmail);
+                }
+                replacedString.clear();
+
+                replacedString.append("$DATE");
+                QDate date = QDate::currentDate();
+                QByteArray datetime(date.toString().toUtf8());
+                QTime time = QTime::currentTime();
+                datetime.append(", " + time.toString().toUtf8());
+                if (rawData.contains(replacedString)) {
+                    rawData.replace(replacedString, datetime);
+                }
+
+                f.write(rawData);
+                f.close();
             }
 
-            f.open(QIODevice::ReadWrite);
         }
     }
 }
diff --git a/plasmate/packagehandler.h b/plasmate/packagehandler.h
index e19c630..61de03d 100644
--- a/plasmate/packagehandler.h
+++ b/plasmate/packagehandler.h
@@ -60,10 +60,14 @@ public:
             QStringList m_mimeTypes;
     };
 
-    void setPackageType(const QString &type);
+    void createPackage(const QString &userName, const QString &userEmail,
+                       const QString &serviceType, const QString &pluginName,
+                       const QString &mainScriptName, const QString &api, const QString &fileExtension);
 
     void setPackagePath(const QString &path);
 
+    void loadPackage();
+
     QString packagePath() const;
 
     QString contentsPrefix() const;
@@ -84,9 +88,9 @@ private:
     PackageHandler::Node* m_topNode;
 
 
-    void createPackage();
     void createRequiredDirectories();
-    void createRequiredFiles();
+    void createRequiredFiles(const QString &serviceType, const QString &pluginName,
+                             const QString &userName, const QString &userEmail, const QString \
&fileExtension);  };
 
 #endif
diff --git a/plasmate/projectmanager/projectmanager.cpp b/plasmate/projectmanager/projectmanager.cpp
index 0eb5cb4..34dc5b1 100644
--- a/plasmate/projectmanager/projectmanager.cpp
+++ b/plasmate/projectmanager/projectmanager.cpp
@@ -36,10 +36,9 @@
 #include <KZip>
 
 #include "projectmanager.h"
-#include "../editors/metadata/metadatahandler.h"
 #include "../projecthandler.h"
 #include "../packagehandler.h"
-
+#include "../editors/metadata/metadatahandler.h"
 
 ProjectManager::ProjectManager(ProjectHandler *projectHandler, PackageHandler *packageHandler, \
MainWindow *parent)  : QDialog(parent),
@@ -156,10 +155,8 @@ void ProjectManager::emitProjectSelected()
 
     QString url = m_items[l.at(0)];
     if (!url.isEmpty()) {
-        MetadataHandler metadataHandler;
-        metadataHandler.setFilePath(url + QLatin1Char('/') + QStringLiteral("metadata.desktop"));
-        QString serviceType = metadataHandler.serviceTypes().at(0);
-        m_packageHandler->setPackageType(serviceType);
+        m_packageHandler->setPackagePath(url);
+        m_packageHandler->loadPackage();
         m_mainWindow->loadProject(findMainScript(url));
 
         m_projectHandler->recentProject(url);
diff --git a/plasmate/startpage.cpp b/plasmate/startpage.cpp
index ff5c730..c57a58a 100644
--- a/plasmate/startpage.cpp
+++ b/plasmate/startpage.cpp
@@ -205,12 +205,8 @@ void StartPage::setupWidgets()
 
             return;
         } else {
-            MetadataHandler metadataHandler;
-            metadataHandler.setFilePath(url + QLatin1Char('/') + QStringLiteral("metadata.desktop"));
-
-            QString serviceType = metadataHandler.serviceTypes().at(0);
-            m_packageHandler->setPackageType(serviceType);
             m_packageHandler->setPackagePath(url);
+            m_packageHandler->loadPackage();
             m_mainWindow->loadProject(findMainScript(url));
         }
 
@@ -372,24 +368,18 @@ void StartPage::createNewProject()
     const QString projectNameLowerCase = projectName.toLower();
     QString projectFileExtension;
 
-    QString templateFilePath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, \
                QStringLiteral("/plasmate/templates/"), QStandardPaths::LocateDirectory);
-
     // type -> serviceTypes
     QString serviceTypes;
     if (m_ui.contentTypes->currentRow() == 0) {
         serviceTypes = "Plasma/Applet";
-        templateFilePath.append("mainPlasmoid");
     } else if (m_ui.contentTypes->currentRow() == 1) {
         serviceTypes = "Plasma/Theme";
     } else if (m_ui.contentTypes->currentRow() == 2) {
         serviceTypes = "KWin/WindowSwitcher";
-        templateFilePath.append("mainTabbox");
     } else if (m_ui.contentTypes->currentRow() == 3) {
         serviceTypes = "KWin/Script";
-        templateFilePath.append("mainKWinScript");
     } else if (m_ui.contentTypes->currentRow() == 4) {
         serviceTypes = "KWin/Effect";
-        templateFilePath.append("mainKWinEffect");
     }
 
     QString projectFolderName;
@@ -419,48 +409,9 @@ void StartPage::createNewProject()
     //                               contents/...
 
     const QString projectPath = QStandardPaths::standardLocations(QStandardPaths::DataLocation).at(0) + \
                QLatin1Char('/') + projectFolderName;
-    m_packageHandler->setPackageType(serviceTypes);
     m_packageHandler->setPackagePath(projectPath);
-
-    // Create a QFile object that points to the template we need to copy
-    QFile sourceFile(templateFilePath + projectFileExtension);
-    QFile destinationFile(projectPath + "/contents/ui/" + mainScriptName);//our dest
-
-    // Now open these files, and substitute the main class, author, email and date fields
-    sourceFile.open(QIODevice::ReadOnly);
-    destinationFile.open(QIODevice::ReadWrite);
-
-    QByteArray rawData = sourceFile.readAll();
-
-    QByteArray replacedString("$PLASMOID_NAME");
-    if (rawData.contains(replacedString)) {
-        rawData.replace(replacedString, projectName.toAscii());
-    }
-    replacedString.clear();
-
-    replacedString.append("$AUTHOR");
-    if (rawData.contains(replacedString)) {
-        rawData.replace(replacedString, m_ui.authorTextField->text().toAscii());
-    }
-    replacedString.clear();
-
-    replacedString.append("$EMAIL");
-    if (rawData.contains(replacedString)) {
-        rawData.replace(replacedString, m_ui.emailTextField->text().toAscii());
-    }
-    replacedString.clear();
-
-    replacedString.append("$DATE");
-    QDate date = QDate::currentDate();
-    QByteArray datetime(date.toString().toUtf8());
-    QTime time = QTime::currentTime();
-    datetime.append(", " + time.toString().toUtf8());
-    if (rawData.contains(replacedString)) {
-        rawData.replace(replacedString, datetime);
-    }
-
-    destinationFile.write(rawData);
-    destinationFile.close();
+    m_packageHandler->createPackage(m_ui.authorTextField->text(), m_ui.emailTextField->text(), \
serviceTypes, projectNameLowerCase, mainScriptName, api, projectFileExtension); +    \
m_packageHandler->loadPackage();  
     // create the metadata.desktop file
     // TODO: missing but possible entries that could be added:
@@ -470,17 +421,6 @@ void StartPage::createNewProject()
     // * X-KDE-PluginInfo-Website
     // * X-KDE-PluginInfo-Category
     // * X-KDE-ParentApp
-    MetadataHandler metadataHandler;
-    metadataHandler.setFilePath(projectPath + QLatin1Char('/') + QStringLiteral("metadata.desktop"));
-    metadataHandler.setName(projectNameLowerCase);
-    metadataHandler.setServiceTypes(QStringList() << serviceTypes);
-    metadataHandler.setVersion(QChar(1));
-    metadataHandler.setAuthor(m_ui.authorTextField->text());
-    metadataHandler.setEmail(m_ui.emailTextField->text());
-    metadataHandler.setLicense(QStringLiteral("GPL"));
-    metadataHandler.setPluginApi(api);
-    metadataHandler.setMainScript(QStringLiteral("/ui/") + mainScriptName);
-    metadataHandler.writeFile();
 
     emit projectSelected(projectPath);
 
diff --git a/plasmate/tests/CMakeLists.txt b/plasmate/tests/CMakeLists.txt
index daee7d5..4bf7478 100644
--- a/plasmate/tests/CMakeLists.txt
+++ b/plasmate/tests/CMakeLists.txt
@@ -14,7 +14,7 @@ macro(PLASMATE_UNIT_TEST testname srcs libraries)
 endmacro()
 
 # packageHandertest
-set(packagehandler_SRCS ../packagehandler.cpp)
+set(packagehandler_SRCS ../packagehandler.cpp ../editors/metadata/metadatahandler.cpp)
 set(packagehandler_LIBS KF5::Plasma)
 
 PLASMATE_UNIT_TEST(packagehandlertest "${packagehandler_SRCS}"
@@ -24,6 +24,7 @@ PLASMATE_UNIT_TEST(packagehandlertest "${packagehandler_SRCS}"
 # packagemodeltest
 set(packagemodeltest_SRCS modeltest.cpp
                           ../packagemodel.cpp
+                          ../editors/metadata/metadatahandler.cpp
                           ${packagehandler_SRCS}
 )
 
@@ -44,6 +45,8 @@ plasmate_unit_test(metadatahandlertest "${metadatahandlertest_SRCS}"
 # projecthandlertest
 set(projecthandlertest_SRCS ../projecthandler.cpp
                             ${packagehandler_SRCS}
+                            ../packagehandler.cpp
+                            ../editors/metadata/metadatahandler.cpp
 )
 
 set(projecthandlertest_LIBS KF5::Plasma)
diff --git a/plasmate/tests/packagehandlertest.cpp b/plasmate/tests/packagehandlertest.cpp
index 41342f2..98c7b14 100644
--- a/plasmate/tests/packagehandlertest.cpp
+++ b/plasmate/tests/packagehandlertest.cpp
@@ -44,7 +44,6 @@ void PackageHandlerTest::initTestCase()
 
 void PackageHandlerTest::initPlasmoid()
 {
-    m_packageHandler.setPackageType(QStringLiteral("Plasma/Applet"));
 }
 
 void PackageHandlerTest::createNewPlasmoid()
@@ -66,6 +65,9 @@ void PackageHandlerTest::createNewPlasmoid()
     f.copy(templatesDir.path() + QLatin1Char('/') + QStringLiteral("mainPlasmoid.qml"));
 
     m_packageHandler.setPackagePath(newPlasmoidLocation);
+    m_packageHandler.createPackage(QStringLiteral("author"), QStringLiteral("email"), \
QStringLiteral("Plasma/Applet"), QStringLiteral("newPlasmoid"), QStringLiteral("main.qml"), \
QStringLiteral("declarative"), QStringLiteral(".qml")); +    m_packageHandler.loadPackage();
+
     QDir dir(newPlasmoidLocation);
     Q_ASSERT(dir.exists());
     Q_ASSERT(dir.exists(QStringLiteral("metadata.desktop")));
@@ -97,7 +99,7 @@ void PackageHandlerTest::checkPlasmoidMimeTypes()
         }
     }
 
-    Q_ASSERT_X(mimeTypes.contains(QStringLiteral("[plasmate]/kconfigxteditor/")),
+    Q_ASSERT_X(mimeTypes.contains(QStringLiteral("[plasmate]/kconfigxteditor")),
                "Checking mimetypes","[plasmate]/kconfigxteditor/ doesn't exist");
     Q_ASSERT_X(mimeTypes.contains(QStringLiteral("text/x-qml")), "Checking mimetypes",
               "text/x-qml doesn't exist");
diff --git a/plasmate/tests/packagemodeltest.cpp b/plasmate/tests/packagemodeltest.cpp
index 3645c58..431f0e4 100644
--- a/plasmate/tests/packagemodeltest.cpp
+++ b/plasmate/tests/packagemodeltest.cpp
@@ -43,11 +43,12 @@ void PackageModelTest::initTestCase()
 void PackageModelTest::testPlasmoidModel()
 {
     PackageHandler *packageHandler = new PackageHandler(this);
-    packageHandler->setPackageType(QStringLiteral("Plasma/Applet"));
     const QString testDataPlasmoid = \
QFINDTESTDATA(QStringLiteral("testdata/org.kde.tests.packagehandlertest"));  \
Q_ASSERT(!testDataPlasmoid.isEmpty());  
     packageHandler->setPackagePath(testDataPlasmoid);
+    packageHandler->createPackage(QStringLiteral("author"), QStringLiteral("email"), \
QStringLiteral("Plasma/Applet"), QStringLiteral("newPlasmoid"), QStringLiteral("main.qml"), \
QStringLiteral("declarative"), QStringLiteral(".qml")); +    packageHandler->loadPackage();
 
     PackageModel *model = new PackageModel(packageHandler, this);
     packageHandler->loadPackageInfo();


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

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