[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