[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-15 7:11:23
Message-ID: 1216105883.137431.23878.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 832692 by wkai:

GetPackages/RepoList code, it should work, but didn't, anyone please help, QtDBus related

 M  +9 -5      PKPlugin.cpp  
 M  +28 -6     TransactionWorker.cpp  
 M  +1 -0      TransactionWorker.h  


--- trunk/playground/sysadmin/shaman/plugins/packagekit/PKPlugin.cpp #832691:832692
@@ -66,18 +66,22 @@
 
 void PKPlugin::reloadPackages()
 {
- //  Oops, can't connect qt-dbus signals across threads, this doesn't work!!!
-/*
     TransactionWorker worker(m_pk, TransactionWorker::GetPkgList, this);
     worker.start();
+    kDebug() << "Start transaction GetPkgList";
+    worker.wait();
+    kDebug() << "Thread exited.";
     setPackages(worker.pkgList);
-*/
 }
 
 void PKPlugin::reloadRepositories()
 {
-  
-    
+    TransactionWorker worker(m_pk, TransactionWorker::GetPkgRepos, this);
+    worker.start();
+    kDebug() << "Start transaction GetRepoList";
+    worker.wait();
+    kDebug() << "Thread exited.";
+    setRepositories(worker.repoList);
 }
 
 void PKPlugin::reloadPackageGroups()
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.cpp #832691:832692
@@ -1,11 +1,11 @@
 #include "TransactionWorker.h"
 #include <KDebug>
 #include <Qt>
+#include <KUrl>
 
 TransactionWorker::TransactionWorker(PK *m_pk, TransactionType t, 
     Shaman::BackendPlugin *parent)
-    : QThread(),
-      type(t),
+    : type(t),
       pkinterface(m_pk),
       m_parent(parent)
 {
@@ -32,6 +32,7 @@
         isSuccessful = false;
     }
     working = false;
+    this->exit(0);
 }
 
 void TransactionWorker::dbusPackage(const QString &info,
@@ -49,14 +50,26 @@
     pkgList.append(new Shaman::Package(fields[0], summary, fields[1], state, m_parent));
 }
 
+void TransactionWorker::dbusRepoDetail(const QString &repo_id, 
+    const QString &description, bool enabled)
+{
+    if (enabled)
+        repoList.append(new Shaman::Repository(repo_id, KUrl(), m_parent));
+}
+
 void TransactionWorker::connectSignals(PKTrans *pk_trans)
 {
+/*
     connect(pk_trans,
         SIGNAL(Details(const QString&, const QString&, const QString&,
                        const QString&, const QString&, qulonglong)),
                SLOT(dbusDetails(const QString&, const QString&, const QString&,
                     const QString&, const QString&, qulonglong)));
+*/
     connect(pk_trans,
+            SIGNAL(RepoDetail(const QString &, const QString &, bool)),
+            SLOT(dbusRepoDetail(const QString &, const QString &, bool)));
+    connect(pk_trans,
             SIGNAL(Package(const QString&, const QString&, const QString&)),
             SLOT(dbusPackage(const QString&, const QString&, const QString&)));
     connect(pk_trans,
@@ -66,13 +79,14 @@
 
 void TransactionWorker::run()
 {
+    kDebug() << "i'm running";
     PKTrans *m_pktrans;
     QDBusReply<QString> path = pkinterface->GetTid();
     if (path.isValid()) {
         m_pktrans = new PKTrans("org.freedesktop.PackageKit",
                                 path.value(),
                                 QDBusConnection::systemBus(),
-                                this);
+                                NULL);
         if (m_pktrans->isValid()) {
             connectSignals(m_pktrans);
             switch (type) {
@@ -80,23 +94,31 @@
                 status = Shaman::BackendPlugin::Downloading;
                 working = true;
                 if (m_pktrans->GetPackages("none").isValid()) {
-                    QDBusReply<QStringList> tlist = pkinterface->GetTransactionList();
-                    while ( tlist.isValid() && ! tlist.value().empty() )
-                        tlist = pkinterface->GetTransactionList();
+                    kDebug() << "beginning exec().";
+                    exec();
                 } else {
                     error = Shaman::BackendPlugin::DownloadFailed;                
                     working = false;
                 }
                 break;
             case GetPkgRepos:
+                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;
+    
 }
 #include "TransactionWorker.moc"
--- trunk/playground/sysadmin/shaman/plugins/packagekit/TransactionWorker.h #832691:832692
@@ -41,6 +41,7 @@
     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 *);
     private:
[prev in list] [next in list] [prev in thread] [next in thread] 

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