File indexing completed on 2024-04-21 16:35:04

0001 /*
0002  * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  *
0006  */
0007 
0008 #include "encryptfileitemaction.h"
0009 
0010 #include <QAction>
0011 #include <QApplication>
0012 #include <QMimeDatabase>
0013 #include <QUrl>
0014 
0015 #include <KDialogJobUiDelegate>
0016 #include <KFileItemListProperties>
0017 #include <KIO/ApplicationLauncherJob>
0018 #include <KLocalizedString>
0019 #include <KPluginFactory>
0020 #include <KRun>
0021 #include <KService>
0022 
0023 K_PLUGIN_FACTORY_WITH_JSON(EncryptFileItemActionFactory, "encryptfileitemaction.json", registerPlugin<EncryptFileItemAction>();)
0024 
0025 EncryptFileItemAction::EncryptFileItemAction(QObject *parent, const QVariantList&)
0026     : KAbstractFileItemActionPlugin {parent}
0027 {}
0028 
0029 QList<QAction*> EncryptFileItemAction::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget)
0030 {
0031     const auto urls = fileItemInfos.urlList();
0032     QMimeDatabase mimeDb;
0033     for (const auto &url : urls) {
0034         const auto mimeType = mimeDb.mimeTypeForUrl(url).name();
0035         if (mimeType == QLatin1String {"application/pgp-encrypted"} or mimeType == QLatin1String {"inode/directory"}) {
0036             return {};
0037         }
0038     }
0039 
0040     const auto icon = QIcon::fromTheme(QStringLiteral("document-encrypt"));
0041 
0042     auto encryptAction = new QAction {icon, i18nc("@action:inmenu Encrypt action in Dolphin context menu", "Encrypt"), parentWidget};
0043     connect(encryptAction, &QAction::triggered, this, [=]() {
0044         KService::Ptr service {new KService {QGuiApplication::applicationDisplayName(), QStringLiteral("symmy --encrypt %F"), QApplication::windowIcon().name()} };
0045         auto job = new KIO::ApplicationLauncherJob {service, parentWidget};
0046         job->setUrls(urls);
0047         job->setUiDelegate(new KDialogJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, parentWidget));
0048         job->start();
0049     });
0050 
0051     if (not fileItemInfos.supportsWriting() or not fileItemInfos.isLocal()) {
0052         encryptAction->setEnabled(false);
0053     }
0054 
0055     return {encryptAction};
0056 }
0057 
0058 #include "encryptfileitemaction.moc"