From kde-commits Tue Feb 17 20:58:38 2009 From: Dariusz Mikulski Date: Tue, 17 Feb 2009 20:58:38 +0000 To: kde-commits Subject: playground/base/plasma/dataengines/presence Message-Id: <1234904318.499629.22932.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=123490435128141 SVN commit 927559 by mikulski: Fix creating data source for account M +83 -67 presence.cpp M +17 -2 presence.h --- trunk/playground/base/plasma/dataengines/presence/presence.cpp #927558:927559 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -29,45 +30,6 @@ #include #include -class PresenceEngine::PresenceEnginePrivate -{ - PresenceEngine *parent; -public: - PresenceEnginePrivate(PresenceEngine *p) : parent(p) {} - - Telepathy::Client::AccountManager * m_accountManager; - - void createAccountDataSource(const QString &path) - { - kDebug() << "createAccountDataSource called"; - kDebug() << path; - QSharedPointer account = accountFromPath(path); - - QString source; - source = account->uniqueIdentifier(); - - Telepathy::SimplePresence sp = account->currentPresence(); - QVariant vsp; - vsp.setValue(sp); - parent->setData(source, "current_presence", vsp); - } - - void removeAccountDataSource(const QString &path) - { - kDebug() << "removeAccountDataSource called"; - kDebug() << path; - - QSharedPointer account = accountFromPath(path); - QString identifier = account->uniqueIdentifier(); - parent->removeSource(identifier); - } - - QSharedPointer accountFromPath(const QString &path) - { - return m_accountManager->accountForPath(path); - } -}; - /** * \class PresenceEngine * \ingroup presence @@ -83,9 +45,9 @@ * \param args QVariantList arguments. */ PresenceEngine::PresenceEngine(QObject * parent, const QVariantList & args) - : Plasma::DataEngine(parent, args), - d(new PresenceEnginePrivate(this)) + : Plasma::DataEngine(parent, args) { + kDebug(); // Register custom types: Telepathy::registerTypes(); setIcon(QString()); @@ -96,9 +58,7 @@ */ PresenceEngine::~PresenceEngine() { - // \todo: FIXME. Why there is a problem? - // delete d->m_accountManager; - delete d; + kDebug(); } /** @@ -106,12 +66,12 @@ */ void PresenceEngine::init() { - kDebug() << "init() started"; + kDebug(); /* * check that we are connected to the session * bus OK. */ - d->m_accountManager = 0; + m_accountManager = 0; if (!QDBusConnection::sessionBus().isConnected()) { @@ -124,14 +84,14 @@ * which will provide all the data to this * data engine. */ - d->m_accountManager = + m_accountManager = new Telepathy::Client::AccountManager(QDBusConnection::sessionBus()); /* * connect signal from the account manager * to waiting when it's ready */ - connect(d->m_accountManager->becomeReady(), + connect(m_accountManager->becomeReady(), SIGNAL(finished(Telepathy::Client::PendingOperation*)), this, SLOT(onAccountReady(Telepathy::Client::PendingOperation*)) @@ -146,11 +106,11 @@ * that if another is created while we are * processing them, we don't miss out on it. */ - connect(d->m_accountManager, SIGNAL(accountCreated(const QString &)), + connect(m_accountManager, SIGNAL(accountCreated(const QString &)), this, SLOT(accountCreated(const QString &))); - connect(d->m_accountManager, SIGNAL(accountValidityChanged(const QString &, bool)), + connect(m_accountManager, SIGNAL(accountValidityChanged(const QString &, bool)), this, SLOT(accountValidityChanged(const QString &, bool))); - connect(d->m_accountManager, SIGNAL(accountRemoved(const QString &)), + connect(m_accountManager, SIGNAL(accountRemoved(const QString &)), this, SLOT(accountRemoved(const QString &))); } @@ -161,7 +121,7 @@ */ bool PresenceEngine::sourceRequestEvent(const QString & name) { - kDebug() << "sourceRequestEvent() called"; + kDebug(); /* * if the visualisation requests a * source that is not already there @@ -174,22 +134,19 @@ void PresenceEngine::onAccountReady(Telepathy::Client::PendingOperation *operation) { - kDebug() << "onAccountReady() called"; - if(operation->isError()) - { - kDebug() << operation->errorName() << ": " << operation->errorMessage(); - return; - } + kDebug(); + if(isOperationError(operation)) + return; - QStringList pathList = d->m_accountManager->allAccountPaths(); + QStringList pathList = m_accountManager->allAccountPaths(); kDebug() << "All Account Paths: " << pathList.size(); /* * get a list of all the accounts that * are all ready there */ - foreach (const QString &path, d->m_accountManager->allAccountPaths()) { - d->createAccountDataSource(path); + foreach (const QString &path, m_accountManager->allAccountPaths()) { + createAccountDataSource(path); } } @@ -200,11 +157,11 @@ */ void PresenceEngine::accountCreated(const QString &path) { - kDebug() << "accountCreated() called"; + kDebug(); // Load the data for the new account. To avoid duplicating code, we treat // this just as if an account was updated, and call the method to handle // that. - d->createAccountDataSource(path); + createAccountDataSource(path); } /** @@ -216,12 +173,12 @@ void PresenceEngine::accountValidityChanged(const QString &path, bool valid) { Q_UNUSED(valid); - kDebug() << "accountValidityChanged() called"; + kDebug(); /* * slot called when an account has * been updated. */ - d->createAccountDataSource(path); + createAccountDataSource(path); } /** @@ -231,14 +188,73 @@ */ void PresenceEngine::accountRemoved(const QString &path) { - kDebug() << "accountRemoved() called"; + kDebug(); /* * slot called when an account has been deleted * * remove that source. */ - d->removeAccountDataSource(path); + removeAccountDataSource(path); } +void PresenceEngine::createAccountDataSource(const QString &path) +{ + kDebug(); + kDebug() << path; + QSharedPointer account = accountFromPath(path); + + QObject::connect(account->becomeReady(), SIGNAL(finished(Telepathy::Client::PendingOperation *)), + this, SLOT(onExistingAccountReady(Telepathy::Client::PendingOperation *))); +} + +void PresenceEngine::onExistingAccountReady(Telepathy::Client::PendingOperation *operation) +{ + kDebug(); + + if(isOperationError(operation)) + return; + + Telepathy::Client::PendingReadyAccount *pa = dynamic_cast(operation); + if(!pa) + return; + + Telepathy::Client::Account *account = pa->account(); + + QString source; + source = account->uniqueIdentifier(); + + Telepathy::SimplePresence sp = account->currentPresence(); + QVariant vsp; + vsp.setValue(sp); + setData(source, "current_presence", vsp); +} + +void PresenceEngine::removeAccountDataSource(const QString &path) +{ + kDebug(); + kDebug() << path; + + QSharedPointer account = accountFromPath(path); + QString identifier = account->uniqueIdentifier(); + removeSource(identifier); +} + +QSharedPointer PresenceEngine::accountFromPath(const QString &path) +{ + kDebug(); + return m_accountManager->accountForPath(path); +} + +bool PresenceEngine::isOperationError(Telepathy::Client::PendingOperation *operation) +{ + if(operation->isError()) + { + kDebug() << operation->errorName() << ": " << operation->errorMessage(); + return true; + } + + return false; +} + #include "presence.moc" --- trunk/playground/base/plasma/dataengines/presence/presence.h #927558:927559 @@ -22,7 +22,17 @@ #include #include +#include + class QDBusObjectPath; +namespace Telepathy +{ + namespace Client + { + class AccountManager; + class Account; + } +} class PresenceEngine : public Plasma::DataEngine { @@ -38,13 +48,18 @@ private slots: void onAccountReady(Telepathy::Client::PendingOperation *operation); + void onExistingAccountReady(Telepathy::Client::PendingOperation *); + bool isOperationError(Telepathy::Client::PendingOperation *); void accountCreated(const QString &path); void accountRemoved(const QString &path); void accountValidityChanged(const QString &path, bool valid); private: - class PresenceEnginePrivate; - PresenceEnginePrivate * const d; + QSharedPointer accountFromPath(const QString &path); + void removeAccountDataSource(const QString &path); + void createAccountDataSource(const QString &path); + + Telepathy::Client::AccountManager * m_accountManager; }; K_EXPORT_PLASMA_DATAENGINE(presence, PresenceEngine)