Files
archpack/cpp/updatemanager/private.cpp

72 lines
2.0 KiB
C++

#include "updatemanager.hpp"
#include <QStandardPaths>
void UpdateManager::set_packages(const QVariantList& value)
{
const int oldCount = packageCount();
m_packages = value;
emit packagesChanged();
if (packageCount() != oldCount) emit packageCountChanged();
}
void UpdateManager::set_is_checking(bool value)
{
if (m_isChecking == value) return;
m_isChecking = value;
emit isCheckingChanged();
}
void UpdateManager::on_process_finished(int exit_code, QProcess::ExitStatus status)
{
if (status == QProcess::CrashExit || (exit_code != 0 && exit_code != 2))
{
on_process_error(m_process.error());
return;
}
const QString output = QString::fromUtf8(m_process.readAllStandardOutput());
const QStringList lines = output.split(QLatin1Char('\n'), Qt::SkipEmptyParts);
QVariantList package_list;
package_list.reserve(lines.size());
for (const QString &line : lines)
{
const QStringList parts = line.split(QLatin1Char(' '), Qt::SkipEmptyParts);
if (parts.size() != 4 || parts.at(2) != QStringLiteral("->")) continue;
QVariantMap package;
package.insert(QStringLiteral("name"), parts.at(0));
package.insert(QStringLiteral("version"), parts.at(1) + QStringLiteral(" → ") + parts.at(3));
package.insert(QStringLiteral("updated"), false);
package.insert(QStringLiteral("updating"), false);
package_list.append(package);
}
set_packages(package_list);
set_is_checking(false);
}
void UpdateManager::on_process_error(QProcess::ProcessError error)
{
if (!m_isChecking) return;
QString reason;
if (error == QProcess::FailedToStart)
{
reason = QStringLiteral("failed to start: ") + m_process.errorString();
}
else
{
reason = QStringLiteral("failed, exit code %1").arg(m_process.exitCode());
const QString errText = QString::fromUtf8(m_process.readAllStandardError()).trimmed();
if (!errText.isEmpty()) reason += QStringLiteral(": ") + errText;
}
qWarning().noquote() << "checkupdates" << reason;
set_is_checking(false);
}