From f1e4d455e60b564725dbc43d95381db67abf1869 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sun, 17 Dec 2017 19:08:35 +0200 Subject: [PATCH] import and load a layout from command line --- app/importer.cpp | 19 ++++++++++++++++++- app/importer.h | 3 +++ app/main.cpp | 21 +++++++++++++++++---- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/importer.cpp b/app/importer.cpp index ec7c790c6..63e122db7 100644 --- a/app/importer.cpp +++ b/app/importer.cpp @@ -343,7 +343,7 @@ Importer::LatteFileVersion Importer::fileVersion(QString file) return UnknownFileType; if (file.endsWith(".layout.latte")) { - KSharedConfigPtr lConfig = KSharedConfig::openConfig(file); + KSharedConfigPtr lConfig = KSharedConfig::openConfig(QFileInfo(file).absoluteFilePath()); KConfigGroup layoutGroup = KConfigGroup(lConfig, "LayoutSettings"); int version = layoutGroup.readEntry("version", 1); @@ -450,6 +450,23 @@ bool Importer::importHelper(QString fileName) return true; } +QString Importer::importLayoutHelper(QString fileName) +{ + LatteFileVersion version = fileVersion(fileName); + + if (version != LayoutVersion2) { + return QString(); + } + + QString newLayoutName = LayoutSettings::layoutName(fileName); + newLayoutName = uniqueLayoutName(newLayoutName); + + QFile(fileName).copy(QDir::homePath() + "/.config/latte/" + newLayoutName + ".layout.latte"); + + return newLayoutName; + +} + QStringList Importer::availableLayouts() { QDir layoutDir(QDir::homePath() + "/.config/latte"); diff --git a/app/importer.h b/app/importer.h index 67f8bbe91..a295e30bf 100644 --- a/app/importer.h +++ b/app/importer.h @@ -69,6 +69,9 @@ public: static bool importHelper(QString fileName); //! check if this layout exists already in the latte directory static bool layoutExists(QString layoutName); + //! imports the specific layout and return the new layout name. + //! if the function didnt succeed return an empty string + static QString importLayoutHelper(QString fileName); static QString nameOfConfigFile(const QString &fileName); static QString uniqueLayoutName(QString name); diff --git a/app/main.cpp b/app/main.cpp index 03746f566..c7ae57ea6 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -84,7 +84,8 @@ int main(int argc, char **argv) , {"default-layout", i18nc("command line", "Import and load default layout on startup.")} , {"available-layouts", i18nc("command line", "Print available layouts")} , {"layout", i18nc("command line", "Load specific layout on startup."), i18nc("command line: load", "layout_name")} - , {"import", i18nc("command line", "Import full configuration."), i18nc("command line: import", "file_name")} + , {"import-layout", i18nc("command line", "Import and load a layout."), i18nc("command line: import", "file_name")} + , {"import-full", i18nc("command line", "Import full configuration."), i18nc("command line: import", "file_name")} , {"graphics", i18nc("command line", "Draw boxes around of the applets.")} , {"with-window", i18nc("command line", "Open a window with much debug information.")} , {"mask", i18nc("command line" , "Show messages of debugging for the mask (Only useful to devs).")} @@ -130,7 +131,7 @@ int main(int argc, char **argv) int timeout {100}; - if (parser.isSet(QStringLiteral("replace")) || parser.isSet(QStringLiteral("import"))) { + if (parser.isSet(QStringLiteral("replace")) || parser.isSet(QStringLiteral("import-full"))) { qint64 pid{ -1}; if (lockFile.getLockInfo(&pid, nullptr, nullptr)) { @@ -145,8 +146,8 @@ int main(int argc, char **argv) return 0; } - if (parser.isSet(QStringLiteral("import"))) { - bool imported = Latte::Importer::importHelper(parser.value(QStringLiteral("import"))); + if (parser.isSet(QStringLiteral("import-full"))) { + bool imported = Latte::Importer::importHelper(parser.value(QStringLiteral("import-full"))); if (!imported) { qInfo() << i18n("The configuration cannot be imported"); @@ -155,6 +156,18 @@ int main(int argc, char **argv) } } + if (parser.isSet(QStringLiteral("import-layout"))) { + QString importedLayout = Latte::Importer::importLayoutHelper(parser.value(QStringLiteral("import-layout"))); + + if (importedLayout.isEmpty()) { + qInfo() << i18n("The layout cannot be imported"); + qGuiApp->exit(); + return 0; + } else { + layoutNameOnStartup = importedLayout; + } + } + if (parser.isSet(QStringLiteral("debug")) || parser.isSet(QStringLiteral("mask"))) { //! set pattern for debug messages //! [%{type}] [%{function}:%{line}] - %{message} [%{backtrace}]