Files
86Box/src/qt/qt_updatecheckdialog.cpp

95 lines
2.9 KiB
C++
Raw Normal View History

2024-06-08 13:25:09 -04:00
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Update check dialog module
*
*
*
* Authors: cold-brewed
*
* Copyright 2024 cold-brewed
*/
#include <QDir>
#include <QTimer>
#include "qt_updatecheckdialog.hpp"
#include "ui_qt_updatecheckdialog.h"
#include "qt_updatedetails.hpp"
extern "C" {
#include <86box/version.h>
}
UpdateCheckDialog::
UpdateCheckDialog(const UpdateCheck::UpdateChannel channel, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateCheckDialog), updateCheck(new UpdateCheck(channel))
{
ui->setupUi(this);
ui->statusLabel->setHidden(true);
updateChannel = channel;
currentVersion = UpdateCheck::getCurrentVersion(updateChannel);
connect(updateCheck, &UpdateCheck::updateCheckError, [=](const QString &errorMsg) {
generalDownloadError(errorMsg);
});
connect(updateCheck, &UpdateCheck::updateCheckComplete, this, &UpdateCheckDialog::downloadComplete);
QTimer::singleShot(0, [this] {
updateCheck->checkForUpdates();
});
}
UpdateCheckDialog::~
UpdateCheckDialog()
= default;
void
UpdateCheckDialog::generalDownloadError(const QString &error) const
{
ui->progressBar->setMaximum(100);
ui->progressBar->setValue(100);
ui->statusLabel->setVisible(true);
const auto statusText = tr("There was an error checking for updates:\n\n%1\n\nPlease try again later.").arg(error);
ui->statusLabel->setText(statusText);
ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok);
}
void
UpdateCheckDialog::downloadComplete(const UpdateCheck::UpdateResult &result)
{
if (result.upToDate) {
upToDate();
return;
}
const auto updateDetails = new UpdateDetails(result, this);
2024-06-08 13:25:09 -04:00
connect(updateDetails, &QDialog::accepted, [this] {
accept();
});
connect(updateDetails, &QDialog::rejected, [this] {
reject();
});
updateDetails->exec();
}
void
UpdateCheckDialog::upToDate()
{
ui->titleLabel->setText(tr("Update check complete"));
ui->progressBar->setMaximum(100);
ui->progressBar->setValue(100);
ui->statusLabel->setVisible(true);
QString currentVersionString;
if (updateChannel == UpdateCheck::UpdateChannel::Stable)
currentVersionString = QString("v%1").arg(currentVersion);
else
currentVersionString = QString("%1 %2").arg(tr("build"), currentVersion);
const auto statusText = tr("You are running the latest %1 version of 86Box: %2").arg(updateChannel == UpdateCheck::UpdateChannel::Stable ? tr("stable") : tr("beta"), currentVersionString);
2024-06-08 13:25:09 -04:00
ui->statusLabel->setText(statusText);
ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok);
}