2#include "auxiliary/kspaths.h"
3#include "kstars_debug.h"
14 extensionProcess =
new QProcess(
this);
18 emit extensionStateChanged(Ekos::EXTENSION_STARTED);
22 emit extensionStateChanged(Ekos::EXTENSION_STOPPED);
26 emit extensionOutput(extensionProcess->readAll());
30bool extensions::discover()
38 m_Directory =
dir.absolutePath();
41 QStringList imageExtensions = {
".conf",
".jpg",
".bmp",
".gif",
".png",
".svg"};
42 for (
int i = filesExe.
count() - 1; i >= 0; i--)
44 const QString &filename = filesExe.
at(i);
45 for (
const QString &ext : imageExtensions)
55 QStringList filesIcons =
dir.entryList(QStringList() <<
"*.jpg" <<
"*.bmp" <<
"*.gif" <<
"*.png" <<
"*.svg",
59 qCDebug(KSTARS) <<
"Found extension(s): " << filesExe;
62 foreach (QString exe, filesExe)
64 if (!filesConf.
contains(QString(exe).append(
".conf")))
66 qCDebug(KSTARS) << QString(
".conf file not found for extension %1").arg(exe);
75 foreach (QString conf, filesConf)
79 qCDebug(KSTARS) << QString(
"Extraneous extension %1 file found without executable").arg(conf);
85 qCDebug(KSTARS) << QString(
".conf file %1 is not valid").arg(conf);
91 foreach (QString exe, filesExe)
93 if (!filesConf.
contains(QString(exe).append(
".conf")))
102 foreach (QString exe, filesExe)
106 QString iconName =
"";
107 foreach (QString name, filesIcons)
127 QString confFileName;
128 QString tooltip =
"";
129 bool runDetached =
false;
131 QFile confFile(confFileName);
132 if (confFile.exists())
136 QTextStream confTS = QTextStream(&confFile);
137 while (!confTS.
atEnd())
139 QString confLine = confTS.
readLine();
144 else if (confLine.
contains(
"runDetached=true"))
150 else qCDebug(KSTARS) << QString(
"Can't access .conf file %1").arg((exe).append(
".conf"));
152 else qCDebug(KSTARS) << QString(
".conf file %1 disappeared").arg((exe).append(
".conf"));
154 m_ext.tooltip = tooltip;
156 m_ext.detached = runDetached;
157 found->insert(exe, m_ext);
162 else qCDebug(KSTARS) <<
"No extensions found with valid .conf files";
164 else qCDebug(KSTARS) <<
"No extensions found with .conf files";
166 else qCDebug(KSTARS) <<
"No extensions found";
168 else qCDebug(KSTARS) <<
"Could not access extensions directory";
173bool extensions::confValid(
const QString &filePath)
181 QString confFileName;
183 QFile confFile(confFileName);
184 if (confFile.exists())
188 QTextStream confTS = QTextStream(&confFile);
189 while (!confTS.
atEnd())
191 QString confLine = confTS.
readLine();
192 if (confLine.
contains(
"minimum_kstars_version="))
195 QStringList minVersionElements = minVersion.
split(
".");
196 if (minVersionElements.
count() == 3)
198 QList <int> minVersionElementInts;
199 foreach (QString element, minVersionElements)
201 if (element.
toInt() || element ==
"0")
207 if (minVersionElementInts.
count() == minVersionElements.
count())
209 QStringList KStarsVersionElements = QString(KSTARS_VERSION).split(
".");
210 QList <int> KStarsVersionElementInts;
211 foreach (QString element, KStarsVersionElements)
213 if (element.
toInt() || element ==
"0")
218 uint minVerTot = ((minVersionElementInts[0] * 10000) +
219 (minVersionElementInts[1] * 1000) +
220 (minVersionElementInts[2]));
221 uint KStarsVerTot = ((KStarsVersionElementInts[0] * 10000) +
222 (KStarsVersionElementInts[1] * 1000) +
223 (KStarsVersionElementInts[2]));
224 if (KStarsVerTot >= minVerTot)
227 }
else qCDebug(KSTARS) << QString(
".conf file %1 requires a minimum KStars version of %2").arg(filePath, minVersion);
232 if (!valid) qCDebug(KSTARS) << QString(
".conf file %1 does not contain a valid minimum_kstars_version string").arg(filePath);
234 else qCDebug(KSTARS) << QString(
"Can't access .conf file %1").arg(filePath);
236 else qCDebug(KSTARS) << QString(
".conf file %1 disappeared").arg(filePath);
243 if (found->contains(name))
245 extDetails m_ext = found->value(
"name");
253 if (found->contains(name))
255 extDetails m_ext = found->value(name);
256 return m_ext.tooltip;
261void extensions::run(
const QString &extension)
264 processPath.
append(QString(
"%1%2%3").arg(m_Directory,
"/", extension));
265 QStringList arguments;
266 extensionProcess->setWorkingDirectory(m_Directory);
267 extDetails m_ext = found->value(extension);
270 extensionProcess->startDetached(processPath, arguments);
275 extensionProcess->start(processPath, arguments);
277 emit extensionStateChanged(Ekos::EXTENSION_START_REQUESTED);
280void extensions::stop()
282 emit extensionStateChanged(Ekos::EXTENSION_STOP_REQUESTED);
285void extensions::kill()
287 extensionProcess->kill();
KIOCORE_EXPORT QString dir(const QString &fileClass)
QString name(StandardAction id)
void addFile(const QString &fileName, const QSize &size, Mode mode, State state)
QIcon fromTheme(const QString &name)
void append(QList< T > &&value)
const_reference at(qsizetype i) const const
qsizetype count() const const
bool isEmpty() const const
void removeAt(qsizetype i)
bool removeOne(const AT &t)
void finished(int exitCode, QProcess::ExitStatus exitStatus)
QString & append(QChar ch)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
qsizetype length() const const
QString right(qsizetype n) const const
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
int toInt(bool *ok, int base) const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const
QString readLine(qint64 maxlen)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)