File indexing completed on 2024-04-28 13:47:02
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"} || 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 (!fileItemInfos.supportsWriting() || !fileItemInfos.isLocal()) { 0052 encryptAction->setEnabled(false); 0053 } 0054 0055 return {encryptAction}; 0056 } 0057 0058 #include "encryptfileitemaction.moc"