File indexing completed on 2024-05-12 05:48:10

0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0002 // SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0003 
0004 #include <QAction>
0005 #include <QDebug>
0006 #include <QDir>
0007 #include <QWidget>
0008 
0009 #include <KAbstractFileItemActionPlugin>
0010 #include <KFileItem>
0011 #include <KFileItemListProperties>
0012 #include <KIO/OpenFileManagerWindowJob>
0013 #include <KLocalizedString>
0014 #include <KPluginFactory>
0015 
0016 class Plugin : public KAbstractFileItemActionPlugin
0017 {
0018     Q_OBJECT
0019 public:
0020     explicit Plugin(QObject *parent = nullptr, const QVariantList &args = {})
0021         : KAbstractFileItemActionPlugin(parent)
0022     {
0023         Q_UNUSED(args);
0024     }
0025 
0026     QList<QAction *> actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget) override
0027     {
0028         qDebug() << fileItemInfos.isLocal();
0029         if (!fileItemInfos.isLocal()) {
0030             return {};
0031         }
0032         qDebug() << "actions!!!";
0033         const auto items = fileItemInfos.items();
0034         if (std::all_of(items.cbegin(), items.cend(), [](const KFileItem &item) {
0035                 auto url = item.mostLocalUrl();
0036                 return url.path().startsWith(QDir::homePath());
0037             })) {
0038             return {};
0039         }
0040 
0041         auto action = new QAction(QIcon::fromTheme(QStringLiteral("yast-auth-client")), i18nc("@action", "Open as Administrator"), parentWidget);
0042         QList<QUrl> urls;
0043         for (const auto &item : items) {
0044             auto url = item.url();
0045             url.setScheme(QStringLiteral("admin"));
0046             if (item.isDir() && fileItemInfos.items().size() <= 1 && url.path() != QLatin1String("/")) {
0047                 // Descend into the directory immediately if it is the only selected item...
0048                 url.setPath(url.path() + QLatin1String("/"));
0049             }
0050             qDebug() << "urly!!!" << url;
0051             urls << url;
0052         }
0053         connect(action, &QAction::triggered, this, [urls, this] {
0054             auto job = new KIO::OpenFileManagerWindowJob(this);
0055             job->setHighlightUrls(urls);
0056             job->start();
0057         });
0058         return {action};
0059     }
0060 };
0061 
0062 K_PLUGIN_CLASS_WITH_JSON(Plugin, "fileaction.json")
0063 
0064 #include "fileaction.moc"