Add oneshot option

This commit is contained in:
woblight
2025-01-28 19:10:00 +01:00
parent 0429a444ac
commit c98a505fbc
5 changed files with 40 additions and 3 deletions
+14
View File
@@ -580,6 +580,20 @@ void Addon::setReadme(QString readme)
emit readmeChanged(m_readme);
}
QFuture<void> Addon::updateIfBehind()
{
std::shared_ptr<QPromise<void>> p(new QPromise<void>());
delegate("UpdateIfBehind", [this](){
},[this, p](){
if (m_gitStatus == Addon::GitStatusFlag::Behind)
update();
delegate("Finished", [p](){
p->finish();
});
});
return p->future();
}
QStringList Addon::branches() const
{
return m_branches;
+2
View File
@@ -26,6 +26,7 @@
#include <QWaitCondition>
#include "utils.h"
#include <QUrl>
#include <QFuture>
class git_repository;
class git_reference;
@@ -209,6 +210,7 @@ public slots:
void reclone();
void loadReadme();
void setReadme(QString readme);
QFuture<void> updateIfBehind();
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Addon::GitStatus)
+16
View File
@@ -766,3 +766,19 @@ void Control::log(QtMsgType type, const QMessageLogContext& context, const QStri
emit logMessage(message.arg(color, msg));
}
void Control::updateAllAndClose()
{
delegate("UpdateAllAndClose", [](){
},[this](){
std::vector<QFuture<void>> futs(m_addons.size());
foreach (auto addon, m_addons) {
futs.push_back(addon->updateIfBehind());
}
delegate("WaitForFinish", [this, futs](){
foreach(auto fut, futs)
fut.waitForFinished();
QApplication::quit();
});
});
}
+2
View File
@@ -151,6 +151,8 @@ public:
void log(QtMsgType type, const QMessageLogContext &context, const QString &msg);
void updateAllAndClose();
private:
static Control *m_instance;
explicit Control(QObject *parent = nullptr);
+6 -3
View File
@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
QCommandLineParser parser;
parser.addOption({"update", "directory to update", "updateLocation"});
parser.addOption({"oneshot", "Updates all addons and exits"});
parser.process(app);
QString update = parser.value("update");
app.setApplicationDisplayName(QObject::tr("Git Addons Manager"));
@@ -80,9 +81,7 @@ int main(int argc, char *argv[])
setts.setValue("style", style);
setts.sync();
}
qmlRegisterSingletonType<Control>("GitAddonsManager.engine",1,0,"Engine",[](QQmlEngine *, QJSEngine *)->QObject*{
return Control::instance();
});
qmlRegisterSingletonInstance<Control>("GitAddonsManager.engine",1,0,"Engine", Control::instance());
if (!update.isEmpty()) {
Control::instance()->completeUpdate(update);
engine.load(QUrl(QStringLiteral("qrc:/Update.qml")));
@@ -90,6 +89,10 @@ int main(int argc, char *argv[])
Control::instance()->init();
qmlRegisterUncreatableType<Addon>("GitAddonsManager.engine",1,0,"Addon","");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (parser.isSet("oneshot")) {
QMetaObject::invokeMethod(Control::instance(), &Control::updateAllAndClose, Qt::QueuedConnection);
}
}
if (engine.rootObjects().isEmpty())
return -1;