#include "updatemanager.hpp" #include 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); }