Add oneshot option
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user