Skip to content
Snippets Groups Projects
appimageupdater.cpp 1.96 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
{
akiraohgaki's avatar
akiraohgaki committed
    std::string description;
    if (updater_->describeAppImage(description)) {
        return QString::fromStdString(description);
    }
    return QString();
akiraohgaki's avatar
akiraohgaki committed
bool AppImageUpdater::checkForChanges() const
akiraohgaki's avatar
akiraohgaki committed
    bool updateAvailable;
    if (updater_->checkForChanges(updateAvailable)) {
        return updateAvailable;
    }
    return false;
akiraohgaki's avatar
akiraohgaki committed
void AppImageUpdater::start()
akiraohgaki's avatar
akiraohgaki committed
{
    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);
akiraohgaki's avatar
akiraohgaki committed
    connect(timer, &QTimer::timeout, this, &AppImageUpdater::checkProgress);
akiraohgaki's avatar
akiraohgaki committed
    connect(this, &AppImageUpdater::finished, timer, &QTimer::stop);
    timer->start(100);
}

akiraohgaki's avatar
akiraohgaki committed
void AppImageUpdater::checkProgress()
akiraohgaki's avatar
akiraohgaki committed
{
    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);
}