┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/admin/workerintegration.cpp
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2024-07-01 12:03:22 +0000
committerFelix Ernst <[email protected]>2024-07-01 12:03:22 +0000
commit92b178b7404b002778d8288353f65e27ee5de5dd (patch)
treeae38ce183e67098f7d0beb43b7de9dc9ca1e0c52 /src/admin/workerintegration.cpp
parent887f3a6e83832d645ddf55d38e3a098b64e12dd5 (diff)
Guide users to using kio-admin instead of sudo
This commit adds a guided setup that leads users from a situation in which they try to "sudo dolphin" towards them successfully setting up and using kio-admin. 1. When users enter "sudo dolphin", they are told to start Dolphin by typing "dolphin --sudo" or "dolphin --admin" instead. 2. When Dolphin is started with "--sudo" or "--admin" it checks whether an "admin" protocol is installed. If not, a guided setup leads users towards installing it. 3. After that, Dolphin starts with an installed "admin" protocoll like kio-admin. Now a non-modal information dialog appears that explains how to activate and use kio-admin.
Diffstat (limited to 'src/admin/workerintegration.cpp')
-rw-r--r--src/admin/workerintegration.cpp77
1 files changed, 74 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);
}