From 3847c8d61b614c3de97530cb7bdf2e2708e87263 Mon Sep 17 00:00:00 2001 From: Gres Date: Mon, 16 Mar 2020 21:44:33 +0300 Subject: [PATCH] Inform about updates --- src/manager.cpp | 4 ++++ src/service/updates.cpp | 18 ++++++++++++++++++ src/service/updates.h | 3 +++ 3 files changed, 25 insertions(+) diff --git a/src/manager.cpp b/src/manager.cpp index 76c990e..8d936f8 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -51,6 +51,10 @@ Manager::Manager() tray_.get(), [this] { tray_->showInformation(QObject::tr("Update completed")); }); + QObject::connect(updater_.get(), &update::Loader::updatesAvailable, // + tray_.get(), [this] { + tray_->showInformation(QObject::tr("Updates available")); + }); #ifdef DEVELOP updater_->checkForUpdates(); #endif diff --git a/src/service/updates.cpp b/src/service/updates.cpp index 701e67a..d3a7100 100644 --- a/src/service/updates.cpp +++ b/src/service/updates.cpp @@ -133,6 +133,8 @@ void Loader::handleReply(QNetworkReply *reply) if (isUpdatesReply) { SOFT_ASSERT(model_, return ); model_->parse(replyData); + if (model_->hasUpdates()) + emit updatesAvailable(); return; } @@ -309,6 +311,22 @@ void Model::updateStates() emitColumnsChanged(QModelIndex()); } +bool Model::hasUpdates() const +{ + if (!root_) + return false; + return hasUpdates(*root_); +} + +bool Model::hasUpdates(const Model::Component &component) const +{ + for (const auto &i : component.children) { + if (i->state == State::UpdateAvailable || hasUpdates(*i)) + return true; + } + return false; +} + void Model::updateState(Model::Component &component) { if (!component.files.empty()) { diff --git a/src/service/updates.h b/src/service/updates.h index f761e46..32c9687 100644 --- a/src/service/updates.h +++ b/src/service/updates.h @@ -47,6 +47,7 @@ public: void setExpansions(const std::map& expansions); UserActions userActions() const; void updateStates(); + bool hasUpdates() const; QModelIndex index(int row, int column, const QModelIndex& parent) const override; @@ -74,6 +75,7 @@ private: std::unique_ptr parse(const QJsonObject& json) const; void updateState(Component& component); + bool hasUpdates(const Component& component) const; void fillUserActions(UserActions& actions, Component& component) const; State currentState(const File& file) const; QString expanded(const QString& source) const; @@ -108,6 +110,7 @@ public: Model* model() const; signals: + void updatesAvailable(); void updated(); void error(const QString& error);