diff --git a/src/offline.cpp b/src/offline.cpp index b5e4dc8..a34a4af 100644 --- a/src/offline.cpp +++ b/src/offline.cpp @@ -23,10 +23,54 @@ 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)) { - qRegisterMetaType(); QDBusConnection::systemBus().connect(PK_NAME, PK_PATH, DBUS_PROPERTIES, @@ -132,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.