Skip to content
Snippets Groups Projects
appimageupdater.cpp 1.92 KiB
Newer Older
akiraohgaki's avatar
akiraohgaki committed
#include "appimageupdater.h"

akiraohgaki's avatar
akiraohgaki committed
#include <QTimer>
akiraohgaki's avatar
akiraohgaki committed

#include "appimage/update.h"

AppImageUpdater::AppImageUpdater(const QString &id, const QString &path, QObject *parent)
    : QObject(parent), id_(id), path_(path)
{
    isFinishedWithNoError_ = false;
    errorString_ = "";
akiraohgaki's avatar
akiraohgaki committed
    updater_ = new appimage::update::Updater(path_.toStdString(), false);
}

AppImageUpdater::~AppImageUpdater()
{
    delete updater_;
akiraohgaki's avatar
akiraohgaki committed
}

QString AppImageUpdater::id() const
{
    return id_;
}

QString AppImageUpdater::path() const
{
    return path_;
}

akiraohgaki's avatar
akiraohgaki committed
bool AppImageUpdater::isFinishedWithNoError() const
{
    return isFinishedWithNoError_;
}

QString AppImageUpdater::errorString() const
{
    return errorString_;
}

akiraohgaki's avatar
akiraohgaki committed
QString AppImageUpdater::describeAppImage() const
{
    std::string description = "";
akiraohgaki's avatar
akiraohgaki committed
    updater_.describeAppImage(description);
akiraohgaki's avatar
akiraohgaki committed
    return QString::fromStdString(description);
}

bool AppImageUpdater::checkAppImage() const
{
    bool updateAvailable = false;
akiraohgaki's avatar
akiraohgaki committed
    updater_.checkForChanges(updateAvailable);
akiraohgaki's avatar
akiraohgaki committed
    return updateAvailable;
}

void AppImageUpdater::updateAppImage()
{
    isFinishedWithNoError_ = false;
    errorString_ = "";

akiraohgaki's avatar
akiraohgaki committed
    if (!updater_.start()) {
akiraohgaki's avatar
akiraohgaki committed
        emit finished(this);
        return;
    }

akiraohgaki's avatar
akiraohgaki committed
    auto timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &AppImageUpdater::checkUpdaterProgress);
    connect(this, &AppImageUpdater::finished, timer, &QTimer::stop);
    timer->start(100);
}

void AppImageUpdater::checkUpdaterProgress()
{
    if (!updater_->isDone()) {
akiraohgaki's avatar
akiraohgaki committed
        double progress;
akiraohgaki's avatar
akiraohgaki committed
        if (updater_.progress(progress)) {
akiraohgaki's avatar
akiraohgaki committed
            emit updateProgress(id_, progress);
        }
akiraohgaki's avatar
akiraohgaki committed
        return;
akiraohgaki's avatar
akiraohgaki committed
    if (updater_.hasError()) {
akiraohgaki's avatar
akiraohgaki committed
        std::string message;
akiraohgaki's avatar
akiraohgaki committed
        while (updater_.nextStatusMessage(message)) {
akiraohgaki's avatar
akiraohgaki committed
            errorString_ += QString::fromStdString(message) + "\n";
        }
        emit finished(this);
        return;
    }

    isFinishedWithNoError_ = true;
    emit finished(this);
}