From b37c1dd85a8b437766419e6f75c18a3d6eea8eee Mon Sep 17 00:00:00 2001 From: audoban Date: Tue, 21 Mar 2017 02:04:34 -0500 Subject: [PATCH] notications for the operations of import/export --- app/globalsettings.cpp | 121 ++++++++++++------ app/lattedock.notifyrc | 20 +++ .../lattedock.notifyrc.template | 20 +++ 3 files changed, 119 insertions(+), 42 deletions(-) create mode 100644 app/lattedock.notifyrc create mode 100644 po/desktop-templates/lattedock.notifyrc.template diff --git a/app/globalsettings.cpp b/app/globalsettings.cpp index 83d2ee53c..c73a39ec5 100644 --- a/app/globalsettings.cpp +++ b/app/globalsettings.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include @@ -27,7 +29,7 @@ GlobalSettings::GlobalSettings(QObject *parent) //! create the alternative session action const QIcon altIcon = QIcon::fromTheme("user-identity"); m_altSessionAction = new QAction(altIcon, i18n("Alternative Session"), this); - m_altSessionAction->setStatusTip(tr("Enable/Disable Alternative Session")); + m_altSessionAction->setStatusTip(i18n("Enable/Disable Alternative Session")); m_altSessionAction->setCheckable(true); connect(m_altSessionAction, &QAction::triggered, this, &GlobalSettings::enableAltSession); connect(m_corona, &DockCorona::currentSessionChanged, this, &GlobalSettings::currentSessionChangedSlot); @@ -115,6 +117,20 @@ void GlobalSettings::setCurrentSession(Dock::SessionType session) } } + +//!BEGIN configuration functions +void GlobalSettings::load() +{ + setExposeAltSession(m_configGroup.readEntry("exposeAltSession", false)); +} + +void GlobalSettings::save() +{ + m_configGroup.writeEntry("exposeAltSession", m_exposeAltSession); + m_configGroup.sync(); +} +//!END configuration functions + bool GlobalSettings::importHelper(const QString &fileName) { if (!QFile::exists(fileName)) @@ -133,10 +149,16 @@ bool GlobalSettings::importHelper(const QString &fileName) if (tempDir.exists()) { tempDir.removeRecursively(); } + archive.close(); }; - if (rootDir) { + auto showNotificationErr = []() { + auto notification = new KNotification("import-fail", KNotification::CloseOnTimeout); + notification->setText(i18nc("import/export config", "Failed to import configuration")); + notification->sendEvent(); + }; + if (rootDir) { if (!tempDir.exists()) tempDir.mkpath(tempDir.absolutePath()); @@ -148,21 +170,13 @@ bool GlobalSettings::importHelper(const QString &fileName) { if (!fileEntry->copyTo(tempDir.absolutePath())) { clean(); + showNotificationErr(); return false; } } else { - qInfo() << i18nc("The file has a wrong format!!!", "import/export config"); - auto showMsgError = [&]() { - auto msg = new QMessageBox; - msg->setText(i18nc("The file has a wrong format", "import/export config")); - msg->setDetailedText(i18nc("Do you want to open other file?", "import/export config")); - msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - - connect(msg, &QMessageBox::finished, msg, &QMessageBox::deleteLater); - - msg->open(); - }; - showMsgError(); + qInfo() << i18nc("import/export config", "The file has a wrong format!!!"); + clean(); + showNotificationErr(); return false; } } @@ -181,25 +195,18 @@ bool GlobalSettings::importHelper(const QString &fileName) if (QFile::remove(latterc) && QFile::remove(appletsrc)) { QFile::copy(tempDir.absolutePath() + "/lattedockrc" , latterc); QFile::copy(tempDir.absolutePath() + "/lattedock-appletsrc", appletsrc); + } else { + showNotificationErr(); + return false; } - archive.close(); - return true; -} - -//!BEGIN configuration functions -void GlobalSettings::load() -{ - setExposeAltSession(m_configGroup.readEntry("exposeAltSession", false)); -} + clean(); + auto notification = new KNotification("import-done", KNotification::CloseOnTimeout); + notification->setText(i18nc("import/export config", "Configuration imported successfully")); + notification->sendEvent(); -void GlobalSettings::save() -{ - m_configGroup.writeEntry("exposeAltSession", m_exposeAltSession); - m_configGroup.sync(); + return true; } -//!END configuration functions - void GlobalSettings::importConfiguration() { if (m_fileDialog) { @@ -207,14 +214,15 @@ void GlobalSettings::importConfiguration() m_fileDialog->deleteLater(); } - m_fileDialog = new QFileDialog(nullptr, i18n("Import configuration") + m_fileDialog = new QFileDialog(nullptr, i18nc("import/export config", "Import configuration") , QDir::homePath() , QStringLiteral("latteconf")); m_fileDialog->setFileMode(QFileDialog::AnyFile); m_fileDialog->setAcceptMode(QFileDialog::AcceptOpen); m_fileDialog->setDefaultSuffix("latteconf"); - m_fileDialog->setNameFilter(i18n("Latte Dock configuration file").append("(*.latterc)")); + m_fileDialog->setNameFilter(i18nc("import/export config", "Latte Dock configuration file") + + "(*.latterc)"); connect(m_fileDialog.data(), &QFileDialog::finished , m_fileDialog.data(), &QFileDialog::deleteLater); @@ -222,16 +230,10 @@ void GlobalSettings::importConfiguration() connect(m_fileDialog.data(), &QFileDialog::fileSelected , this, [&](const QString &file) { - if (!QFile::exists(file)) - return; - - KTar archive(file, QStringLiteral("application/x-tar")); - archive.open(QIODevice::ReadOnly); - auto showMsgError = [&]() { auto msg = new QMessageBox; - msg->setText(i18nc("The file has a wrong format", "import/export config")); - msg->setDetailedText(i18nc("Do you want to open other file?", "import/export config")); + msg->setText(i18nc("import/export config", "The file has a wrong format")); + msg->setDetailedText(i18nc("import/export config", "Do you want to open other file?")); msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); connect(msg, &QMessageBox::accepted, this, &GlobalSettings::importConfiguration); @@ -240,6 +242,14 @@ void GlobalSettings::importConfiguration() msg->open(); }; + if (!QFile::exists(file)) { + showMsgError(); + return; + } + + KTar archive(file, QStringLiteral("application/x-tar")); + archive.open(QIODevice::ReadOnly); + if (!archive.isOpen()) { showMsgError(); return; @@ -256,6 +266,7 @@ void GlobalSettings::importConfiguration() { continue; } else { + archive.close(); showMsgError(); return; } @@ -279,25 +290,37 @@ void GlobalSettings::exportConfiguration() m_fileDialog->deleteLater(); } - m_fileDialog = new QFileDialog(nullptr, i18n("Export configuration") + m_fileDialog = new QFileDialog(nullptr, i18nc("import/export config", "Export configuration") , QDir::homePath() , QStringLiteral("latterc")); m_fileDialog->setFileMode(QFileDialog::AnyFile); m_fileDialog->setAcceptMode(QFileDialog::AcceptSave); m_fileDialog->setDefaultSuffix("latterc"); - m_fileDialog->setNameFilter(i18n("Latte Dock configuration file").append("(*.latterc)")); + m_fileDialog->setNameFilter(i18nc("import/export config", "Latte Dock configuration file") + + "(*.latterc)"); connect(m_fileDialog.data(), &QFileDialog::finished , m_fileDialog.data(), &QFileDialog::deleteLater); connect(m_fileDialog.data(), &QFileDialog::fileSelected , this, [&](const QString &file) { + auto showNotificationError = []() { + auto notification = new KNotification("export-fail", KNotification::CloseOnTimeout); + notification->setText(i18nc("import/export config", "Failed to export configuration")); + notification->sendEvent(); + }; + if (QFile::exists(file) && !QFile::remove(file)) { + showNotificationError(); return; } KTar archive(file, QStringLiteral("application/x-tar")); - archive.open(QIODevice::WriteOnly); + + if (!archive.open(QIODevice::WriteOnly)) { + showNotificationError(); + return; + } std::unique_ptr config {m_corona->config()->copyTo(QDir::tempPath() + "/lattedock-appletsrc")}; std::unique_ptr configApp {KSharedConfig::openConfig()->copyTo(QDir::tempPath() + "/lattedockrc")}; @@ -311,6 +334,20 @@ void GlobalSettings::exportConfiguration() QFile::remove(config->name()); QFile::remove(configApp->name()); + + //NOTE: The pointer is automatically deleted when the event is closed + auto notification = new KNotification("export-done", KNotification::CloseOnTimeout); + notification->setActions({i18nc("import/export config", "Open location")}); + notification->setText(i18nc("import/export config", "Configuration exported successfully")); + + connect(notification, &KNotification::action1Activated + , this, [&file]() { + QDir path(file); + path.cdUp(); + QDesktopServices::openUrl({path.absolutePath()}); + }); + + notification->sendEvent(); }); m_fileDialog->open(); diff --git a/app/lattedock.notifyrc b/app/lattedock.notifyrc new file mode 100644 index 000000000..500319541 --- /dev/null +++ b/app/lattedock.notifyrc @@ -0,0 +1,20 @@ +[Global] +Name=Latte Dock +Comment=Latte Dock +IconName=latte-dock + +[Event/import-done] +Name=Configuration imported successfully +Action=Popup + +[Event/import-fail] +Name=Failed to import configuration +Action=Popup + +[Event/export-done] +Name=Configuration exported successfully +Action=Popup + +[Event/import-fail] +Name=Failed to export configuration +Action=Popup diff --git a/po/desktop-templates/lattedock.notifyrc.template b/po/desktop-templates/lattedock.notifyrc.template new file mode 100644 index 000000000..c319060cd --- /dev/null +++ b/po/desktop-templates/lattedock.notifyrc.template @@ -0,0 +1,20 @@ +[Global] +Name=Latte Dock +Comment=Latte Dock +IconName=latte-dock + +[Event/import-done] +Name=Configuration imported successfully +Action=Popup + +[Event/import-fail] +Name=Failed to import configuration +Action=Popup + +[Event/export-done] +Name=Configuration exported successfully +Action=Popup + +[Event/export-fail] +Name=Failed to export configuration +Action=Popup