diff --git a/companion/src/updates/updateinterface.cpp b/companion/src/updates/updateinterface.cpp index 5822bf51c..38e9210f2 100644 --- a/companion/src/updates/updateinterface.cpp +++ b/companion/src/updates/updateinterface.cpp @@ -1574,12 +1574,14 @@ bool UpdateFactories::manualUpdate(ProgressWidget * progress) return ok; } -const bool UpdateFactories::updatesAvailable() +const bool UpdateFactories::updatesAvailable(QStringList & names) { bool ret = false; + names.clear(); foreach (UpdateFactoryInterface * factory, registeredUpdateFactories) { if (factory->instance()->isUpdateAvailable()) { + names.append(factory->name()); ret = true; } } diff --git a/companion/src/updates/updateinterface.h b/companion/src/updates/updateinterface.h index d6a6d39ee..1524e0638 100644 --- a/companion/src/updates/updateinterface.h +++ b/companion/src/updates/updateinterface.h @@ -285,7 +285,7 @@ class UpdateFactories : public QWidget bool autoUpdate(ProgressWidget * progress = nullptr); bool manualUpdate(ProgressWidget * progress = nullptr); - const bool updatesAvailable(); + const bool updatesAvailable(QStringList & names); private: QVector registeredUpdateFactories; diff --git a/companion/src/updates/updates.cpp b/companion/src/updates/updates.cpp index 97f6803db..1cc9162f3 100644 --- a/companion/src/updates/updates.cpp +++ b/companion/src/updates/updates.cpp @@ -63,17 +63,24 @@ void Updates::autoUpdates() g.lastUpdateCheck(QDateTime::currentDateTime().toString(Qt::ISODate)); - if (!factories->updatesAvailable()) + QStringList list; + + if (!factories->updatesAvailable(list)) return; if (QMessageBox::question(parentWidget(), CPN_STR_APP_NAME % ": " % tr("Checking for Updates"), - tr("One or more updates are available. Update now?"), + tr("Updates available for:\n %1\n\nUpdate now?").arg(list.join("\n ")), (QMessageBox::Yes | QMessageBox::No), QMessageBox::No) == QMessageBox::Yes) { factories->resetAllRunEnvironments(); - if (factories->autoUpdate()) - checkRunSDSync(); + if (!factories->autoUpdate()) { + QMessageBox::warning(this, CPN_STR_APP_NAME, tr("Updates finished with errors")); + return; + } + + QMessageBox::information(this, CPN_STR_APP_NAME, tr("Updates finished successfully")); + checkRunSDSync(); } } diff --git a/companion/src/updates/updatesdialog.cpp b/companion/src/updates/updatesdialog.cpp index 77dc2eb21..deaa58ac5 100644 --- a/companion/src/updates/updatesdialog.cpp +++ b/companion/src/updates/updatesdialog.cpp @@ -177,6 +177,7 @@ UpdatesDialog::UpdatesDialog(QWidget * parent, UpdateFactories * factories) : UpdateOptionsDialog *dlg = new UpdateOptionsDialog(this, factories, i); connect(dlg, &UpdateOptionsDialog::changed, [=](const int i) { QString name = g.component[i].name(); + chkUpdate[i]->setChecked(!factories->isLatestRelease(name)); lblCurrentRel[i]->setText(factories->currentRelease(name)); lblUpdateRel[i]->setText(factories->updateRelease(name)); });