summaryrefslogtreecommitdiffstats
path: root/kitchensync/opensyncdbus
diff options
context:
space:
mode:
Diffstat (limited to 'kitchensync/opensyncdbus')
-rw-r--r--kitchensync/opensyncdbus/Makefile.am10
-rw-r--r--kitchensync/opensyncdbus/README5
-rw-r--r--kitchensync/opensyncdbus/dbusclient.cpp273
-rw-r--r--kitchensync/opensyncdbus/dbusclient.h56
4 files changed, 344 insertions, 0 deletions
diff --git a/kitchensync/opensyncdbus/Makefile.am b/kitchensync/opensyncdbus/Makefile.am
new file mode 100644
index 000000000..9b1721f6e
--- /dev/null
+++ b/kitchensync/opensyncdbus/Makefile.am
@@ -0,0 +1,10 @@
+INCLUDES = -I/usr/local/include/dbus-1.0/qt3 $(all_includes) \
+ -I$(top_srcdir)/kitchensync
+
+bin_PROGRAMS = opensyncdbus
+
+opensyncdbus_SOURCES = dbusclient.cpp
+opensyncdbus_LDADD = $(top_builddir)/kitchensync/libqopensync/libqopensync.la
+opensyncdbus_LDFLAGS = -ldbus-1-qt3 -ldbus-1 $(all_libraries) $(KDE_RPATH)
+
+METASOURCES = AUTO
diff --git a/kitchensync/opensyncdbus/README b/kitchensync/opensyncdbus/README
new file mode 100644
index 000000000..e1aa1e3ce
--- /dev/null
+++ b/kitchensync/opensyncdbus/README
@@ -0,0 +1,5 @@
+This directory contains opensyncdbus, a D-BUS frontend for OpenSync. It's a
+daemon which provides a D-BUS interface for controlling OpenSync.
+
+To compile opensyncdbus you need the Qt3 bindings for D-BUS.
+They are in SVN under branches/work/dbus-qt4-qt3backport/
diff --git a/kitchensync/opensyncdbus/dbusclient.cpp b/kitchensync/opensyncdbus/dbusclient.cpp
new file mode 100644
index 000000000..fcf6eda30
--- /dev/null
+++ b/kitchensync/opensyncdbus/dbusclient.cpp
@@ -0,0 +1,273 @@
+/*
+ This file is part of KDE.
+
+ Copyright (c) 2006 Cornelius Schumacher <schumacher@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+
+#include "dbusclient.h"
+
+#include <libqopensync/environment.h>
+#include <libqopensync/group.h>
+
+#include <dbus/qdbuserror.h>
+#include <dbus/qdbusconnection.h>
+#include <dbus/qdbusmessage.h>
+#include <dbus/qdbusproxy.h>
+
+#include <qapplication.h>
+#include <qtimer.h>
+
+#include <iostream>
+
+OpenSyncService::OpenSyncService()
+ : mConnection( 0 )
+{
+}
+
+void OpenSyncService::setConnection( QDBusConnection *connection )
+{
+ mConnection = connection;
+ mConnection->registerObject( "/ABC", this );
+}
+
+bool OpenSyncService::handleMethodCall( const QDBusMessage &message )
+{
+ qDebug( "OpenSyncService::handleMethodCall()" );
+
+ qDebug( " Interface: %s", message.interface().latin1() );
+ qDebug( " Path: %s", message.path().latin1() );
+ qDebug( " Member: %s", message.member().latin1() );
+ qDebug( " Sender: %s", message.sender().latin1() );
+
+ if ( message.interface() != "org.opensync.SyncEngine" ) return false;
+
+ QDBusMessage reply;
+
+ QString function = message.member();
+ if ( function == "hello" ) {
+ reply = hello( message );
+ } else if ( function == "randomNumber" ) {
+ reply = randomNumber( message );
+ } else if ( function == "listGroups" ) {
+ reply = listGroups( message );
+ } else if ( function == "listPlugins" ) {
+ reply = listPlugins( message );
+ } else if ( function == "showGroup" ) {
+ reply = showGroup( message );
+ } else if ( function == "showMember" ) {
+ reply = showMember( message );
+ } else {
+ return false;
+ }
+
+ mConnection->send( reply );
+
+ return true;
+}
+
+QDBusMessage OpenSyncService::showMember( const QDBusMessage &message )
+{
+ if ( message.count() != 2 ) {
+ return error( message, "arg_count",
+ QString("Wrong number of arguments. Expected 2, got %1.")
+ .arg( message.count() ) );
+ }
+
+ QString groupName = message[ 0 ].toString();
+ if ( groupName.isEmpty() ) {
+ return error( message, "missing_arg", "Missing argument: group name." );
+ }
+
+ bool ok;
+ int memberId = message[ 1 ].toInt( &ok );
+ if ( !ok ) {
+ return error( message, "missing_arg", "Missing argument: member id." );
+ }
+
+ QDBusMessage reply;
+
+ QSync::Environment env;
+ QSync::Result result = env.initialize();
+ if ( result.isError() ) {
+ return error( message, result.name(), result.message() );
+ } else {
+ reply = QDBusMessage::methodReply( message );
+
+ QSync::Group group = env.groupByName( groupName );
+ if ( !group.isValid() ) {
+ return error( message, "group_name", QString("Unknown group '%1'.")
+ .arg( groupName ) );
+ }
+
+ QSync::Member member = group.memberById( memberId );
+ if ( !member.isValid() ) {
+ return error( message, "member_id",
+ QString("Unknown member id '%1' in group '%2'.").arg( groupName )
+ .arg( memberId ) );
+ }
+
+ reply.append( memberId );
+ reply.append( member.pluginName() );
+
+ env.finalize();
+ }
+
+ return reply;
+}
+
+
+QDBusMessage OpenSyncService::showGroup( const QDBusMessage &message )
+{
+ if ( message.count() != 1 ) {
+ return error( message, "arg_count",
+ QString("Wrong number of arguments. Expected 1, got %1")
+ .arg( message.count() ) );
+ }
+
+ QString groupName = message[ 0 ].toString();
+ if ( groupName.isEmpty() ) {
+ return error( message, "missing_arg", "Missing argument group name." );
+ }
+
+ QDBusMessage reply;
+
+ QSync::Environment env;
+ QSync::Result result = env.initialize();
+ if ( result.isError() ) {
+ return error( message, result.name(), result.message() );
+ } else {
+ reply = QDBusMessage::methodReply( message );
+
+ QSync::Group group = env.groupByName( groupName );
+ if ( !group.isValid() ) {
+ return error( message, "group_name", QString("Unknown group '%1'")
+ .arg( groupName ) );
+ }
+
+ QSync::Group::Iterator it( &group );
+ for( it = group.begin(); it != group.end(); ++it ) {
+ QSync::Member member = *it;
+ reply.append( QVariant( member.id() ) );
+ }
+
+ env.finalize();
+ }
+
+ return reply;
+}
+
+QDBusMessage OpenSyncService::error( const QDBusMessage &message,
+ const QString &errorCode,
+ const QString &errorMessage )
+{
+ QDBusError error( "org.opensync." + errorCode, errorMessage );
+ return QDBusMessage::methodError( message, error );
+}
+
+QDBusMessage OpenSyncService::listPlugins( const QDBusMessage &message )
+{
+ QDBusMessage reply;
+
+ QSync::Environment env;
+ QSync::Result result = env.initialize();
+ if ( result.isError() ) {
+ QDBusError error( result.name(), result.message() );
+ reply = QDBusMessage::methodError( message, error );
+ } else {
+ reply = QDBusMessage::methodReply( message );
+
+ QSync::Environment::PluginIterator it( env.pluginBegin() );
+ for ( ; it != env.pluginEnd(); ++it ) {
+ reply.append( QVariant( (*it).name() ) );
+ }
+
+ env.finalize();
+ }
+
+ return reply;
+}
+
+QDBusMessage OpenSyncService::listGroups( const QDBusMessage &message )
+{
+ QDBusMessage reply;
+
+ QSync::Environment env;
+ QSync::Result result = env.initialize();
+ if ( result.isError() ) {
+ QDBusError error( result.name(), result.message() );
+ reply = QDBusMessage::methodError( message, error );
+ } else {
+ reply = QDBusMessage::methodReply( message );
+
+ QSync::Environment::GroupIterator it( env.groupBegin() );
+ for ( ; it != env.groupEnd(); ++it ) {
+ reply.append( QVariant( (*it).name() ) );
+ }
+
+ env.finalize();
+ }
+
+ return reply;
+}
+
+QDBusMessage OpenSyncService::hello( const QDBusMessage &message )
+{
+ QDBusMessage reply = QDBusMessage::methodReply( message );
+
+// QDBusError error;
+// reply = QDBusMessage::methodError( message, error );
+
+ reply.append( QVariant( QString( "Hello!" ) ) );
+
+ return reply;
+}
+
+QDBusMessage OpenSyncService::randomNumber( const QDBusMessage &message )
+{
+ QDBusMessage reply = QDBusMessage::methodReply( message );
+
+ int number = rand();
+
+ reply.append( QVariant( number ) );
+
+ return reply;
+}
+
+int main( int argc, char *argv[] )
+{
+ QApplication app(argc, argv);
+
+ std::cout << "Hello" << std::endl;
+
+ QDBusConnection connection = QDBusConnection::addConnection(
+ QDBusConnection::SessionBus );
+
+ if ( !connection.isConnected() ) {
+ qFatal("Cannot connect to session bus");
+ }
+
+ connection.requestName( "org.opensync.SyncEngine",
+ QDBusConnection::NoReplace );
+
+ OpenSyncService service;
+ service.setConnection( &connection );
+
+ return app.exec();
+}
+
+//#include "dbusclient.moc"
diff --git a/kitchensync/opensyncdbus/dbusclient.h b/kitchensync/opensyncdbus/dbusclient.h
new file mode 100644
index 000000000..5cd6635f7
--- /dev/null
+++ b/kitchensync/opensyncdbus/dbusclient.h
@@ -0,0 +1,56 @@
+/*
+ This file is part of KDE.
+
+ Copyright (c) 2006 Cornelius Schumacher <schumacher@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA.
+*/
+#ifndef DBUSCLIENT_H
+#define DBUSCLIENT_H
+
+#include <qobject.h>
+
+#include <dbus/qdbusobject.h>
+
+class QDBusMessage;
+class QDBusConnection;
+
+class OpenSyncService : public QDBusObjectBase
+{
+ public:
+ OpenSyncService();
+
+ void setConnection( QDBusConnection *connection );
+
+ protected:
+ virtual bool handleMethodCall( const QDBusMessage &message );
+
+ QDBusMessage hello( const QDBusMessage & );
+ QDBusMessage randomNumber( const QDBusMessage & );
+
+ QDBusMessage listGroups( const QDBusMessage &message );
+ QDBusMessage listPlugins( const QDBusMessage &message );
+ QDBusMessage showGroup( const QDBusMessage &message );
+ QDBusMessage showMember( const QDBusMessage &message );
+
+ QDBusMessage error( const QDBusMessage &, const QString &errorCode,
+ const QString &errorMessage );
+
+ private:
+ QDBusConnection *mConnection;
+};
+
+#endif