dbusclient.cpp
1/*
2 This file is part of KDE.
3
4 Copyright (c) 2006 Cornelius Schumacher <schumacher@kde.org>
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 USA.
20*/
21
22#include "dbusclient.h"
23
24#include <libqopensync/environment.h>
25#include <libqopensync/group.h>
26
27#include <dbus/qdbuserror.h>
28#include <dbus/qdbusconnection.h>
29#include <dbus/qdbusmessage.h>
30#include <dbus/qdbusproxy.h>
31
32#include <tqapplication.h>
33#include <tqtimer.h>
34
35#include <iostream>
36
37OpenSyncService::OpenSyncService()
38 : mConnection( 0 )
39{
40}
41
42void OpenSyncService::setConnection( TQDBusConnection *connection )
43{
44 mConnection = connection;
45 mConnection->registerObject( "/ABC", this );
46}
47
48bool OpenSyncService::handleMethodCall( const TQDBusMessage &message )
49{
50 tqDebug( "OpenSyncService::handleMethodCall()" );
51
52 tqDebug( " Interface: %s", message.interface().latin1() );
53 tqDebug( " Path: %s", message.path().latin1() );
54 tqDebug( " Member: %s", message.member().latin1() );
55 tqDebug( " Sender: %s", message.sender().latin1() );
56
57 if ( message.interface() != "org.opensync.SyncEngine" ) return false;
58
59 TQDBusMessage reply;
60
61 TQString function = message.member();
62 if ( function == "hello" ) {
63 reply = hello( message );
64 } else if ( function == "randomNumber" ) {
65 reply = randomNumber( message );
66 } else if ( function == "listGroups" ) {
67 reply = listGroups( message );
68 } else if ( function == "listPlugins" ) {
69 reply = listPlugins( message );
70 } else if ( function == "showGroup" ) {
71 reply = showGroup( message );
72 } else if ( function == "showMember" ) {
73 reply = showMember( message );
74 } else {
75 return false;
76 }
77
78 mConnection->send( reply );
79
80 return true;
81}
82
83TQDBusMessage OpenSyncService::showMember( const TQDBusMessage &message )
84{
85 if ( message.count() != 2 ) {
86 return error( message, "arg_count",
87 TQString("Wrong number of arguments. Expected 2, got %1.")
88 .arg( message.count() ) );
89 }
90
91 TQString groupName = message[ 0 ].toString();
92 if ( groupName.isEmpty() ) {
93 return error( message, "missing_arg", "Missing argument: group name." );
94 }
95
96 bool ok;
97 int memberId = message[ 1 ].toInt( &ok );
98 if ( !ok ) {
99 return error( message, "missing_arg", "Missing argument: member id." );
100 }
101
102 TQDBusMessage reply;
103
104 QSync::Environment env;
105 QSync::Result result = env.initialize();
106 if ( result.isError() ) {
107 return error( message, result.name(), result.message() );
108 } else {
109 reply = TQDBusMessage::methodReply( message );
110
111 QSync::Group group = env.groupByName( groupName );
112 if ( !group.isValid() ) {
113 return error( message, "group_name", TQString("Unknown group '%1'.")
114 .arg( groupName ) );
115 }
116
117 QSync::Member member = group.memberById( memberId );
118 if ( !member.isValid() ) {
119 return error( message, "member_id",
120 TQString("Unknown member id '%1' in group '%2'.").arg( groupName )
121 .arg( memberId ) );
122 }
123
124 reply.append( memberId );
125 reply.append( member.pluginName() );
126
127 env.finalize();
128 }
129
130 return reply;
131}
132
133
134TQDBusMessage OpenSyncService::showGroup( const TQDBusMessage &message )
135{
136 if ( message.count() != 1 ) {
137 return error( message, "arg_count",
138 TQString("Wrong number of arguments. Expected 1, got %1")
139 .arg( message.count() ) );
140 }
141
142 TQString groupName = message[ 0 ].toString();
143 if ( groupName.isEmpty() ) {
144 return error( message, "missing_arg", "Missing argument group name." );
145 }
146
147 TQDBusMessage reply;
148
149 QSync::Environment env;
150 QSync::Result result = env.initialize();
151 if ( result.isError() ) {
152 return error( message, result.name(), result.message() );
153 } else {
154 reply = TQDBusMessage::methodReply( message );
155
156 QSync::Group group = env.groupByName( groupName );
157 if ( !group.isValid() ) {
158 return error( message, "group_name", TQString("Unknown group '%1'")
159 .arg( groupName ) );
160 }
161
162 QSync::Group::Iterator it( &group );
163 for( it = group.begin(); it != group.end(); ++it ) {
164 QSync::Member member = *it;
165 reply.append( TQVariant( member.id() ) );
166 }
167
168 env.finalize();
169 }
170
171 return reply;
172}
173
174TQDBusMessage OpenSyncService::error( const TQDBusMessage &message,
175 const TQString &errorCode,
176 const TQString &errorMessage )
177{
178 TQDBusError error( "org.opensync." + errorCode, errorMessage );
179 return TQDBusMessage::methodError( message, error );
180}
181
182TQDBusMessage OpenSyncService::listPlugins( const TQDBusMessage &message )
183{
184 TQDBusMessage reply;
185
186 QSync::Environment env;
187 QSync::Result result = env.initialize();
188 if ( result.isError() ) {
189 TQDBusError error( result.name(), result.message() );
190 reply = TQDBusMessage::methodError( message, error );
191 } else {
192 reply = TQDBusMessage::methodReply( message );
193
194 QSync::Environment::PluginIterator it( env.pluginBegin() );
195 for ( ; it != env.pluginEnd(); ++it ) {
196 reply.append( TQVariant( (*it).name() ) );
197 }
198
199 env.finalize();
200 }
201
202 return reply;
203}
204
205TQDBusMessage OpenSyncService::listGroups( const TQDBusMessage &message )
206{
207 TQDBusMessage reply;
208
209 QSync::Environment env;
210 QSync::Result result = env.initialize();
211 if ( result.isError() ) {
212 TQDBusError error( result.name(), result.message() );
213 reply = TQDBusMessage::methodError( message, error );
214 } else {
215 reply = TQDBusMessage::methodReply( message );
216
217 QSync::Environment::GroupIterator it( env.groupBegin() );
218 for ( ; it != env.groupEnd(); ++it ) {
219 reply.append( TQVariant( (*it).name() ) );
220 }
221
222 env.finalize();
223 }
224
225 return reply;
226}
227
228TQDBusMessage OpenSyncService::hello( const TQDBusMessage &message )
229{
230 TQDBusMessage reply = TQDBusMessage::methodReply( message );
231
232// TQDBusError error;
233// reply = TQDBusMessage::methodError( message, error );
234
235 reply.append( TQVariant( TQString( "Hello!" ) ) );
236
237 return reply;
238}
239
240TQDBusMessage OpenSyncService::randomNumber( const TQDBusMessage &message )
241{
242 TQDBusMessage reply = TQDBusMessage::methodReply( message );
243
244 int number = rand();
245
246 reply.append( TQVariant( number ) );
247
248 return reply;
249}
250
251int main( int argc, char *argv[] )
252{
253 TQApplication app(argc, argv);
254
255 std::cout << "Hello" << std::endl;
256
257 TQDBusConnection connection = TQDBusConnection::addConnection(
258 TQDBusConnection::SessionBus );
259
260 if ( !connection.isConnected() ) {
261 tqFatal("Cannot connect to session bus");
262 }
263
264 connection.requestName( "org.opensync.SyncEngine",
265 TQDBusConnection::NoReplace );
266
267 OpenSyncService service;
268 service.setConnection( &connection );
269
270 return app.exec();
271}
272
273//#include "dbusclient.moc"