You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kitchensync/opensyncdbus/dbusclient.cpp

274 lines
7.0 KiB

/*
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"