SVN commit 949339 by gberg: Add support for setting the presence of an account through the plasma services mechanism. Everything seems to work OK (through plasmaengineexplorer), but its not stress tested, so don't be surprised if you break it. There are still some smallish issues that need sorting out, but that will require a bit of talk with the telepathy mailing list to clarify some points. Code cleanup and consistency checking of parameter naming will also come soon. M +3 -0 CMakeLists.txt M +21 -0 presence.cpp M +7 -1 presence.h A presence.operations AM presenceservice.cpp [License: LGPL (v2)] AM presenceservice.h [License: LGPL (v2)] M +14 -0 presencesource.cpp M +8 -0 presencesource.h AM setrequestedpresencejob.cpp [License: LGPL (v2)] AM setrequestedpresencejob.h [License: LGPL (v2)] --- trunk/playground/base/plasma/dataengines/presence/CMakeLists.txt #949338:949339 @@ -19,6 +19,8 @@ set(presence_engine_SRCS presence.cpp presencesource.cpp + presenceservice.cpp + setrequestedpresencejob.cpp ) kde4_add_plugin(plasma_engine_presence ${presence_engine_SRCS}) @@ -30,3 +32,4 @@ install(TARGETS plasma_engine_presence DESTINATION ${PLUGIN_INSTALL_DIR}) install(FILES plasma-dataengine-presence.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) +install(FILES presence.operations DESTINATION ${DATA_INSTALL_DIR}/plasma/services) --- trunk/playground/base/plasma/dataengines/presence/presence.cpp #949338:949339 @@ -23,6 +23,8 @@ #include +#include + #include #include #include @@ -54,6 +56,25 @@ } } +Plasma::Service * PresenceEngine::serviceForSource(const QString &name) +{ + kDebug(); // Output which method we are in. + + // Get the data source and then from that, we can get the service + PresenceSource *source = dynamic_cast(containerForSource(name)); + + if(!source) + { + kWarning() << "Service does not exist for the source with name:" << name; + return Plasma::DataEngine::serviceForSource(name); + } + + Plasma::Service *service = source->createService(); + service->setParent(this); + return service; +} + + void PresenceEngine::init() { kDebug(); // Output the method we are in. --- trunk/playground/base/plasma/dataengines/presence/presence.h #949338:949339 @@ -20,8 +20,12 @@ #ifndef PLASMA_DATAENGINE_PRESENCE_PRESENCE_H #define PLASMA_DATAENGINE_PRESENCE_PRESENCE_H -#include +#include +namespace Plasma { + class Service; +} + namespace Telepathy { namespace Client @@ -39,6 +43,8 @@ PresenceEngine(QObject * parent, const QVariantList & args); ~PresenceEngine(); + Plasma::Service * serviceForSource(const QString& name); + protected: void init(); bool sourceRequestEvent(const QString & name); ** trunk/playground/base/plasma/dataengines/presence/presenceservice.cpp #property svn:eol-style + native ** trunk/playground/base/plasma/dataengines/presence/presenceservice.h #property svn:eol-style + native --- trunk/playground/base/plasma/dataengines/presence/presencesource.cpp #949338:949339 @@ -18,6 +18,8 @@ #include "presencesource.h" +#include "presenceservice.h" + #include #include @@ -53,6 +55,18 @@ kDebug() << "Destroying source for Account:" << objectName(); } +Plasma::Service * PresenceSource::createService() +{ + kDebug(); // Output the method we are in. + + return new PresenceService(this); +} + +Telepathy::Client::AccountPtr PresenceSource::account() +{ + return m_account; +} + void PresenceSource::onAccountReady(Telepathy::Client::PendingOperation *op) { kDebug(); // Output the method we are in. --- trunk/playground/base/plasma/dataengines/presence/presencesource.h #949338:949339 @@ -25,6 +25,10 @@ #include +namespace Plasma { + class Service; +} + namespace Telepathy { namespace Client { class PendingOperation; @@ -39,6 +43,10 @@ PresenceSource(Telepathy::Client::AccountPtr account, QObject *parent = 0); ~PresenceSource(); + Plasma::Service * createService(); + + Telepathy::Client::AccountPtr account(); + private Q_SLOTS: void onAccountReady(Telepathy::Client::PendingOperation *op); void onAccountCurrentPresenceChanged(const Telepathy::SimplePresence &); ** trunk/playground/base/plasma/dataengines/presence/setrequestedpresencejob.cpp #property svn:eol-style + native ** trunk/playground/base/plasma/dataengines/presence/setrequestedpresencejob.h #property svn:eol-style + native