d915c61
From ab3ee74c7ec4b74b4c9d1ab6298f4c32da03073b Mon Sep 17 00:00:00 2001
d915c61
From: Daniel Nicoletti <dantti12@gmail.com>
d915c61
Date: Tue, 2 Oct 2012 09:04:19 -0300
d915c61
Subject: [PATCH 4/4] packagekit-qt: Break ABI to make pk-qt more closer to
d915c61
 what pk-glib is and allow for searchGroup() to work
d915c61
d915c61
---
d915c61
 configure.ac                              |  2 +-
d915c61
 lib/packagekit-qt2/Makefile.am            |  4 ++
d915c61
 lib/packagekit-qt2/bitfield.cpp           | 70 +++++++++++++++++++++++++++
d915c61
 lib/packagekit-qt2/bitfield.h             | 33 +++++++++++++
d915c61
 lib/packagekit-qt2/daemon.cpp             | 15 +-----
d915c61
 lib/packagekit-qt2/daemon.h               | 77 ++++++++++++++++++++++++++++++
d915c61
 lib/packagekit-qt2/package.cpp            | 23 ++++-----
d915c61
 lib/packagekit-qt2/package.h              |  4 +-
d915c61
 lib/packagekit-qt2/packagedetails.cpp     |  8 +---
d915c61
 lib/packagekit-qt2/packagedetails.h       | 79 ++++++++++++++++---------------
d915c61
 lib/packagekit-qt2/transaction.cpp        | 18 ++++---
d915c61
 lib/packagekit-qt2/transaction.h          | 74 ++++++++++++++++-------------
d915c61
 lib/packagekit-qt2/transactionprivate.cpp |  2 +-
d915c61
 13 files changed, 295 insertions(+), 114 deletions(-)
d915c61
 create mode 100644 lib/packagekit-qt2/bitfield.cpp
d915c61
 create mode 100644 lib/packagekit-qt2/bitfield.h
d915c61
d915c61
diff --git a/configure.ac b/configure.ac
d915c61
index 1a4f123..a7530c3 100644
d915c61
--- a/configure.ac
d915c61
+++ b/configure.ac
d915c61
@@ -74,7 +74,7 @@ AC_SUBST(LT_AGE)
d915c61
 # - If the interface is the same as the previous version, but bugs are
d915c61
 #   fixed, change:
d915c61
 #      REVISION += 1
d915c61
-LT_QT_CURRENT=4
d915c61
+LT_QT_CURRENT=5
d915c61
 LT_QT_REVISION=0
d915c61
 LT_QT_AGE=0
d915c61
 AC_SUBST(LT_QT_CURRENT)
d915c61
diff --git a/lib/packagekit-qt2/Makefile.am b/lib/packagekit-qt2/Makefile.am
d915c61
index 6e5e777..959e618 100644
d915c61
--- a/lib/packagekit-qt2/Makefile.am
d915c61
+++ b/lib/packagekit-qt2/Makefile.am
d915c61
@@ -21,6 +21,8 @@ MOCFILES =							\
d915c61
 	daemonproxy.moc						\
d915c61
 	transactionproxy.moc					\
d915c61
 	transaction.moc						\
d915c61
+	package.moc						\
d915c61
+	packagedetails.moc					\
d915c61
 	$(NULL)
d915c61
 
d915c61
 lib_LTLIBRARIES =						\
d915c61
@@ -30,6 +32,7 @@ lib_LTLIBRARIES =						\
d915c61
 libpackagekit_qt2_includedir = $(includedir)/PackageKit/packagekit-qt2
d915c61
 
d915c61
 libpackagekit_qt2_include_HEADERS =				\
d915c61
+	bitfield.h						\
d915c61
 	Signature						\
d915c61
 	signature.h						\
d915c61
 	Eula							\
d915c61
@@ -47,6 +50,7 @@ libpackagekit_qt2_include_HEADERS =				\
d915c61
 	$(NULL)
d915c61
 
d915c61
 libpackagekit_qt2_la_SOURCES =					\
d915c61
+	bitfield.cpp						\
d915c61
 	signature.h						\
d915c61
 	signature.cpp						\
d915c61
 	eula.h							\
d915c61
diff --git a/lib/packagekit-qt2/bitfield.cpp b/lib/packagekit-qt2/bitfield.cpp
d915c61
new file mode 100644
d915c61
index 0000000..2fa6e82
d915c61
--- /dev/null
d915c61
+++ b/lib/packagekit-qt2/bitfield.cpp
d915c61
@@ -0,0 +1,70 @@
d915c61
+#include "bitfield.h"
d915c61
+
d915c61
+using namespace PackageKit;
d915c61
+
d915c61
+Bitfield::Bitfield () : m_val (0)
d915c61
+{
d915c61
+}
d915c61
+
d915c61
+Bitfield::Bitfield (qulonglong val) : m_val (val)
d915c61
+{
d915c61
+}
d915c61
+
d915c61
+Bitfield::~Bitfield ()
d915c61
+{
d915c61
+}
d915c61
+
d915c61
+qulonglong Bitfield::operator& (qulonglong mask) const
d915c61
+{
d915c61
+	return m_val & (1ULL << mask);
d915c61
+}
d915c61
+
d915c61
+qulonglong Bitfield::operator&= (qulonglong mask)
d915c61
+{
d915c61
+	m_val &= (1ULL << mask);
d915c61
+	return m_val;
d915c61
+}
d915c61
+
d915c61
+qulonglong Bitfield::operator| (qulonglong mask) const
d915c61
+{
d915c61
+	return m_val | (1ULL << mask);
d915c61
+}
d915c61
+
d915c61
+qulonglong Bitfield::operator|= (qulonglong mask)
d915c61
+{
d915c61
+	m_val |= (1ULL << mask);
d915c61
+	return m_val;
d915c61
+}
d915c61
+
d915c61
+Bitfield Bitfield::operator& (Bitfield mask) const
d915c61
+{
d915c61
+	return m_val & mask.m_val;
d915c61
+}
d915c61
+
d915c61
+Bitfield Bitfield::operator&= (Bitfield mask)
d915c61
+{
d915c61
+	m_val &= mask.m_val;
d915c61
+	return m_val;
d915c61
+}
d915c61
+
d915c61
+Bitfield Bitfield::operator| (Bitfield mask) const
d915c61
+{
d915c61
+	return m_val | mask.m_val;
d915c61
+}
d915c61
+
d915c61
+Bitfield Bitfield::operator|= (Bitfield mask)
d915c61
+{
d915c61
+	m_val |= mask.m_val;
d915c61
+	return m_val;
d915c61
+}
d915c61
+
d915c61
+
d915c61
+Bitfield& Bitfield::operator= (const Bitfield& other)
d915c61
+{
d915c61
+	if (this == &other)
d915c61
+		return *this;
d915c61
+
d915c61
+	m_val = other.m_val;
d915c61
+
d915c61
+	return *this;
d915c61
+}
d915c61
diff --git a/lib/packagekit-qt2/bitfield.h b/lib/packagekit-qt2/bitfield.h
d915c61
new file mode 100644
d915c61
index 0000000..d7dd481
d915c61
--- /dev/null
d915c61
+++ b/lib/packagekit-qt2/bitfield.h
d915c61
@@ -0,0 +1,33 @@
d915c61
+#ifndef PACKAGEKIT_BITFIELD_H
d915c61
+#define PACKAGEKIT_BITFIELD_H
d915c61
+
d915c61
+#include <QtGlobal>
d915c61
+
d915c61
+namespace PackageKit {
d915c61
+
d915c61
+class Bitfield
d915c61
+{
d915c61
+public:
d915c61
+    Bitfield ();
d915c61
+    Bitfield (qulonglong val);
d915c61
+    ~Bitfield ();
d915c61
+
d915c61
+    qulonglong operator& (qulonglong mask) const;
d915c61
+    qulonglong operator&= (qulonglong mask);
d915c61
+    qulonglong operator| (qulonglong mask) const;
d915c61
+    qulonglong operator|= (qulonglong mask);
d915c61
+
d915c61
+    Bitfield operator& (Bitfield mask) const;
d915c61
+    Bitfield operator&= (Bitfield mask);
d915c61
+    Bitfield operator| (Bitfield mask) const;
d915c61
+    Bitfield operator|= (Bitfield mask);
d915c61
+
d915c61
+    Bitfield& operator= (const Bitfield& other);
d915c61
+
d915c61
+private:
d915c61
+    qulonglong m_val;
d915c61
+};
d915c61
+
d915c61
+} // End namespace PackageKit
d915c61
+
d915c61
+#endif
d915c61
diff --git a/lib/packagekit-qt2/daemon.cpp b/lib/packagekit-qt2/daemon.cpp
d915c61
index 7b0cee1..8984946 100644
d915c61
--- a/lib/packagekit-qt2/daemon.cpp
d915c61
+++ b/lib/packagekit-qt2/daemon.cpp
d915c61
@@ -78,11 +78,7 @@ Daemon::~Daemon()
d915c61
 
d915c61
 Transaction::Roles Daemon::actions()
d915c61
 {
d915c61
-    qulonglong roles = global()->d_ptr->daemon->roles();
d915c61
-
d915c61
-    Transaction::Roles flags;
d915c61
-    flags |= static_cast<Transaction::Role>(roles);
d915c61
-    return flags;
d915c61
+    return global()->d_ptr->daemon->roles();
d915c61
 }
d915c61
 
d915c61
 QString Daemon::backendName()
d915c61
@@ -144,14 +140,7 @@ QDBusObjectPath Daemon::getTid()
d915c61
 
d915c61
 uint Daemon::getTimeSinceAction(Transaction::Role role)
d915c61
 {
d915c61
-    // We need to find the Role enum position
d915c61
-    // since this method does not support bitwised enum.
d915c61
-    for (uint i = 0; i < 64; ++i) {
d915c61
-        if (role == (1 << i)) {
d915c61
-            return global()->d_ptr->daemon->GetTimeSinceAction(i);
d915c61
-        }
d915c61
-    }
d915c61
-    return UINT_MAX;
d915c61
+    return global()->d_ptr->daemon->GetTimeSinceAction(role);
d915c61
 }
d915c61
 
d915c61
 QList<QDBusObjectPath> Daemon::getTransactionList()
d915c61
diff --git a/lib/packagekit-qt2/daemon.h b/lib/packagekit-qt2/daemon.h
d915c61
index 8ef525f..d8bb976 100644
d915c61
--- a/lib/packagekit-qt2/daemon.h
d915c61
+++ b/lib/packagekit-qt2/daemon.h
d915c61
@@ -23,6 +23,7 @@
d915c61
 #define PACKAGEKIT_DAEMON_H
d915c61
 
d915c61
 #include <QtCore/QObject>
d915c61
+#include <QtCore/QMetaEnum>
d915c61
 
d915c61
 #include "package.h"
d915c61
 #include "transaction.h"
d915c61
@@ -242,6 +243,82 @@ public:
d915c61
      * The micro version number.
d915c61
      */
d915c61
     static uint versionMicro();
d915c61
+    
d915c61
+    /**
d915c61
+     * Returns the string representing the enum
d915c61
+     * Useful for PackageDetails::Group
d915c61
+     */
d915c61
+    template<class T> static QString enumToString(int value, const char *enumName)
d915c61
+    {
d915c61
+        QString prefix = enumName;
d915c61
+        int id = T::staticMetaObject.indexOfEnumerator(enumName);
d915c61
+        QMetaEnum e = T::staticMetaObject.enumerator(id);
d915c61
+        if (!e.isValid ()) {
d915c61
+//             qDebug() << "Invalid enum " << prefix;
d915c61
+            return QString();
d915c61
+        }
d915c61
+        QString enumString = e.valueToKey(value);
d915c61
+        if (enumString.isNull()) {
d915c61
+//             qDebug() << "Enum key not found while searching for value" << QString::number(value) << "in enum" << prefix;
d915c61
+            return QString();
d915c61
+        }
d915c61
+
d915c61
+        // Remove the prefix
d915c61
+        if(!prefix.isNull() && enumString.indexOf(prefix) == 0) {
d915c61
+            enumString.remove(0, prefix.length());
d915c61
+        }
d915c61
+
d915c61
+        QString pkName;
d915c61
+        for(int i = 0 ; i < enumString.length() - 1 ; ++i) {
d915c61
+            pkName += enumString[i];
d915c61
+            if(enumString[i+1].isUpper())
d915c61
+                pkName += QChar('-');
d915c61
+        }
d915c61
+        pkName += enumString[enumString.length() - 1];
d915c61
+
d915c61
+        return pkName.toLower();
d915c61
+    }
d915c61
+    
d915c61
+    template<class T> static int enumFromString(const QString &str, const char *enumName)
d915c61
+    {
d915c61
+        QString prefix = enumName;
d915c61
+        QString realName;
d915c61
+        bool lastWasDash = false;
d915c61
+        QChar buf;
d915c61
+
d915c61
+        for(int i = 0 ; i < str.length() ; ++i) {
d915c61
+            buf = str[i].toLower();
d915c61
+            if(i == 0 || lastWasDash) {
d915c61
+                buf = buf.toUpper();
d915c61
+            }
d915c61
+
d915c61
+            lastWasDash = false;
d915c61
+            if(buf == QLatin1Char('-')) {
d915c61
+                lastWasDash = true;
d915c61
+            } else if(buf == QLatin1Char('~')) {
d915c61
+                lastWasDash = true;
d915c61
+                realName += "Not";
d915c61
+            } else {
d915c61
+                realName += buf;
d915c61
+            }
d915c61
+        };
d915c61
+
d915c61
+        if (!prefix.isNull()) {
d915c61
+            realName = prefix + realName;
d915c61
+        }
d915c61
+
d915c61
+        int id = T::staticMetaObject.indexOfEnumerator(enumName);
d915c61
+        QMetaEnum e = T::staticMetaObject.enumerator(id);
d915c61
+        int enumValue = e.keyToValue(realName.toAscii().data());
d915c61
+
d915c61
+        if (enumValue == -1) {
d915c61
+            enumValue = e.keyToValue(prefix.append("Unknown").toAscii().data());
d915c61
+            if (!QString(enumName).isEmpty()) {
d915c61
+//                 qDebug() << "enumFromString (" << enumName << ") : converted" << str << "to" << QString("Unknown").append(enumName) << ", enum id" << id;
d915c61
+            }
d915c61
+        }
d915c61
+        return enumValue;
d915c61
+    }
d915c61
 
d915c61
 Q_SIGNALS:
d915c61
     /**
d915c61
diff --git a/lib/packagekit-qt2/package.cpp b/lib/packagekit-qt2/package.cpp
d915c61
index 2e1a91a..384c32e 100644
d915c61
--- a/lib/packagekit-qt2/package.cpp
d915c61
+++ b/lib/packagekit-qt2/package.cpp
d915c61
@@ -28,9 +28,9 @@
d915c61
 using namespace PackageKit;
d915c61
 
d915c61
 Package::Package(const QString &packageId, Info info, const QString &summary) :
d915c61
-    QString(packageId),
d915c61
     d(new PackagePrivate)
d915c61
 {
d915c61
+    d->id = packageId;
d915c61
     d->info = info;
d915c61
     d->summary = summary;
d915c61
 }
d915c61
@@ -42,11 +42,8 @@ Package::Package() :
d915c61
 }
d915c61
 
d915c61
 Package::Package(const Package &other) :
d915c61
-    d(new PackagePrivate)
d915c61
+    d(other.d)
d915c61
 {
d915c61
-    d->info = InfoUnknown;
d915c61
-
d915c61
-    *this = other;
d915c61
 }
d915c61
 
d915c61
 Package::~Package()
d915c61
@@ -55,40 +52,40 @@ Package::~Package()
d915c61
 
d915c61
 bool Package::isValid() const
d915c61
 {
d915c61
-    int sepCount = count(QLatin1Char(';'));
d915c61
+    int sepCount = d->id.count(QLatin1Char(';'));
d915c61
     if (sepCount == 3) {
d915c61
         // A valid pk-id "name;version;arch;data"
d915c61
         return true;
d915c61
     } else if (sepCount == 0) {
d915c61
         // its also valid just "name"
d915c61
-        return !isEmpty();
d915c61
+        return !d->id.isEmpty();
d915c61
     }
d915c61
     return false;
d915c61
 }
d915c61
 
d915c61
 QString Package::id() const
d915c61
 {
d915c61
-    return *this;
d915c61
+    return d->id;
d915c61
 }
d915c61
 
d915c61
 QString Package::name() const
d915c61
 {
d915c61
-    return section(QLatin1Char(';'), 0, 0);
d915c61
+    return d->id.section(QLatin1Char(';'), 0, 0);
d915c61
 }
d915c61
 
d915c61
 QString Package::version() const
d915c61
 {
d915c61
-    return section(QLatin1Char(';'), 1, 1);
d915c61
+    return d->id.section(QLatin1Char(';'), 1, 1);
d915c61
 }
d915c61
 
d915c61
 QString Package::arch() const
d915c61
 {
d915c61
-    return section(QLatin1Char(';'), 2, 2);
d915c61
+    return d->id.section(QLatin1Char(';'), 2, 2);
d915c61
 }
d915c61
 
d915c61
 QString Package::data() const
d915c61
 {
d915c61
-    return section(QLatin1Char(';'), 3, 3);
d915c61
+    return d->id.section(QLatin1Char(';'), 3, 3);
d915c61
 }
d915c61
 
d915c61
 QString Package::summary() const
d915c61
@@ -144,6 +141,6 @@ bool Package::operator==(const Package &package) const
d915c61
 Package& Package::operator=(const Package &package)
d915c61
 {
d915c61
     d = package.d;
d915c61
-    QString::operator=(package);
d915c61
 }
d915c61
 
d915c61
+#include "package.moc"
d915c61
diff --git a/lib/packagekit-qt2/package.h b/lib/packagekit-qt2/package.h
d915c61
index 57fb153..81eca8d 100644
d915c61
--- a/lib/packagekit-qt2/package.h
d915c61
+++ b/lib/packagekit-qt2/package.h
d915c61
@@ -37,6 +37,7 @@ public:
d915c61
         info(other.info),
d915c61
         summary(other.summary) { }
d915c61
     ~PackagePrivate() { }
d915c61
+    QString id;
d915c61
     uint info;
d915c61
     QString summary;
d915c61
 };
d915c61
@@ -51,8 +52,9 @@ public:
d915c61
  *
d915c61
  * \note All Package objects should be deleted by the user.
d915c61
  */
d915c61
-class Package : public QString
d915c61
+class Package
d915c61
 {
d915c61
+    Q_GADGET
d915c61
 public:
d915c61
     /**
d915c61
      * Describes the state of a package
d915c61
diff --git a/lib/packagekit-qt2/packagedetails.cpp b/lib/packagekit-qt2/packagedetails.cpp
d915c61
index 3be7de1..c273e5d 100644
d915c61
--- a/lib/packagekit-qt2/packagedetails.cpp
d915c61
+++ b/lib/packagekit-qt2/packagedetails.cpp
d915c61
@@ -22,12 +22,6 @@
d915c61
 
d915c61
 #include <QtCore/QDebug>
d915c61
 
d915c61
-namespace PackageKit {
d915c61
-
d915c61
-
d915c61
-
d915c61
-}
d915c61
-
d915c61
 using namespace PackageKit;
d915c61
 
d915c61
 PackageDetails::PackageDetails(const QString &package_id, const QString &license, uint group, const QString &detail, const QString &url, qulonglong size) :
d915c61
@@ -82,3 +76,5 @@ qulonglong PackageDetails::size() const
d915c61
 {
d915c61
     return d->size;
d915c61
 }
d915c61
+
d915c61
+#include "packagedetails.moc"
d915c61
diff --git a/lib/packagekit-qt2/packagedetails.h b/lib/packagekit-qt2/packagedetails.h
d915c61
index c4751db..f188e18 100644
d915c61
--- a/lib/packagekit-qt2/packagedetails.h
d915c61
+++ b/lib/packagekit-qt2/packagedetails.h
d915c61
@@ -22,6 +22,7 @@
d915c61
 #define PACKAGEKIT_PACKAGE_DETAILS_H
d915c61
 
d915c61
 #include "package.h"
d915c61
+#include "bitfield.h"
d915c61
 
d915c61
 #include <QtCore/QDateTime>
d915c61
 
d915c61
@@ -57,48 +58,50 @@ namespace PackageKit {
d915c61
  */
d915c61
 class PackageDetails : public Package
d915c61
 {
d915c61
+    Q_GADGET
d915c61
+    Q_ENUMS(Group)
d915c61
 public:
d915c61
     /**
d915c61
      * Describes the different package groups
d915c61
      */
d915c61
-    enum Group {
d915c61
-        GroupUnknown         = 1ULL << 0,
d915c61
-        GroupAccessibility   = 1ULL << 1,
d915c61
-        GroupAccessories     = 1ULL << 2,
d915c61
-        GroupAdminTools      = 1ULL << 3,
d915c61
-        GroupCommunication   = 1ULL << 4,
d915c61
-        GroupDesktopGnome    = 1ULL << 5,
d915c61
-        GroupDesktopKde      = 1ULL << 6,
d915c61
-        GroupDesktopOther    = 1ULL << 7,
d915c61
-        GroupDesktopXfce     = 1ULL << 8,
d915c61
-        GroupEducation       = 1ULL << 9,
d915c61
-        GroupFonts           = 1ULL << 10,
d915c61
-        GroupGames           = 1ULL << 11,
d915c61
-        GroupGraphics        = 1ULL << 12,
d915c61
-        GroupInternet        = 1ULL << 13,
d915c61
-        GroupLegacy          = 1ULL << 14,
d915c61
-        GroupLocalization    = 1ULL << 15,
d915c61
-        GroupMaps            = 1ULL << 16,
d915c61
-        GroupMultimedia      = 1ULL << 17,
d915c61
-        GroupNetwork         = 1ULL << 18,
d915c61
-        GroupOffice          = 1ULL << 19,
d915c61
-        GroupOther           = 1ULL << 20,
d915c61
-        GroupPowerManagement = 1ULL << 21,
d915c61
-        GroupProgramming     = 1ULL << 22,
d915c61
-        GroupPublishing      = 1ULL << 23,
d915c61
-        GroupRepos           = 1ULL << 24,
d915c61
-        GroupSecurity        = 1ULL << 25,
d915c61
-        GroupServers         = 1ULL << 26,
d915c61
-        GroupSystem          = 1ULL << 27,
d915c61
-        GroupVirtualization  = 1ULL << 28,
d915c61
-        GroupScience         = 1ULL << 29,
d915c61
-        GroupDocumentation   = 1ULL << 30,
d915c61
-        GroupElectronics     = 1ULL << 31,
d915c61
-        GroupCollections     = 1ULL << 32,
d915c61
-        GroupVendor          = 1ULL << 33,
d915c61
-        GroupNewest          = 1ULL << 34
d915c61
-    };
d915c61
-    typedef qulonglong Groups;
d915c61
+    typedef enum {
d915c61
+        GroupUnknown,
d915c61
+        GroupAccessibility,
d915c61
+        GroupAccessories,
d915c61
+        GroupAdminTools,
d915c61
+        GroupCommunication,
d915c61
+        GroupDesktopGnome,
d915c61
+        GroupDesktopKde,
d915c61
+        GroupDesktopOther,
d915c61
+        GroupDesktopXfce,
d915c61
+        GroupEducation,
d915c61
+        GroupFonts,
d915c61
+        GroupGames,
d915c61
+        GroupGraphics,
d915c61
+        GroupInternet,
d915c61
+        GroupLegacy,
d915c61
+        GroupLocalization,
d915c61
+        GroupMaps,
d915c61
+        GroupMultimedia,
d915c61
+        GroupNetwork,
d915c61
+        GroupOffice,
d915c61
+        GroupOther,
d915c61
+        GroupPowerManagement,
d915c61
+        GroupProgramming,
d915c61
+        GroupPublishing,
d915c61
+        GroupRepos,
d915c61
+        GroupSecurity,
d915c61
+        GroupServers,
d915c61
+        GroupSystem,
d915c61
+        GroupVirtualization,
d915c61
+        GroupScience,
d915c61
+        GroupDocumentation,
d915c61
+        GroupElectronics,
d915c61
+        GroupCollections,
d915c61
+        GroupVendor,
d915c61
+        GroupNewest
d915c61
+    } Group;
d915c61
+    typedef Bitfield Groups;
d915c61
 
d915c61
     /**
d915c61
      * Constructs package
d915c61
diff --git a/lib/packagekit-qt2/transaction.cpp b/lib/packagekit-qt2/transaction.cpp
d915c61
index f605b1b..ee7c59b 100644
d915c61
--- a/lib/packagekit-qt2/transaction.cpp
d915c61
+++ b/lib/packagekit-qt2/transaction.cpp
d915c61
@@ -59,7 +59,6 @@ void Transaction::init(const QDBusObjectPath &tid)
d915c61
 {
d915c61
     Q_D(Transaction);
d915c61
 
d915c61
-    d->tid = tid;
d915c61
     d->oldtrans = false;
d915c61
     d->p = 0;
d915c61
 
d915c61
@@ -67,7 +66,8 @@ void Transaction::init(const QDBusObjectPath &tid)
d915c61
     // he want us to get it
d915c61
     if (tid.path().isNull()) {
d915c61
         d->tid = Daemon::global()->getTid();
d915c61
-        qDebug() << "packagekit-qt:" << d->tid.path();
d915c61
+    } else {
d915c61
+        d->tid = tid;
d915c61
     }
d915c61
 
d915c61
     int retry = 0;
d915c61
@@ -78,7 +78,7 @@ void Transaction::init(const QDBusObjectPath &tid)
d915c61
                                     QDBusConnection::systemBus(),
d915c61
                                     this);
d915c61
         if (!d->p->isValid()) {
d915c61
-            qDebug() << "Error, cannot create transaction proxy" << d->p->lastError();
d915c61
+            qWarning() << "Error, cannot create transaction proxy" << d->p->lastError();
d915c61
             QDBusMessage message;
d915c61
             message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.DBus"),
d915c61
                                                      QLatin1String("/"),
d915c61
@@ -278,16 +278,14 @@ Transaction::Role Transaction::role() const
d915c61
 {
d915c61
     Q_D(const Transaction);
d915c61
     if(d->oldtrans) {
d915c61
-        uint role = 1 << d->role;
d915c61
-        return static_cast<Transaction::Role>(role);
d915c61
+        return d->role;
d915c61
     }
d915c61
 
d915c61
     if (d->destroyed) {
d915c61
         return Transaction::RoleUnknown;
d915c61
     }
d915c61
 
d915c61
-    uint role = 1 << d->p->role();
d915c61
-    return static_cast<Transaction::Role>(role);
d915c61
+    return static_cast<Transaction::Role>(d->p->role());
d915c61
 }
d915c61
 
d915c61
 void Transaction::setHints(const QStringList &hints)
d915c61
@@ -543,6 +541,12 @@ void Transaction::searchGroup(const QString &group, Transaction::Filters filters
d915c61
     searchGroups(QStringList() << group, filters);
d915c61
 }
d915c61
 
d915c61
+void Transaction::searchGroup(PackageDetails::Group group, Filters filters)
d915c61
+{
d915c61
+    QString groupString = Daemon::enumToString<PackageDetails>(group, "Group");
d915c61
+    searchGroup(groupString, filters);
d915c61
+}
d915c61
+
d915c61
 void Transaction::searchGroups(PackageDetails::Groups groups, Transaction::Filters filters)
d915c61
 {
d915c61
     searchGroups(groups, filters);
d915c61
diff --git a/lib/packagekit-qt2/transaction.h b/lib/packagekit-qt2/transaction.h
d915c61
index 9e3416d..c599957 100644
d915c61
--- a/lib/packagekit-qt2/transaction.h
d915c61
+++ b/lib/packagekit-qt2/transaction.h
d915c61
@@ -88,40 +88,40 @@ public:
d915c61
     /**
d915c61
      * Describes the role of the transaction
d915c61
      */
d915c61
-    enum Role {
d915c61
-        RoleUnknown            = 1 << 0,
d915c61
-        RoleCancel             = 1 << 1,
d915c61
-        RoleGetDepends         = 1 << 2,
d915c61
-        RoleGetDetails         = 1 << 3,
d915c61
-        RoleGetFiles           = 1 << 4,
d915c61
-        RoleGetPackages        = 1 << 5,
d915c61
-        RoleGetRepoList        = 1 << 6,
d915c61
-        RoleGetRequires        = 1 << 7,
d915c61
-        RoleGetUpdateDetail    = 1 << 8,
d915c61
-        RoleGetUpdates         = 1 << 9,
d915c61
-        RoleInstallFiles       = 1 << 10,
d915c61
-        RoleInstallPackages    = 1 << 11,
d915c61
-        RoleInstallSignature   = 1 << 12,
d915c61
-        RoleRefreshCache       = 1 << 13,
d915c61
-        RoleRemovePackages     = 1 << 14,
d915c61
-        RoleRepoEnable         = 1 << 15,
d915c61
-        RoleRepoSetData        = 1 << 16,
d915c61
-        RoleResolve            = 1 << 17,
d915c61
-        RoleSearchDetails      = 1 << 18,
d915c61
-        RoleSearchFile         = 1 << 19,
d915c61
-        RoleSearchGroup        = 1 << 20,
d915c61
-        RoleSearchName         = 1 << 21,
d915c61
-        RoleUpdatePackages     = 1 << 22,
d915c61
-        RoleWhatProvides       = 1 << 23,
d915c61
-        RoleAcceptEula         = 1 << 24,
d915c61
-        RoleDownloadPackages   = 1 << 25,
d915c61
-        RoleGetDistroUpgrades  = 1 << 26,
d915c61
-        RoleGetCategories      = 1 << 27,
d915c61
-        RoleGetOldTransactions = 1 << 28,
d915c61
-        RoleUpgradeSystem      = 1 << 29, // Since 0.6.11
d915c61
-        RoleRepairSystem       = 1 << 30 // Since 0.7.2
d915c61
-    };
d915c61
-    Q_DECLARE_FLAGS(Roles, Role)
d915c61
+    typedef enum {
d915c61
+        RoleUnknown,
d915c61
+        RoleCancel,
d915c61
+        RoleGetDepends,
d915c61
+        RoleGetDetails,
d915c61
+        RoleGetFiles,
d915c61
+        RoleGetPackages,
d915c61
+        RoleGetRepoList,
d915c61
+        RoleGetRequires,
d915c61
+        RoleGetUpdateDetail,
d915c61
+        RoleGetUpdates,
d915c61
+        RoleInstallFiles,
d915c61
+        RoleInstallPackages,
d915c61
+        RoleInstallSignature,
d915c61
+        RoleRefreshCache,
d915c61
+        RoleRemovePackages,
d915c61
+        RoleRepoEnable,
d915c61
+        RoleRepoSetData,
d915c61
+        RoleResolve,
d915c61
+        RoleSearchDetails,
d915c61
+        RoleSearchFile,
d915c61
+        RoleSearchGroup,
d915c61
+        RoleSearchName,
d915c61
+        RoleUpdatePackages,
d915c61
+        RoleWhatProvides,
d915c61
+        RoleAcceptEula,
d915c61
+        RoleDownloadPackages,
d915c61
+        RoleGetDistroUpgrades,
d915c61
+        RoleGetCategories,
d915c61
+        RoleGetOldTransactions,
d915c61
+        RoleUpgradeSystem, // Since 0.6.11
d915c61
+        RoleRepairSystem   // Since 0.7.2
d915c61
+    } Role;
d915c61
+    typedef Bitfield Roles;
d915c61
 
d915c61
     /**
d915c61
      * Describes the different types of error
d915c61
@@ -844,6 +844,12 @@ public:
d915c61
      * \sa searchGroups(const QStringList &groups, Filters filters = FilterNone)
d915c61
      */
d915c61
     void searchGroup(const QString &group, Filters filters = FilterNone);
d915c61
+    
d915c61
+    /**
d915c61
+     * Convenience function to search by group enum
d915c61
+     * \sa searchGroups(const QStringList &groups, Filters filters = FilterNone)
d915c61
+     */
d915c61
+    void searchGroup(PackageDetails::Group group, Filters filters = FilterNone);
d915c61
 
d915c61
     /**
d915c61
      * \brief Lists all the packages in the given \p group
d915c61
diff --git a/lib/packagekit-qt2/transactionprivate.cpp b/lib/packagekit-qt2/transactionprivate.cpp
d915c61
index 94b2832..564bd58 100644
d915c61
--- a/lib/packagekit-qt2/transactionprivate.cpp
d915c61
+++ b/lib/packagekit-qt2/transactionprivate.cpp
d915c61
@@ -202,7 +202,7 @@ QStringList TransactionPrivate::packageListToPids(const PackageList &packages) c
d915c61
 {
d915c61
     QStringList pids;
d915c61
     foreach (const Package &package, packages) {
d915c61
-        pids << package;
d915c61
+        pids << package.id();
d915c61
     }
d915c61
     return pids;
d915c61
 }
d915c61
-- 
d915c61
1.7.12.1
d915c61