diff options
Diffstat (limited to 'src/admin')
| -rw-r--r-- | src/admin/workerintegration.cpp | 77 | ||||
| -rw-r--r-- | src/admin/workerintegration.h | 9 |
2 files changed, 83 insertions, 3 deletions
diff --git a/src/admin/workerintegration.cpp b/src/admin/workerintegration.cpp index f9b587391..038c52094 100644 --- a/src/admin/workerintegration.cpp +++ b/src/admin/workerintegration.cpp @@ -7,7 +7,9 @@ #include "workerintegration.h" +#include "config-dolphin.h" #include "dolphinmainwindow.h" +#include "dolphinpackageinstaller.h" #include "dolphinviewcontainer.h" #include <KActionCollection> @@ -18,8 +20,77 @@ #include <QAction> +#include <iostream> + using namespace Admin; +/** Free file-local functions */ +namespace +{ +/** @returns the translated name of the actAsAdminAction. */ +QString actionName() +{ + return i18nc("@action:inmenu", "Act as Administrator"); +}; + +/** @returns the default keyboard shortcut of the actAsAdminAction. */ +QKeySequence actionDefaultShortcut() +{ + return Qt::CTRL | Qt::SHIFT | Qt::ALT | Qt::Key_A; +}; + +/** @returns whether any worker for the protocol "admin" is available. */ +bool isWorkerInstalled() +{ + return KProtocolInfo::isKnownProtocol(QStringLiteral("admin")); +} +} + +void Admin::guideUserTowardsInstallingAdminWorker() +{ + if (!isWorkerInstalled()) { + std::cout << qPrintable( + xi18nc("@info:shell", + "<application>Dolphin</application> requires <application>%1</application> to manage system-controlled files, but it is not installed.<nl/>" + "Press %2 to install <application>%1</application> or %3 to cancel.", + ADMIN_WORKER_PACKAGE_NAME, + QKeySequence{Qt::Key_Enter}.toString(QKeySequence::NativeText), + QKeySequence{Qt::CTRL | Qt::Key_C}.toString(QKeySequence::NativeText))); + std::cin.ignore(); + + /// Installing admin worker + DolphinPackageInstaller adminWorkerInstaller{ADMIN_WORKER_PACKAGE_NAME, QUrl(QStringLiteral("appstream://org.kde.kio.admin")), isWorkerInstalled}; + QObject::connect(&adminWorkerInstaller, &KJob::result, [](KJob *job) { + if (job->error()) { + std::cout << qPrintable(job->errorString()) << std::endl; + exit(1); + } + }); + adminWorkerInstaller.exec(); + } +} + +void Admin::guideUserTowardsUsingAdminWorker() +{ + KuitSetup *kuitSetup = &Kuit::setupForDomain("dolphin"); + kuitSetup->setTagPattern(QStringLiteral("numberedlist"), QStringList{}, Kuit::RichText, ki18nc("tag-format-pattern <numberedlist> rich", "<ol>%1</ol>")); + kuitSetup->setTagPattern(QStringLiteral("numbereditem"), QStringList{}, Kuit::RichText, ki18nc("tag-format-pattern <numbereditem> rich", "<li>%1</li>")); + + KMessageBox::information( + nullptr, + xi18nc("@info", + "<para>Make use of your administrator rights in Dolphin:<numberedlist>" + "<numbereditem>Navigate to the file or folder you want to change.</numbereditem>" + "<numbereditem>Activate the \"%1\" action either under <interface>Open Menu|More|View</interface> or <interface>Menu Bar|View</interface>.<nl/>" + "Default shortcut: <shortcut>%2</shortcut></numbereditem>" + "<numbereditem>After authorization you can manage files as an administrator.</numbereditem></numberedlist></para>", + actionName(), + actionDefaultShortcut().toString(QKeySequence::NativeText)), + i18nc("@title:window", "How to Administrate"), + "", + KMessageBox::WindowModal); +} + QString Admin::warningMessage() { return xi18nc( @@ -52,12 +123,12 @@ WorkerIntegration::WorkerIntegration(DolphinMainWindow *parent, QAction *actAsAd void WorkerIntegration::createActAsAdminAction(KActionCollection *actionCollection, DolphinMainWindow *dolphinMainWindow) { Q_ASSERT(!instance); - if (KProtocolInfo::isKnownProtocol(QStringLiteral("admin"))) { + if (isWorkerInstalled()) { QAction *actAsAdminAction = actionCollection->addAction(QStringLiteral("act_as_admin")); - actAsAdminAction->setText(i18nc("@action:inmenu", "Act as Administrator")); + actAsAdminAction->setText(actionName()); actAsAdminAction->setIcon(QIcon::fromTheme(QStringLiteral("system-switch-user"))); actAsAdminAction->setCheckable(true); - actionCollection->setDefaultShortcut(actAsAdminAction, Qt::CTRL | Qt::SHIFT | Qt::ALT | Qt::Key_A); + actionCollection->setDefaultShortcut(actAsAdminAction, actionDefaultShortcut()); instance = new WorkerIntegration(dolphinMainWindow, actAsAdminAction); } diff --git a/src/admin/workerintegration.h b/src/admin/workerintegration.h index 512303744..0c87c2ecf 100644 --- a/src/admin/workerintegration.h +++ b/src/admin/workerintegration.h @@ -23,6 +23,15 @@ class QUrl; namespace Admin { /** + * When a user starts Dolphin with arguments that imply that they want to use administrative rights, this method is called. + * This function acts like a command line program that guides users towards installing kio-admin. It will not return until this is accomplished. + * This function will do nothing if kio-admin is already installed. + */ +void guideUserTowardsInstallingAdminWorker(); + +void guideUserTowardsUsingAdminWorker(); + +/** * Used with the KMessageBox API so users can disable the warning. * @see KMessageBox::saveDontShowAgainContinue() * @see KMessageBox::enableMessage() |
