diff --git a/app/src/handlers/appimagehandler.cpp b/app/src/handlers/appimagehandler.cpp index 3f3fa704d6a50b775aac39ec430abf1965030a10..7ca9fc28bb5f2ae23a6cd6bb05da6166bf7d626a 100644 --- a/app/src/handlers/appimagehandler.cpp +++ b/app/src/handlers/appimagehandler.cpp @@ -1,6 +1,9 @@ #include "appimagehandler.h" #ifdef QTLIB_UNIX +#include <thread> +#include <chrono> + #include "appimage/update.h" #endif @@ -39,12 +42,23 @@ bool AppImageHandler::isUpdateAvailable(const QString &path) const } #ifdef QTLIB_UNIX -bool AppImageHandler::updateAppImage(const QString &path) const +bool AppImageHandler::updateAppImage(const QString &path) { appimage::update::Updater appImageUpdater(path.toStdString(), false); - /*if (appImageUpdater.start()) { - // TODO: make signals&slots bindings later - }*/ + if (appImageUpdater.start()) { + emit updateStarted(path); + while (!appImageUpdater.isDone()) { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + double progress; + if (appImageUpdater.progress(progress)) { + emit updateProgress(path, progress * 100); + } + } + emit updateFinished(path); + if (!appImageUpdater.hasError()) { + return true; + } + } return false; } diff --git a/app/src/handlers/appimagehandler.h b/app/src/handlers/appimagehandler.h index 9b23165d9e5c8d2887dff23cfc65f324daafd449..2cdc8605108ea2c11dd9601eb01e8e6d0bdd73fd 100644 --- a/app/src/handlers/appimagehandler.h +++ b/app/src/handlers/appimagehandler.h @@ -11,12 +11,17 @@ class AppImageHandler : public QObject public: explicit AppImageHandler(ConfigHandler *configHandler, QObject *parent = nullptr); +signals: + void updateStarted(QString path); + void updateFinished(QString path); + void updateProgress(QString path, int progress); + public slots: QString describeAppImage(const QString &path) const; bool isUpdateAvailable(const QString &path) const; #ifdef QTLIB_UNIX - bool updateAppImage(const QString &path) const; + bool updateAppImage(const QString &path); #endif private: diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp index 50799003f8242c76ffa440a73e4c65a979f1da69..649b8a874d4f45d6f87bd19178cbdbd8cbea8d5f 100644 --- a/app/src/websockets/websocketserver.cpp +++ b/app/src/websockets/websocketserver.cpp @@ -38,6 +38,10 @@ WebSocketServer::WebSocketServer(ConfigHandler *configHandler, const QString &se connect(itemHandler_, &ItemHandler::installFinished, this, &WebSocketServer::itemInstallFinished); connect(itemHandler_, &ItemHandler::uninstallStarted, this, &WebSocketServer::itemUninstallStarted); connect(itemHandler_, &ItemHandler::uninstallFinished, this, &WebSocketServer::itemUninstallFinished); + + connect(appImageHandler_, &AppImageHandler::updateStarted, this, &WebSocketServer::appImageUpdateStarted); + connect(appImageHandler_, &AppImageHandler::updateFinished, this, &WebSocketServer::appImageUpdateFinished); + connect(appImageHandler_, &AppImageHandler::updateProgress, this, &WebSocketServer::appImageUpdateProgress); } WebSocketServer::~WebSocketServer() @@ -193,6 +197,28 @@ void WebSocketServer::itemUninstallFinished(QJsonObject result) sendMessage("", "ItemHandler::uninstallFinished", data); } +void WebSocketServer::appImageUpdateStarted(QString path) +{ + QJsonArray data; + data.append(path); + sendMessage("", "AppImageHandler::updateStarted", data); +} + +void WebSocketServer::appImageUpdateFinished(QString path) +{ + QJsonArray data; + data.append(path); + sendMessage("", "AppImageHandler::updateFinished", data); +} + +void WebSocketServer::appImageUpdateProgress(QString path, int progress) +{ + QJsonArray data; + data.append(path); + data.append(progress); + sendMessage("", "AppImageHandler::updateProgress", data); +} + void WebSocketServer::receiveMessage(const QString &id, const QString &func, const QJsonArray &data) { /* message object format diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h index 595fb428d6d2c6a707b51af71e3326514986d7e2..0e4659b5975772c06f512ce4f139c69dc1e8f0da 100644 --- a/app/src/websockets/websocketserver.h +++ b/app/src/websockets/websocketserver.h @@ -51,6 +51,10 @@ private slots: void itemUninstallStarted(QJsonObject result); void itemUninstallFinished(QJsonObject result); + void appImageUpdateStarted(QString path); + void appImageUpdateFinished(QString path); + void appImageUpdateProgress(QString path, int progress); + private: void receiveMessage(const QString &id, const QString &func, const QJsonArray &data); void sendMessage(const QString &id, const QString &func, const QJsonArray &data);