Add oneshot option
This commit is contained in:
@@ -580,6 +580,20 @@ void Addon::setReadme(QString readme)
|
|||||||
emit readmeChanged(m_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
|
QStringList Addon::branches() const
|
||||||
{
|
{
|
||||||
return m_branches;
|
return m_branches;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include <QWaitCondition>
|
#include <QWaitCondition>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
#include <QFuture>
|
||||||
|
|
||||||
class git_repository;
|
class git_repository;
|
||||||
class git_reference;
|
class git_reference;
|
||||||
@@ -209,6 +210,7 @@ public slots:
|
|||||||
void reclone();
|
void reclone();
|
||||||
void loadReadme();
|
void loadReadme();
|
||||||
void setReadme(QString readme);
|
void setReadme(QString readme);
|
||||||
|
QFuture<void> updateIfBehind();
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_OPERATORS_FOR_FLAGS(Addon::GitStatus)
|
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));
|
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 log(QtMsgType type, const QMessageLogContext &context, const QString &msg);
|
||||||
|
|
||||||
|
void updateAllAndClose();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Control *m_instance;
|
static Control *m_instance;
|
||||||
explicit Control(QObject *parent = nullptr);
|
explicit Control(QObject *parent = nullptr);
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.addOption({"update", "directory to update", "updateLocation"});
|
parser.addOption({"update", "directory to update", "updateLocation"});
|
||||||
|
parser.addOption({"oneshot", "Updates all addons and exits"});
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
QString update = parser.value("update");
|
QString update = parser.value("update");
|
||||||
app.setApplicationDisplayName(QObject::tr("Git Addons Manager"));
|
app.setApplicationDisplayName(QObject::tr("Git Addons Manager"));
|
||||||
@@ -80,9 +81,7 @@ int main(int argc, char *argv[])
|
|||||||
setts.setValue("style", style);
|
setts.setValue("style", style);
|
||||||
setts.sync();
|
setts.sync();
|
||||||
}
|
}
|
||||||
qmlRegisterSingletonType<Control>("GitAddonsManager.engine",1,0,"Engine",[](QQmlEngine *, QJSEngine *)->QObject*{
|
qmlRegisterSingletonInstance<Control>("GitAddonsManager.engine",1,0,"Engine", Control::instance());
|
||||||
return Control::instance();
|
|
||||||
});
|
|
||||||
if (!update.isEmpty()) {
|
if (!update.isEmpty()) {
|
||||||
Control::instance()->completeUpdate(update);
|
Control::instance()->completeUpdate(update);
|
||||||
engine.load(QUrl(QStringLiteral("qrc:/Update.qml")));
|
engine.load(QUrl(QStringLiteral("qrc:/Update.qml")));
|
||||||
@@ -90,6 +89,10 @@ int main(int argc, char *argv[])
|
|||||||
Control::instance()->init();
|
Control::instance()->init();
|
||||||
qmlRegisterUncreatableType<Addon>("GitAddonsManager.engine",1,0,"Addon","");
|
qmlRegisterUncreatableType<Addon>("GitAddonsManager.engine",1,0,"Addon","");
|
||||||
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
||||||
|
if (parser.isSet("oneshot")) {
|
||||||
|
QMetaObject::invokeMethod(Control::instance(), &Control::updateAllAndClose, Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (engine.rootObjects().isEmpty())
|
if (engine.rootObjects().isEmpty())
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user