Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.2:Staging:C
plasma5-pk-updates
0001-Don-t-show-an-error-for-a-failed-automatic...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Don-t-show-an-error-for-a-failed-automatic-refresh.patch of Package plasma5-pk-updates
From 4d6cfaea1dd4a44867a6f77bdc8a6d3f0b70a396 Mon Sep 17 00:00:00 2001 From: Fabian Vogt <fabian@ritter-vogt.de> Date: Thu, 23 Jan 2020 11:18:58 +0100 Subject: [PATCH] Don't show an error for a failed automatic refresh Summary: If it's an automatically triggered refresh, the first time it fails a likely transient (no network, locking failed, init failed) error is not shown. Test Plan: Started zypper in the background, which locks the database. Reset the timestamp to 0 and started the applet in plasmawindowed. The first autorefresh error wasn't displayed, but the subsequent ones were. After quitting zypper it refreshed successfully and the count was reset. Reviewers: bruns, antlarr Differential Revision: https://phabricator.kde.org/D27423 --- src/declarative/pkupdates.cpp | 42 +++++++++++++++++++++++++++++---- src/declarative/pkupdates.h | 7 +++++- src/plasma/contents/ui/Full.qml | 2 +- src/plasma/contents/ui/main.qml | 2 +- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/declarative/pkupdates.cpp b/src/declarative/pkupdates.cpp index 401c887..1c958db 100644 --- a/src/declarative/pkupdates.cpp +++ b/src/declarative/pkupdates.cpp @@ -197,7 +197,7 @@ void PkUpdates::doDelayedCheckUpdates() { qCDebug(PLASMA_PK_UPDATES) << "CheckUpdates was delayed. Doing it now"; m_checkUpdatesWhenNetworkOnline = false; - checkUpdates(); + checkUpdates(true /* force */, m_isManualCheck /* manual */); } } @@ -230,8 +230,10 @@ QString PkUpdates::timestamp() const return i18n("Last check: never"); } -void PkUpdates::checkUpdates(bool force) +void PkUpdates::checkUpdates(bool force, bool manual) { + m_isManualCheck = manual; + if (!isNetworkOnline()) { qCDebug(PLASMA_PK_UPDATES) << "Checking updates delayed. Network is offline"; @@ -247,7 +249,7 @@ void PkUpdates::checkUpdates(bool force) // evaluate the result connect(m_cacheTrans.data(), &PackageKit::Transaction::statusChanged, this, &PkUpdates::onStatusChanged); connect(m_cacheTrans.data(), &PackageKit::Transaction::finished, this, &PkUpdates::onFinished); - connect(m_cacheTrans.data(), &PackageKit::Transaction::errorCode, this, &PkUpdates::onErrorCode); + connect(m_cacheTrans.data(), &PackageKit::Transaction::errorCode, this, &PkUpdates::onRefreshErrorCode); connect(m_cacheTrans.data(), &PackageKit::Transaction::requireRestart, this, &PkUpdates::onRequireRestart); connect(m_cacheTrans.data(), &PackageKit::Transaction::repoSignatureRequired, this, &PkUpdates::onRepoSignatureRequired); } @@ -397,6 +399,7 @@ void PkUpdates::onFinished(PackageKit::Transaction::Exit status, uint runtime) // save the timestamp KConfigGroup grp(KSharedConfig::openConfig("plasma-pk-updates"), "General"); grp.writeEntry("Timestamp", QDateTime::currentDateTime().toMSecsSinceEpoch()); + grp.writeEntry("FailedAutoRefeshCount", 0); grp.sync(); return; @@ -462,7 +465,7 @@ void PkUpdates::onFinished(PackageKit::Transaction::Exit status, uint runtime) } else { qCDebug(PLASMA_PK_UPDATES) << "Update packages transaction didn't finish successfully"; // just try to refresh cache in case of error, the user might have installed the updates manually meanwhile - checkUpdates(false /* force */); + checkUpdates(false /* force */, false /* manual */); return; } setActivity(Idle); @@ -478,6 +481,35 @@ void PkUpdates::onFinished(PackageKit::Transaction::Exit status, uint runtime) } void PkUpdates::onErrorCode(PackageKit::Transaction::Error error, const QString &details) +{ + showError(error, details); +} + +void PkUpdates::onRefreshErrorCode(PackageKit::Transaction::Error error, const QString &details) +{ + if(!m_isManualCheck) { + auto isTransientError = [] (PackageKit::Transaction::Error error) { + return (error == PackageKit::Transaction::ErrorFailedInitialization) || + (error == PackageKit::Transaction::ErrorNoNetwork) || + (error == PackageKit::Transaction::ErrorCannotGetLock); + }; + + KConfigGroup grp(KSharedConfig::openConfig("plasma-pk-updates"), "General"); + auto failCount = grp.readEntry<qint64>("FailedAutoRefeshCount", 0); + failCount += 1; + grp.writeEntry("FailedAutoRefeshCount", failCount); + grp.sync(); + + if(failCount <= 1 && isTransientError(error)) { + qDebug(PLASMA_PK_UPDATES) << "Ignoring notification for likely transient error during automatic check"; + return; + } + } + + showError(error, details); +} + +void PkUpdates::showError(PackageKit::Transaction::Error error, const QString &details) { qWarning() << "PK error:" << details << "type:" << PackageKit::Daemon::enumToString<PackageKit::Transaction>((int)error, "Error"); if (error == PackageKit::Transaction::ErrorBadGpgSignature || error == PackageKit::Transaction::ErrorNoLicenseAgreement) @@ -581,7 +613,7 @@ void PkUpdates::eulaAgreementResult(const QString &eulaID, bool agreed) if(!agreed) { qCDebug(PLASMA_PK_UPDATES) << "EULA declined"; // Do the same as the failure case in onFinished - checkUpdates(false /* force */); + checkUpdates(false /* force */, m_isManualCheck /* manual */); return; } diff --git a/src/declarative/pkupdates.h b/src/declarative/pkupdates.h index 0f48d2d..c1872d0 100644 --- a/src/declarative/pkupdates.h +++ b/src/declarative/pkupdates.h @@ -181,8 +181,9 @@ public slots: * as a result. Consult the count() property whether there are new updates available. * * @param force whether to force the cache refresh + * @param manual whether this check was triggered via explicit user interaction */ - Q_INVOKABLE void checkUpdates(bool force = true); + Q_INVOKABLE void checkUpdates(bool force = true, bool manual = false); /** * Launch the update process @@ -230,6 +231,7 @@ private slots: void onPackageUpdating(PackageKit::Transaction::Info info, const QString &packageID, const QString &summary); void onFinished(PackageKit::Transaction::Exit status, uint runtime); void onErrorCode(PackageKit::Transaction::Error error, const QString &details); + void onRefreshErrorCode(PackageKit::Transaction::Error error, const QString &details); void onRequireRestart(PackageKit::Transaction::Restart type, const QString &packageID); void onUpdateDetail(const QString &packageID, const QStringList &updates, const QStringList &obsoletes, const QStringList &vendorUrls, const QStringList &bugzillaUrls, const QStringList &cveUrls, PackageKit::Transaction::Restart restart, @@ -249,6 +251,7 @@ private: void setStatusMessage(const QString &message); void setActivity(Activity act); void setPercentage(int value); + void showError(PackageKit::Transaction::Error error, const QString &details); void promptNextEulaAgreement(); QPointer<PackageKit::Transaction> m_updatesTrans; QPointer<PackageKit::Transaction> m_cacheTrans; @@ -267,6 +270,8 @@ private: bool m_lastCheckSuccessful = false; bool m_checkUpdatesWhenNetworkOnline = false; bool m_isOnBattery; + // If the current check was triggered manually + bool m_isManualCheck; // If a transaction failed because of required EULAs, // this contains a map of their IDs to their data QMap<QString, EulaData> m_requiredEulas; diff --git a/src/plasma/contents/ui/Full.qml b/src/plasma/contents/ui/Full.qml index de2a47e..e612738 100644 --- a/src/plasma/contents/ui/Full.qml +++ b/src/plasma/contents/ui/Full.qml @@ -272,7 +272,7 @@ Item { } text: i18n("Check For Updates") tooltip: i18n("Checks for any available updates") - onClicked: PkUpdates.checkUpdates() // circumvent the checks, the user knows what they're doing ;) + onClicked: PkUpdates.checkUpdates(true /* force */, true /* manual */) // circumvent the checks, the user knows what they're doing ;) } PlasmaComponents.Button { diff --git a/src/plasma/contents/ui/main.qml b/src/plasma/contents/ui/main.qml index b18f15d..aaec014 100644 --- a/src/plasma/contents/ui/main.qml +++ b/src/plasma/contents/ui/main.qml @@ -54,7 +54,7 @@ Item interval: 1000 * 60 * 60; // 1 hour onTriggered: { if (needsForcedUpdate() && networkAllowed && batteryAllowed) { - PkUpdates.checkUpdates(); + PkUpdates.checkUpdates(true /* force */, false /* manual */); } } } -- 2.23.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor