From 069ae9f0da6401520380a42884adf8b769d16412 Mon Sep 17 00:00:00 2001 From: Akira Ohgaki <akiraohgaki@gmail.com> Date: Tue, 21 Nov 2017 07:22:29 +0900 Subject: [PATCH] updateAppImage --- app/src/handlers/appimagehandler.cpp | 22 ++++++++++++++++++---- app/src/handlers/appimagehandler.h | 7 ++++++- app/src/websockets/websocketserver.cpp | 26 ++++++++++++++++++++++++++ app/src/websockets/websocketserver.h | 4 ++++ 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/app/src/handlers/appimagehandler.cpp b/app/src/handlers/appimagehandler.cpp index 3f3fa70..7ca9fc2 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 9b23165..2cdc860 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 5079900..649b8a8 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 595fb42..0e4659b 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); -- GitLab