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