1 /*
2 SPDX-FileCopyrightText: 2009 Harald Hvaal <haraldhv (at@at) stud.ntnu.no>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "extractHereDndPlugin.h"
8 #include "ark_debug.h"
9 #include "batchextract.h"
10 #include "archive_kerfuffle.h"
11 #include "pluginmanager.h"
12
13 #include <QAction>
14
15 #include <KFileItemListProperties>
16 #include <KPluginFactory>
17 #include <KLocalizedString>
18
19 K_PLUGIN_CLASS_WITH_JSON(ExtractHereDndPlugin, "ark_dndextract.json")
20
slotTriggered()21 void ExtractHereDndPlugin::slotTriggered()
22 {
23 qCDebug(ARK) << "Preparing job";
24 BatchExtract *batchJob = new BatchExtract();
25
26 batchJob->setAutoSubfolder(true);
27 batchJob->setDestinationFolder(m_dest.toDisplayString(QUrl::PreferLocalFile));
28 batchJob->setPreservePaths(true);
29 for (const QUrl& url : std::as_const(m_urls)) {
30 batchJob->addInput(url);
31 }
32
33 qCDebug(ARK) << "Starting job";
34 batchJob->start();
35 }
36
ExtractHereDndPlugin(QObject * parent,const QVariantList &)37 ExtractHereDndPlugin::ExtractHereDndPlugin(QObject* parent, const QVariantList&)
38 : KIO::DndPopupMenuPlugin(parent)
39 {
40 }
41
setup(const KFileItemListProperties & popupMenuInfo,const QUrl & destination)42 QList<QAction *> ExtractHereDndPlugin::setup(const KFileItemListProperties& popupMenuInfo,
43 const QUrl& destination)
44 {
45 QList<QAction *> actionList;
46
47 Kerfuffle::PluginManager pluginManager;
48 if (!pluginManager.supportedMimeTypes().contains(popupMenuInfo.mimeType())) {
49 qCDebug(ARK) << popupMenuInfo.mimeType() << "is not a supported mimetype";
50 return actionList;
51 }
52
53 qCDebug(ARK) << "Plugin executed";
54
55 const QString extractHereMessage = i18nc("@action:inmenu Context menu shown when an archive is being drag'n'dropped", "Extract here");
56
57 QAction *action = new QAction(QIcon::fromTheme(QStringLiteral("archive-extract")),
58 extractHereMessage, nullptr);
59 connect(action, &QAction::triggered, this, &ExtractHereDndPlugin::slotTriggered);
60
61 actionList.append(action);
62 m_dest = destination;
63 m_urls = popupMenuInfo.urlList();
64
65 return actionList;
66 }
67
68 #include "extractHereDndPlugin.moc"
69