[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