Skip to content
Snippets Groups Projects
appimageupdater.cpp 1.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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);
    }
    
    
    akiraohgaki's avatar
    akiraohgaki committed
    bool AppImageUpdater::checkForChanges() const
    
    akiraohgaki's avatar
    akiraohgaki committed
    {
        bool updateAvailable = false;
    
    akiraohgaki's avatar
    akiraohgaki committed
        updater_->checkForChanges(updateAvailable);
    
    akiraohgaki's avatar
    akiraohgaki committed
        return updateAvailable;
    }
    
    
    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);
    }