From 7c0825ae0416a16f302431cbd1873324777e37a3 Mon Sep 17 00:00:00 2001 From: Gleb Popov <6yearold@gmail.com> Date: Sat, 16 Aug 2025 10:03:17 +0300 Subject: [PATCH 1/2] Revert "offline: Ensure the enum is registered" This reverts commit 8a351053f16423033b292573cd83500a4fcd900b. --- src/offline.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/offline.cpp b/src/offline.cpp index b5e4dc8..d4eaedb 100644 --- a/src/offline.cpp +++ b/src/offline.cpp @@ -26,7 +26,6 @@ using namespace PackageKit; Offline::Offline(QObject *parent) : QObject(parent) , d_ptr(new OfflinePrivate(this)) { - qRegisterMetaType(); QDBusConnection::systemBus().connect(PK_NAME, PK_PATH, DBUS_PROPERTIES, From e64723af6c3fd9f9981b9062a932dbb08453722d Mon Sep 17 00:00:00 2001 From: Gleb Popov <6yearold@gmail.com> Date: Sat, 16 Aug 2025 10:39:42 +0300 Subject: [PATCH 2/2] Make Offline::getResults return a wrapper object This is required to transform qulongulong's into Transaction::Role and Transaction::Error enums. Using these enums directly in QDBusPendingReply<> requires registering them with qDBusRegisterMetaType(). --- src/offline.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- src/offline.h | 24 +++++++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/offline.cpp b/src/offline.cpp index d4eaedb..a34a4af 100644 --- a/src/offline.cpp +++ b/src/offline.cpp @@ -23,6 +23,51 @@ Q_DECLARE_LOGGING_CATEGORY(PACKAGEKITQT_OFFLINE) using namespace PackageKit; +Offline::Results::Results(const QDBusPendingCall &call) + : m_reply(call) +{ +} + +bool Offline::Results::isError() const +{ + return m_reply.isError(); +} + +void Offline::Results::waitForFinished() +{ + m_reply.waitForFinished(); +} + +bool Offline::Results::success() const +{ + return m_reply.argumentAt<0>(); +} + +QStringList Offline::Results::packageIds() const +{ + return m_reply.argumentAt<1>(); +} + +Transaction::Role Offline::Results::role() const +{ + return static_cast(m_reply.argumentAt<2>()); +} + +qulonglong Offline::Results::timeFinished() const +{ + return m_reply.argumentAt<3>(); +} + +Transaction::Error Offline::Results::error() const +{ + return static_cast(m_reply.argumentAt<4>()); +} + +QString Offline::Results::errorDescription() const +{ + return m_reply.argumentAt<5>(); +} + Offline::Offline(QObject *parent) : QObject(parent) , d_ptr(new OfflinePrivate(this)) { @@ -131,7 +176,7 @@ QDBusPendingReply<> Offline::triggerUpgrade(Action action) return QDBusConnection::systemBus().asyncCall(msg, 24 * 60 * 1000 * 1000); } -QDBusPendingReply Offline::getResults() +Offline::Results Offline::getResults() { // Manually invoke dbus because the qdbusxml2cpp does not allow // setting the ALLOW_INTERACTIVE_AUTHORIZATION flag diff --git a/src/offline.h b/src/offline.h index 1b2d782..2772565 100644 --- a/src/offline.h +++ b/src/offline.h @@ -48,6 +48,28 @@ class PACKAGEKITQT_LIBRARY Offline : public QObject }; Q_ENUM(Action) + /** + * Wrapper class representing the returning value of getResults() + */ + class Results + { + friend class Offline; + public: + Results(const QDBusPendingCall &call); + + bool isError() const; + void waitForFinished(); + + bool success() const; + QStringList packageIds() const; + Transaction::Role role() const; + qulonglong timeFinished() const; + Transaction::Error error() const; + QString errorDescription() const; + private: + QDBusPendingReply m_reply; + }; + ~Offline(); Q_PROPERTY(QVariantMap preparedUpgrade READ preparedUpgrade NOTIFY changed) @@ -104,7 +126,7 @@ class PACKAGEKITQT_LIBRARY Offline : public QObject /** * Returns the information about the last offline action performed. */ - QDBusPendingReply getResults(); + Results getResults(); /** * Cancels the offline update so the next boot procceeds as normal.