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 }