diff options
author | Renato Araujo Oliveira Filho <renato.filho@canonical.com> | 2012-09-11 17:57:08 -0300 |
---|---|---|
committer | Renato Araujo Oliveira Filho <renato.filho@canonical.com> | 2012-09-11 17:57:08 -0300 |
commit | 6bacc0d5db885a72202cb7f80e505642a36052d4 (patch) | |
tree | 608aa95f959b9e362d7813476e59d37c6c07ddf6 /src/common/qdbusobject.cpp | |
parent | 31f8103187d2e27b1bb76eaed10dc9c9be226c90 (diff) | |
download | qmenumodel-6bacc0d5db885a72202cb7f80e505642a36052d4.tar.gz qmenumodel-6bacc0d5db885a72202cb7f80e505642a36052d4.tar.bz2 qmenumodel-6bacc0d5db885a72202cb7f80e505642a36052d4.zip |
Splitted qmenumodel plugin in two libraries to make it testable.
Create unit test for qmenumodel library.
Diffstat (limited to 'src/common/qdbusobject.cpp')
-rw-r--r-- | src/common/qdbusobject.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/common/qdbusobject.cpp b/src/common/qdbusobject.cpp new file mode 100644 index 0000000..6dec6d9 --- /dev/null +++ b/src/common/qdbusobject.cpp @@ -0,0 +1,127 @@ +#include "qdbusobject.h" + +#include <QDebug> + + + +QDBusObject::QDBusObject() + :m_watchId(0), + m_busType(None), + m_status(QDBusObject::Disconnected) +{ + qDebug() << "DBUS CREATED"; + qRegisterMetaType<QDBusObject::ConnectionStatus>("QDBusObject::ConnectionStatus"); +} + +QDBusObject::~QDBusObject() +{ + if (m_watchId != 0) { + g_bus_unwatch_name (m_watchId); + m_watchId = 0; + } +} + +QDBusObject::BusType QDBusObject::busType() const +{ + return m_busType; +} + +void QDBusObject::setBusType(QDBusObject::BusType type) +{ + if (m_busType != type) { + if (m_status != QDBusObject::Disconnected) + disconnect(); + m_busType = type; + busTypeChanged(m_busType); + } +} + +QString QDBusObject::busName() const +{ + return m_busName; +} + +void QDBusObject::setBusName(const QString &busName) +{ + if (m_busName != busName) { + if (m_status != QDBusObject::Disconnected) + disconnect(); + m_busName = busName; + busNameChanged(m_busName); + } +} + +QString QDBusObject::objectPath() const +{ + return m_objectPath; +} + +void QDBusObject::setObjectPath(const QString &objectPath) +{ + if (m_objectPath != objectPath) { + if (m_status != QDBusObject::Disconnected) + disconnect(); + m_objectPath = objectPath; + objectPathChanged(m_objectPath); + } +} + +void QDBusObject::setStatus(QDBusObject::ConnectionStatus status) +{ + if (m_status != status) { + m_status = status; + statusChanged(m_status); + } +} + +QDBusObject::ConnectionStatus QDBusObject::status() const +{ + return m_status; +} + +void QDBusObject::connect() +{ + if (m_status != QDBusObject::Disconnected) { + return; + } else if ((m_busType > None) && !m_objectPath.isEmpty() && !m_busName.isEmpty()) { + GBusType type = m_busType == SessionBus ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM; + m_watchId = g_bus_watch_name (type, + m_busName.toLatin1(), + G_BUS_NAME_WATCHER_FLAGS_NONE, + QDBusObject::onServiceAppeared, + QDBusObject::onServiceFanished, + this, + NULL); + + setStatus(QDBusObject::Connecting); + } else { + qWarning() << "Invalid dbus connection args"; + } +} + +void QDBusObject::disconnect() +{ + if (m_status != QDBusObject::Disconnected) { + g_bus_unwatch_name (m_watchId); + m_watchId = 0; + setStatus(QDBusObject::Disconnected); + } +} + +void QDBusObject::onServiceAppeared(GDBusConnection *connection, const gchar *, const gchar *, gpointer data) +{ + QDBusObject *self = reinterpret_cast<QDBusObject*>(data); + qDebug() << "service appear"; + + self->setStatus(QDBusObject::Connected); + self->serviceAppear(connection); +} + +void QDBusObject::onServiceFanished(GDBusConnection *connection, const gchar *, gpointer data) +{ + QDBusObject *self = reinterpret_cast<QDBusObject*>(data); + qDebug() << "service disappear"; + + self->setStatus(QDBusObject::Connecting); + self->serviceVanish(connection); +} |