[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/sysadmin/shaman/plugins/packagekit
From:       Wang Kai <fearee () gmail ! com>
Date:       2008-07-16 7:21:56
Message-ID: 1216192916.589450.20502.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 833053 by wkai:

package brcd /home/ora/work/shaman/libshaman

 M  +1 -0      CMakeLists.txt  
 M  +63 -23    PKPlugin.cpp  
 M  +2 -0      PKPlugin.h  
 M  +20 -69    TransactionWorker.cpp  
 M  +10 -25    TransactionWorker.h  


--- trunk/playground/sysadmin/shaman/plugins/packagekit/CMakeLists.txt #833052:833053
@@ -5,6 +5,7 @@
 set(packagekitplugin_SRCS
     PKPlugin.cpp
     TransactionWorker.cpp
+    Callback.cpp
 )
 set(packagekitplugin_XMLS
   org.freedesktop.PackageKit.xml
--- trunk/playground/sysadmin/shaman/plugins/packagekit/PKPlugin.cpp #833052:833053
@@ -10,6 +10,7 @@
 
 #include "PKPlugin.h"
 #include "TransactionWorker.h"
+#include "Callback.h"
 #include <shaman_macros.h>
 
 #include <KDebug>
@@ -31,15 +32,51 @@
 
 void PKPlugin::init()
 {
+    Shaman::Package::List pkgList;
+    Shaman::Repository::List repoList;
+    Shaman::PackageGroup::List grpList;
+    Shaman::Package *spkg = NULL;
+    Shaman::Package::State state;
+    Shaman::Repository *srepo = NULL;
+    Shaman::PackageGroup *sgrp = NULL;
     m_pk = new PK("org.freedesktop.PackageKit",
         "/org/freedesktop/PackageKit",
         QDBusConnection::systemBus(),
         this);
     if (m_pk->isValid()) {
         setStatus(Shaman::BackendPlugin::Processing);
-        reloadRepositories();
-        reloadPackageGroups();
-        reloadPackages();
+        QStringList grpNames = getGroupNames();
+        foreach (QString grpName, grpNames) {
+            kDebug() << "Loading group:" << grpName;
+            TransactionWorker worker(m_pk, GetGrpPkgs, grpName);
+            worker.start();
+            worker.wait();
+            sgrp = new Shaman::PackageGroup(grpName, this);
+            foreach (Callback::PKPackage *pkg, worker.callback->pkPkgs) {
+                if (pkg->info == "installed")
+                    state = Shaman::Package::Installed;
+                else
+                    state = Shaman::Package::NotInstalled;
+                //fix empty repos
+                if (pkg->repo == "installed")
+                    pkg->repo = "Local";
+                spkg = new Shaman::Package(pkg->name, pkg->descr, pkg->version, \
state, this); +                pkgList.append(spkg);
+                sgrp->append(spkg);
+                srepo = findRepoByName(repoList, pkg->repo);
+                if (srepo)
+                    srepo->append(spkg);
+                else {
+                    srepo = new Shaman::Repository(pkg->repo, KUrl(), this);
+                    srepo->append(spkg);
+                    repoList.append(srepo);
+                }
+            }
+            grpList.append(sgrp);
+        }
+        setPackages(pkgList);
+        setRepositories(repoList);
+        setPackageGroups(grpList);
         setStatus(Shaman::BackendPlugin::Idling);
     } else {
         kDebug() << m_pk->lastError().name();
@@ -66,39 +103,23 @@
 
 void PKPlugin::reloadPackages()
 {
-    TransactionWorker worker(m_pk, GetPkgList, this);
+    TransactionWorker worker(m_pk, GetPkgs, QVariant());
     worker.start();
-    kDebug() << "Start transaction GetPkgList";
     worker.wait();
-    kDebug() << "Thread exited.";
-    setPackages(worker.pkgList);
+    //setPackages(worker.pkgList);
 }
 
 void PKPlugin::reloadRepositories()
 {
-    kDebug() << "i'm in " << thread();
-    TransactionWorker worker(m_pk, GetPkgRepos, this);
+    TransactionWorker worker(m_pk, GetRepos, QVariant());
     worker.start();
-    kDebug() << "Start transaction GetRepoList";
     worker.wait();
-    kDebug() << "Thread exited.";
-    setRepositories(worker.repoList);
+//    setRepositories(worker.repoList);
 }
 
 void PKPlugin::reloadPackageGroups()
 {
     kDebug() << "reloadPackageGroups()";
-    QDBusReply<QString> rep = m_pk->GetGroups();
-    if (rep.isValid()) {
-        Shaman::PackageGroup::List grpList;
-        foreach (QString s, rep.value().split(";")) {
-            grpList.append(new Shaman::PackageGroup(s, this));
-        }
-        setPackageGroups(grpList);
-    } else {
-        kDebug() << "error!!";
-        //setError(BackendPlugin::DownloadFailed);
-    }
 }
 
 void PKPlugin::updateDatabase()
@@ -127,5 +148,24 @@
     return;
 }
 
+QStringList PKPlugin::getGroupNames()
+{
+    QDBusReply<QString> rep = m_pk->GetGroups();
+    if (rep.isValid()) {
+        return rep.value().split(';');
+    } else {
+        kDebug() << "error!!";
+        return QStringList();
+    }
 
+}
+
+Shaman::Repository * PKPlugin::findRepoByName(const Shaman::Repository::List &repos, \
const QString& aname) +{
+    foreach (Shaman::Repository *repo, repos) {
+        if (repo->name() == aname)
+            return repo;
+    }
+    return NULL;
+}
 #include "PKPlugin.moc"
--- trunk/playground/sysadmin/shaman/plugins/packagekit/PKPlugin.h #833052:833053
@@ -40,6 +40,8 @@
         virtual bool cancelProcessing();
         void reloadUpgradeablePackages();
     private:
+        QStringList getGroupNames();
+        Shaman::Repository * findRepoByName(const Shaman::Repository::List&, const \
QString&);  Shaman::Package::List  m_pkgList;
         PK *m_pk;
 };
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.cpp \
#833052:833053 @@ -1,71 +1,21 @@
 #include "TransactionWorker.h"
+#include "Callback.h"
 #include <KDebug>
 #include <Qt>
 #include <KUrl>
 
-TransactionCallback::TransactionCallback(TransactionWorker *worker, QObject * \
                parent)
-    :QObject(parent),
-     m_worker(worker)
+TransactionWorker::TransactionWorker(PK *m_pk, TransactionType t,
+    const QVariant &var)
+    : pkinterface(m_pk),
+      type(t),
+      args(var),
+      callback(NULL)
 {
 }
 
-void TransactionCallback::dbusFinished(const QString &exit, uint runtime)
-{
-    kDebug() << "finished";
-    m_worker->transactionTime = runtime;
-    if (exit == "success"){
-        switch (m_worker->type) {
-        case GetPkgList:
-            break;
-        case GetPkgRepos:
-            break;
-        default:
-            break;
-        }
-        m_worker->error = Shaman::BackendPlugin::NoTransactionError;
-        m_worker->isSuccessful = true;
-    } else {
-        m_worker->status = Shaman::BackendPlugin::NoTransaction;
-        m_worker->isSuccessful = false;
-    }
-    m_worker->quit();
-}
 
-void TransactionCallback::dbusPackage(const QString &info,
-                                              const QString &package_id,
-                                              const QString &summary)
+void TransactionWorker::connectSignals(PKTrans *pk_trans, Callback * callback)
 {
-    Shaman::Package::State state;
-    QStringList fields = package_id.split(';'); // name, version, arch, data
-    
-    if (info == "installed") {
-        state = Shaman::Package::Installed;
-    } else if (info == "available") {
-        state = Shaman::Package::NotInstalled;
-
-    }
-    m_worker->pkgList.append(new Shaman::Package(fields[0], summary, fields[1], \
                state, NULL));
-}
-
-void TransactionCallback::dbusRepoDetail(const QString &repo_id,
-    const QString &description, bool enabled)
-{
-    kDebug() << "getting repo detal";
-    if (enabled)
-        m_worker->repoList.append(new Shaman::Repository(repo_id, KUrl(), NULL));
-}
-
-
-TransactionWorker::TransactionWorker(PK *m_pk, TransactionType t, 
-    Shaman::BackendPlugin *parent)
-    : type(t),
-      pkinterface(m_pk)
-{
-}
-
-
-void TransactionWorker::connectSignals(PKTrans *pk_trans, TransactionCallback * \
                callback)
-{
 /*
     connect(pk_trans,
         SIGNAL(Details(const QString&, const QString&, const QString&,
@@ -73,8 +23,6 @@
                SLOT(dbusDetails(const QString&, const QString&, const QString&,
                     const QString&, const QString&, qulonglong)));
 */
-    kDebug() << "pk_trans lives in " << pk_trans->thread();
-    kDebug() << "callback lives in " << callback->thread();
     connect(pk_trans,
             SIGNAL(RepoDetail(const QString &, const QString &, bool)),
             callback,
@@ -91,27 +39,29 @@
 
 void TransactionWorker::run()
 {
-    kDebug() << "i'm running in " << thread();
     QDBusReply<QString> path = pkinterface->GetTid();
     if (path.isValid()) {
         PKTrans m_pktrans("org.freedesktop.PackageKit",
                           path.value(),
-    QDBusConnection::connectToBus(QDBusConnection::SystemBus,"mybus"),
+                          QDBusConnection::connectToBus(QDBusConnection::SystemBus, \
path.value()),  NULL);
-        TransactionCallback callback(this);
         if (m_pktrans.isValid()) {
-            connectSignals(&m_pktrans, &callback);
+            callback = new Callback(this);
+            connectSignals(&m_pktrans, callback);
             switch (type) {
-            case GetPkgList:
+            case GetPkgs:
                 if (m_pktrans.GetPackages("none").isValid()) {
-                    kDebug() << "beginning exec().";
                     exec();
                 } else {
                 }
                 break;
-            case GetPkgRepos:
+            case GetGrpPkgs:
+                if (m_pktrans.SearchGroup("none", args.toString()).isValid()) {
+                    exec();
+                }
+                break;
+            case GetRepos:
                 if (m_pktrans.GetRepoList("none").isValid()) {
-                    kDebug() << "beginning exec().";
                     exec();
                 } else {
                 }
@@ -120,9 +70,10 @@
                 break;
             } 
         }
+        QDBusConnection::disconnectFromBus(path.value());
+
     } else {
         
     }
-    QDBusConnection::disconnectFromBus("mybus");
 }
 #include "TransactionWorker.moc"
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.h \
#833052:833053 @@ -17,35 +17,20 @@
 #include <Qt>
 
 enum TransactionType {
-    GetPkgList,
-    GetPkgGrps,
-    GetPkgRepos,
-    InstallPkgs,
-    RemovePkgs
+    GetPkgs,
+    GetGrpPkgs,
+    GetRepos
 };
 
-class TransactionWorker;
+class Callback;
 
-class TransactionCallback: public QObject
-{
-Q_OBJECT
-    friend class TransactionWorker;
-    public:
-        TransactionCallback(TransactionWorker *, QObject * = 0);
-    private slots:
-        void dbusPackage(const QString &, const QString &, const QString &);
-        void dbusFinished(const QString &, uint);
-        void dbusRepoDetail(const QString &, const QString &, bool);
-    private:
-        TransactionWorker *m_worker;
-};
-
 class TransactionWorker: public QThread
 {
 Q_OBJECT
-    friend class TransactionCallback;
+    friend class Callback;
+    friend class PKPlugin;
     public:
-        TransactionWorker(PK *, TransactionType, Shaman::BackendPlugin * = 0);
+        TransactionWorker(PK *, TransactionType, const QVariant&);
         void run();
     public:
         PKPlugin::TransactionStatus status;
@@ -53,12 +38,12 @@
         Shaman::Package::List pkgList;
         Shaman::Repository::List repoList;
     private:
-        void connectSignals(PKTrans *, TransactionCallback *);
+        void connectSignals(PKTrans *, Callback *);
     private:
         PK *pkinterface;
         TransactionType type;
-        bool isSuccessful;
-        uint transactionTime;
+        QVariant args;
+        Callback *callback;
         QMutex mutex;
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic