NSISUpdater::UpdateState NSISUpdater::updateStateOnStart() { ConfigFile cfg; QSettings settings(cfg.configFile(), QSettings::IniFormat); QString updateFileName = settings.value(updateAvailableC).toString(); // has the previous run downloaded an update? if (!updateFileName.isEmpty() && QFile(updateFileName).exists()) { // did it try to execute the update? if (settings.value(autoUpdateAttemptedC, false).toBool()) { // clean up settings.remove(autoUpdateAttemptedC); settings.remove(updateAvailableC); QFile::remove(updateFileName); if (updateSucceeded()) { // success: clean up even more settings.remove(updateTargetVersionC); settings.remove(autoUpdateFailedVersionC); return NoUpdate; } else { // auto update failed. Set autoUpdateFailedVersion as a hint // for visual fallback notification QString targetVersion = settings.value(updateTargetVersionC).toString(); settings.setValue(autoUpdateFailedVersionC, targetVersion); settings.remove(updateTargetVersionC); return UpdateFailed; } } else { if (!settings.contains(autoUpdateFailedVersionC)) { return UpdateAvailable; } } } return NoUpdate; }
bool OCUpdater::performUpdate() { ConfigFile cfg; QSettings settings(cfg.configFile(), QSettings::IniFormat); QString updateFile = settings.value(updateAvailableC).toString(); if (!updateFile.isEmpty() && QFile(updateFile).exists() && !updateSucceeded() /* Someone might have run the updater manually between restarts */ ) { const QString name = Theme::instance()->appNameGUI(); if (QMessageBox::information(0, tr("New %1 Update Ready").arg(name), tr("A new update for %1 is about to be installed. The updater may ask\n" "for additional privileges during the process.").arg(name), QMessageBox::Ok)) { slotStartInstaller(); return true; } } return false; }