1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-22 10:42:29 +01:00

Fix save autostart changes ever time

This fixes issue 163
This commit is contained in:
Elias Steurer 2023-02-04 11:54:44 +01:00
parent 58340a2bf1
commit 2b5d990c7c

View File

@ -28,6 +28,9 @@
#include <QVersionNumber> #include <QVersionNumber>
#include <QtConcurrent/QtConcurrent> #include <QtConcurrent/QtConcurrent>
#include <QtGlobal> #include <QtGlobal>
#include <QDomDocument>
#include <QDomElement>
#include <QDomNodeList>
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
#include "ScreenPlay/util.h" #include "ScreenPlay/util.h"
@ -184,6 +187,77 @@ public slots:
const QString homePath = QDir::homePath(); const QString homePath = QDir::homePath();
QFile settingsPlist(homePath + "/Library/LaunchAgents/" + plistFileName); QFile settingsPlist(homePath + "/Library/LaunchAgents/" + plistFileName);
if (settingsPlist.exists()) { if (settingsPlist.exists()) {
QDomDocument doc;
if (!doc.setContent(&settingsPlist)){
settingsPlist.close();
return ;
}
settingsPlist.close();
QDomElement root = doc.firstChildElement();
QDomNodeList dictList = root.elementsByTagName("dict");
if(dictList.size() > 1 && dictList.size() < 1 ){
return;
}
// Check if autostart and corresponding path is set and abort if so. This is needed since osx 13.0 Ventura
// because it displays an annoying message every time we change the file.
bool isCorrectPath = false;
bool isAutostartEnabled = false;
QDomNode dictNode = dictList.at(0);
if (dictNode.isElement()){
QDomElement dictElement = dictNode.toElement();
QDomNodeList keyList = dictElement.elementsByTagName("key");
for (int j = 0; j < keyList.size(); j++){
QDomNode keyNode = keyList.at(j);
if (keyNode.isElement()){
QDomElement keyElement = keyNode.toElement();
if (keyElement.text() == "ProgramArguments"){
QDomNode valueNode = keyNode.nextSibling();
if (valueNode.isElement()){
QDomElement valueElement = valueNode.toElement();
QDomNodeList stringList = valueElement.elementsByTagName("string");
if (!stringList.isEmpty()){
QDomNode stringNode = stringList.at(0);
if (stringNode.isElement()){
QDomElement stringElement = stringNode.toElement();
const QString path = stringElement.text();
if(path == screenPlayPath){
isCorrectPath = true;
}
}
}
}
}
}
}
}
if (dictNode.isElement()){
QDomElement dictElement = dictNode.toElement();
QDomNodeList keyList = dictElement.elementsByTagName("key");
for (int j = 0; j < keyList.size(); j++){
QDomNode keyNode = keyList.at(j);
if (keyNode.isElement()){
QDomElement keyElement = keyNode.toElement();
if (keyElement.text() == "RunAtLoad"){
QDomNode valueNode = keyNode.nextSibling();
if (valueNode.isElement()){
QDomElement valueElement = valueNode.toElement();
if (valueElement.tagName() == "true"){
isAutostartEnabled = true;
}
}
}
}
}
}
// Nothing to do. Autostart has the same value and the path is also correct.
if(isAutostartEnabled == autostart && isCorrectPath)
return;
if (!settingsPlist.remove()) { if (!settingsPlist.remove()) {
qCritical() << "Unable to remove: " << settingsPlist.fileName(); qCritical() << "Unable to remove: " << settingsPlist.fileName();
} }