00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "options.h"
00032
00033 #include <qfile.h>
00034
00035 #include <dcopclient.h>
00036 #include <ktempfile.h>
00037
00038
00039 #include <kapplication.h>
00040 #include "kroupware.h"
00041 #include "kpilotConfig.h"
00042
00043 static const char *kroupware_id =
00044 "$Id: kroupware.cc,v 1.8 2003/06/28 23:07:24 danimo Exp $";
00045
00046 KroupwareSync::KroupwareSync(bool pre,int parts,KPilotDeviceLink *p) :
00047 SyncAction(p,pre ? "KroupwarePreSync" : "KroupwarePostSync"),
00048 fPre(pre),
00049 fParts(parts)
00050 {
00051 (void) kroupware_id;
00052 }
00053
00054 bool KroupwareSync::exec()
00055 {
00056 FUNCTIONSETUP;
00057 if (fPre)
00058 {
00059 preSync();
00060 }
00061 else
00062 {
00063 postSync();
00064 }
00065
00066 emit syncDone(this);
00067 return true;
00068 }
00069
00070 void KroupwareSync::cleanupConfig()
00071 {
00072
00073 KPilotConfigSettings &c = KPilotConfig::getConfig();
00074 c.setGroup("todoOptions");
00075 if ( c.hasKey( "CalFileBackup") ) {
00076 QString fn = c.readPathEntry( "CalFileBackup" );
00077 if ( fn != CSL1("empty") ) {
00078 c.writePathEntry( "CalFile" ,fn );
00079 c.writeEntry( "CalFileBackup" , "empty" );
00080 }
00081 }
00082 c.setGroup("vcalOptions");
00083 if ( c.hasKey( "CalFileBackup") ) {
00084 QString fn = c.readPathEntry( "CalFileBackup" );
00085 if ( fn != CSL1("empty") ) {
00086 c.writePathEntry( "CalFile" ,fn );
00087 c.writeEntry( "CalFileBackup" , "empty" );
00088 }
00089 }
00090 c.setGroup("Abbrowser-conduit");
00091 c.writeEntry( "KMailTempFile" , "empty" );
00092 c.sync();
00093 }
00094
00095
00096
00097
00098
00099
00100 void KroupwareSync::start_syncCal_TodosWithKMail( bool cal, bool todos )
00101 {
00102 if ( !cal && ! todos )
00103 return;
00104 KPilotConfigSettings &c = KPilotConfig::getConfig();
00105 DCOPClient *client = kapp->dcopClient();
00106 KTempFile tempfile;
00107 QString filename = tempfile.name();
00108 QByteArray data, reply_data;
00109 QCString reply_type;
00110 QDataStream arg(data, IO_WriteOnly);
00111 arg << filename;
00112 if (!client->call( "kmail" ,
00113 "KOrganizerSyncIface",
00114 "pullSyncData(QString)",
00115 data,
00116 reply_type,
00117 reply_data)) {
00118 logMessage( CSL1("Calling KMail over DCOP failed!" ));
00119 logMessage(CSL1("Not syncing Calendars with KMail"));
00120 logMessage(CSL1("Not syncing Todos with KMail"));
00121 }
00122 else {
00123 logMessage(CSL1("Calling Cal/Todo over DCOP succeeded"));
00124
00125 _syncWithKMail = true;
00126 if ( todos ) {
00127 logMessage( TODO_I18N("Syncing todos with KMail" ));
00128 c.setGroup("todoOptions");
00129 QString fn = c.readPathEntry( "CalFile" );
00130 c.writePathEntry( "CalFileBackup" ,fn );
00131 c.writePathEntry( "CalFile" ,filename );
00132 }
00133 else
00134 logMessage( CSL1("Not syncing todos with KMail" ));
00135 if ( cal ) {
00136 logMessage( TODO_I18N("Syncing calendar with KMail" ));
00137 c.setGroup("vcalOptions");
00138 QString fn = c.readPathEntry( "CalFile" );
00139 c.writePathEntry( "CalFileBackup" ,fn );
00140 c.writePathEntry( "CalFile" ,filename );
00141 }
00142 else
00143 logMessage( CSL1("Not syncing calendar with KMail" ));
00144 }
00145 c.sync();
00146 }
00147
00148 void KroupwareSync::start_syncAddWithKMail()
00149 {
00150 logMessage( CSL1("Syncing Addresses with KMail" ));
00151 DCOPClient *client = kapp->dcopClient();
00152 KTempFile tempfile;
00153 QString filename = tempfile.name();
00154 QByteArray data, reply_data;
00155 QCString reply_type;
00156 QDataStream arg(data, IO_WriteOnly);
00157 arg << filename;
00158 if (!client->call( "kmail" ,
00159 "KMailIface",
00160 "requestAddresses(QString)",
00161 data,
00162 reply_type,
00163 reply_data)) {
00164 logMessage(CSL1("Calling KMail over DCOP failed!" ));
00165 logMessage(CSL1("Not syncing Addresses with KMail"));
00166 }
00167 else {
00168 KPilotConfigSettings &c = KPilotConfig::getConfig();
00169 logMessage(CSL1("Calling addresses over DCOP succeeded"));
00170 c.setGroup("Abbrowser-conduit");
00171 c.writePathEntry( "KMailTempFile" , filename );
00172 c.sync();
00173 }
00174 }
00175 void KroupwareSync::start_syncNotesWithKMail()
00176 {
00177 logMessage( TODO_I18N("Syncing Notes with Mail" ));
00178 logMessage( CSL1("Syncing Notes-sorry not implemented" ));
00179 }
00180
00181 void KroupwareSync::end_syncCal_TodosWithKMail( bool cal, bool todos)
00182 {
00183 if ( !cal && ! todos )
00184 return;
00185 QString filename;
00186 KPilotConfigSettings &c = KPilotConfig::getConfig();
00187 if ( todos ) {
00188 logMessage( TODO_I18N("Rewriting Todos to KMail..." ));
00189 c.setGroup("todoOptions");
00190 filename = c.readPathEntry( "CalFile" );
00191 c.writePathEntry( "CalFile" ,c.readPathEntry( "CalFileBackup" ) );
00192 c.writeEntry( "CalFileBackup" ,"empty");
00193 }
00194 if ( cal ) {
00195 logMessage( TODO_I18N("Rewriting Calendar to KMail" ));
00196 c.setGroup("vcalOptions");
00197 filename = c.readPathEntry( "CalFile" );
00198 QString tf = c.readPathEntry( "CalFileBackup" ) ;
00199 c.writePathEntry( "CalFile" , tf );
00200 c.writeEntry( "CalFileBackup" ,"empty");
00201 }
00202 c.sync();
00203 if ( !filename.isEmpty() ) {
00204 logMessage(CSL1("Try to call KMail via DCOP to finish sync..."));
00205
00206 DCOPClient *client = kapp->dcopClient();
00207 QByteArray data, reply_data;
00208 QCString reply_type;
00209 QDataStream arg(data, IO_WriteOnly);
00210 arg << filename;
00211 if (!client->call( "kmail" ,
00212 "KOrganizerSyncIface",
00213 "pushSyncData(QString)",
00214 data,
00215 reply_type,
00216 reply_data)) {
00217 logMessage( CSL1("Calling KMail over DCOP failed!" ));
00218 logMessage( CSL1("Sync is not complete"));
00219 logMessage( CSL1("Data from Palm stored in file:"));
00220 logMessage(filename);
00221 } else {
00222 logMessage(CSL1("Calling over DCOP succeeded"));
00223 logMessage(CSL1("Sync to KMail has finished successfully"));
00224 }
00225 QFile::remove( filename );
00226 }
00227 }
00228 void KroupwareSync::end_syncAddWithKMail()
00229 {
00230 logMessage( TODO_I18N("Syncing KMail with Addresses " ));
00231 DCOPClient *client = kapp->dcopClient();
00232 KPilotConfigSettings &c = KPilotConfig::getConfig();
00233 c.setGroup("Abbrowser-conduit");
00234 QString filename = c.readPathEntry( "KMailTempFile" );
00235 c.writeEntry( "KMailTempFile" , "empty" );
00236 c.sync();
00237 QByteArray data, reply_data;
00238 QCString reply_type;
00239 QDataStream arg(data, IO_WriteOnly);
00240 arg << filename;
00241 arg << QStringList();
00242 if (!client->call( "kmail" ,
00243 "KMailIface",
00244 "storeAddresses(QString, QStringList)",
00245 data,
00246 reply_type,
00247 reply_data)) {
00248 logMessage(CSL1("Calling KMail over DCOP failed!" ));
00249 logMessage(CSL1("Not syncing Addresses with KMail"));
00250 }
00251 else {
00252 logMessage(CSL1("Calling store addresses over DCOP succeeded"));
00253 }
00254
00255 }
00256 void KroupwareSync::end_syncNotesWithKMail()
00257 {
00258 logMessage( TODO_I18N("Syncing KMail with Notes" ));
00259 logMessage( CSL1("Syncing Notes-sorry not implemented" ));
00260 }
00261
00262
00263
00264 bool KroupwareSync::startKMail(QString *error)
00265 {
00266 FUNCTIONSETUP;
00267
00268 QCString kmdcop;
00269 QString mess;
00270 int pid;
00271
00272 return KApplication::startServiceByDesktopName(CSL1("kmail"),
00273 QString::null,
00274 error,
00275 &kmdcop,
00276 &pid
00277 )==0;
00278 }
00279
00280
00281 void KroupwareSync::preSync()
00282 {
00283 cleanupConfig();
00284 start_syncCal_TodosWithKMail( fParts & Cal, fParts & Todo );
00285 if (fParts & Notes)
00286 {
00287 start_syncNotesWithKMail();
00288 }
00289 if (fParts & Address)
00290 {
00291 start_syncAddWithKMail();
00292 }
00293 }
00294
00295 void KroupwareSync::postSync()
00296 {
00297 cleanupConfig();
00298 end_syncCal_TodosWithKMail( fParts & Cal, fParts & Todo );
00299 if (fParts & Notes)
00300 {
00301 end_syncNotesWithKMail();
00302 }
00303 if (fParts & Address)
00304 {
00305 end_syncAddWithKMail();
00306 }
00307 }
00308
00309
00310