File indexing completed on 2025-05-04 04:51:08

0001 /*
0002    SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "viewerpluginexternalscriptsloadjob.h"
0008 #include "externalscriptplugin_debug.h"
0009 
0010 #include <KConfig>
0011 #include <KConfigGroup>
0012 #include <QDir>
0013 
0014 ViewerPluginExternalScriptsLoadJob::ViewerPluginExternalScriptsLoadJob() = default;
0015 
0016 ViewerPluginExternalScriptsLoadJob::~ViewerPluginExternalScriptsLoadJob() = default;
0017 
0018 void ViewerPluginExternalScriptsLoadJob::start()
0019 {
0020     mScriptInfos.clear();
0021     if (mDirectories.isEmpty()) {
0022         qCDebug(EXTERNALSCRIPTPLUGIN_LOG) << "External script directory not defined";
0023     } else {
0024         for (const QString &directory : std::as_const(mDirectories)) {
0025             QDir dir(directory);
0026             if (dir.exists()) {
0027                 const QDir::Filters filters = QDir::Files | QDir::Hidden | QDir::NoSymLinks;
0028                 const QFileInfoList list = dir.entryInfoList(QStringList() << QStringLiteral("*.desktop"), filters);
0029                 const int listSize(list.size());
0030                 QStringList scriptNames;
0031                 for (int i = 0; i < listSize; ++i) {
0032                     const QString filePath = list.at(i).filePath();
0033 
0034                     KConfig config(filePath);
0035                     qCDebug(EXTERNALSCRIPTPLUGIN_LOG) << "load file " << filePath;
0036                     KConfigGroup group(&config, QStringLiteral("Desktop Entry"));
0037                     if (group.isValid()) {
0038                         ViewerPluginExternalScriptInfo info;
0039                         const QString name = group.readEntry("Name", QString());
0040                         info.setName(name);
0041                         info.setExecutable(group.readEntry("Executable", QString()));
0042                         info.setCommandLine(group.readEntry("CommandLine", QString()));
0043                         info.setDescription(group.readEntry("Description", QString()));
0044                         info.setIcon(group.readEntry("Icon", QString()));
0045                         info.setIsReadOnly(!list.at(i).isWritable());
0046                         info.setFileName(filePath);
0047                         if (info.isValid()) {
0048                             mScriptInfos.append(info);
0049                             if (!scriptNames.contains(name)) {
0050                                 scriptNames.append(name);
0051                             }
0052                         }
0053                     }
0054                 }
0055             } else {
0056                 qCDebug(EXTERNALSCRIPTPLUGIN_LOG) << "External script directory doesn't exist " << mDirectories;
0057             }
0058         }
0059     }
0060 }
0061 
0062 void ViewerPluginExternalScriptsLoadJob::setExternalScriptsDirectories(const QStringList &dir)
0063 {
0064     mDirectories = dir;
0065 }
0066 
0067 QStringList ViewerPluginExternalScriptsLoadJob::externalScriptsDirectories() const
0068 {
0069     return mDirectories;
0070 }
0071 
0072 QList<ViewerPluginExternalScriptInfo> ViewerPluginExternalScriptsLoadJob::scriptInfos() const
0073 {
0074     return mScriptInfos;
0075 }