72 lines
2.0 KiB
C++
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);
|
|
}
|
|
|
|
|