[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