[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 0:41:19
Message-ID: 1216168879.605090.11498.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 833019 by wkai:

reloadRepositories() works now

 M  +5 -4      PKPlugin.cpp  
 M  +46 -42    TransactionWorker.cpp  
 M  +29 -20    TransactionWorker.h  


--- trunk/playground/sysadmin/shaman/plugins/packagekit/PKPlugin.cpp #833018:833019
@@ -37,9 +37,9 @@
         this);
     if (m_pk->isValid()) {
         setStatus(Shaman::BackendPlugin::Processing);
-        //reloadRepositories();
+        reloadRepositories();
         reloadPackageGroups();
-        //reloadPackages();
+        reloadPackages();
         setStatus(Shaman::BackendPlugin::Idling);
     } else {
         kDebug() << m_pk->lastError().name();
@@ -66,7 +66,7 @@
 
 void PKPlugin::reloadPackages()
 {
-    TransactionWorker worker(m_pk, TransactionWorker::GetPkgList, this);
+    TransactionWorker worker(m_pk, GetPkgList, this);
     worker.start();
     kDebug() << "Start transaction GetPkgList";
     worker.wait();
@@ -76,7 +76,8 @@
 
 void PKPlugin::reloadRepositories()
 {
-    TransactionWorker worker(m_pk, TransactionWorker::GetPkgRepos, this);
+    kDebug() << "i'm in " << thread();
+    TransactionWorker worker(m_pk, GetPkgRepos, this);
     worker.start();
     kDebug() << "Start transaction GetRepoList";
     worker.wait();
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.cpp #833018:833019
@@ -3,62 +3,69 @@
 #include <Qt>
 #include <KUrl>
 
-TransactionWorker::TransactionWorker(PK *m_pk, TransactionType t, 
-    Shaman::BackendPlugin *parent)
-    : type(t),
-      pkinterface(m_pk),
-      m_parent(parent)
+TransactionCallback::TransactionCallback(TransactionWorker *worker, QObject * parent)
+    :QObject(parent),
+     m_worker(worker)
 {
 }
 
-void TransactionWorker::dbusFinished(const QString &exit, uint runtime)
+void TransactionCallback::dbusFinished(const QString &exit, uint runtime)
 {
     kDebug() << "finished";
-    transactionTime = runtime;
+    m_worker->transactionTime = runtime;
     if (exit == "success"){
-        switch (type) {
+        switch (m_worker->type) {
         case GetPkgList:
             break;
         case GetPkgRepos:
             break;
         default:
-
             break;
         }
-        error = Shaman::BackendPlugin::NoTransactionError;
-        isSuccessful = true;
+        m_worker->error = Shaman::BackendPlugin::NoTransactionError;
+        m_worker->isSuccessful = true;
     } else {
-        status = Shaman::BackendPlugin::NoTransaction;
-        isSuccessful = false;
+        m_worker->status = Shaman::BackendPlugin::NoTransaction;
+        m_worker->isSuccessful = false;
     }
-    working = false;
-    this->exit(0);
+    m_worker->quit();
 }
 
-void TransactionWorker::dbusPackage(const QString &info,
+void TransactionCallback::dbusPackage(const QString &info,
                                               const QString &package_id,
                                               const QString &summary)
 {
-    kDebug() << "getting package";
     Shaman::Package::State state;
     QStringList fields = package_id.split(';'); // name, version, arch, data
     
-    if (info == "installed")
+    if (info == "installed") {
         state = Shaman::Package::Installed;
-    else if (info == "available")
+    } else if (info == "available") {
         state = Shaman::Package::NotInstalled;
-    pkgList.append(new Shaman::Package(fields[0], summary, fields[1], state, m_parent));
+
+    }
+    m_worker->pkgList.append(new Shaman::Package(fields[0], summary, fields[1], state, NULL));
 }
 
-void TransactionWorker::dbusRepoDetail(const QString &repo_id, 
+void TransactionCallback::dbusRepoDetail(const QString &repo_id,
     const QString &description, bool enabled)
 {
+    kDebug() << "getting repo detal";
     if (enabled)
-        repoList.append(new Shaman::Repository(repo_id, KUrl(), m_parent));
+        m_worker->repoList.append(new Shaman::Repository(repo_id, KUrl(), NULL));
 }
 
-void TransactionWorker::connectSignals(PKTrans *pk_trans)
+
+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&,
@@ -66,59 +73,56 @@
                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,
             SLOT(dbusRepoDetail(const QString &, const QString &, bool)));
     connect(pk_trans,
             SIGNAL(Package(const QString&, const QString&, const QString&)),
+            callback,
             SLOT(dbusPackage(const QString&, const QString&, const QString&)));
     connect(pk_trans,
             SIGNAL(Finished(const QString&, uint)),
+            callback,
             SLOT(dbusFinished(const QString&, uint)));
 }
 
 void TransactionWorker::run()
 {
-    kDebug() << "i'm running";
-    PKTrans *m_pktrans;
+    kDebug() << "i'm running in " << thread();
     QDBusReply<QString> path = pkinterface->GetTid();
     if (path.isValid()) {
-        m_pktrans = new PKTrans("org.freedesktop.PackageKit",
-                                path.value(),
-                                QDBusConnection::systemBus(),
-                                NULL);
-        if (m_pktrans->isValid()) {
-            connectSignals(m_pktrans);
+        PKTrans m_pktrans("org.freedesktop.PackageKit",
+                          path.value(),
+    QDBusConnection::connectToBus(QDBusConnection::SystemBus,"mybus"),
+                          NULL);
+        TransactionCallback callback(this);
+        if (m_pktrans.isValid()) {
+            connectSignals(&m_pktrans, &callback);
             switch (type) {
             case GetPkgList:
-                status = Shaman::BackendPlugin::Downloading;
-                working = true;
-                if (m_pktrans->GetPackages("none").isValid()) {
+                if (m_pktrans.GetPackages("none").isValid()) {
                     kDebug() << "beginning exec().";
                     exec();
                 } else {
-                    error = Shaman::BackendPlugin::DownloadFailed;                
-                    working = false;
                 }
                 break;
             case GetPkgRepos:
-                if (m_pktrans->GetRepoList("none").isValid()) {
+                if (m_pktrans.GetRepoList("none").isValid()) {
                     kDebug() << "beginning exec().";
                     exec();
                 } else {
-                    error = Shaman::BackendPlugin::DownloadFailed;                
-                    working = false;
                 }
                 break;
             default:
                 break;
             } 
         }
-        delete m_pktrans;
     } else {
         
     }
-    status = Shaman::BackendPlugin::NoTransaction;
-    
+    QDBusConnection::disconnectFromBus("mybus");
 }
 #include "TransactionWorker.moc"
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.h #833018:833019
@@ -16,42 +16,51 @@
 #include "PKPlugin.h"
 #include <Qt>
 
+enum TransactionType {
+    GetPkgList,
+    GetPkgGrps,
+    GetPkgRepos,
+    InstallPkgs,
+    RemovePkgs
+};
 
+class TransactionWorker;
 
+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;
     public:
-        enum TransactionType {
-            GetPkgList,
-            GetPkgGrps,
-            GetPkgRepos,
-            InstallPkgs,
-            RemovePkgs
-        };
         TransactionWorker(PK *, TransactionType, Shaman::BackendPlugin * = 0);
         void run();
+    public:
         PKPlugin::TransactionStatus status;
         PKPlugin::TransactionError error;
-        TransactionType type;
-        bool isSuccessful;
-        uint transactionTime;
         Shaman::Package::List pkgList;
         Shaman::Repository::List repoList;
-    private slots:
-        void dbusPackage(const QString &, const QString &, const QString &);
-        void dbusFinished(const QString &, uint);
-        void dbusRepoDetail(const QString &, const QString &, bool);
     private:
-        void connectSignals(PKTrans *);
+        void connectSignals(PKTrans *, TransactionCallback *);
     private:
         PK *pkinterface;
-        Shaman::BackendPlugin *m_parent;
-        bool working;
+        TransactionType type;
+        bool isSuccessful;
+        uint transactionTime;
+        QMutex mutex;
 };
-class A
-{
-};
 
 #endif // TRANSACTIONWORKER_H
  
[prev in list] [next in list] [prev in thread] [next in thread] 

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