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"