summaryrefslogtreecommitdiffabout
path: root/libkdepim
Unidiff
Diffstat (limited to 'libkdepim') (more/less context) (ignore whitespace changes)
-rw-r--r--libkdepim/kpimprefs.cpp3
-rw-r--r--libkdepim/kpimprefs.h3
-rw-r--r--libkdepim/ksyncmanager.cpp567
-rw-r--r--libkdepim/ksyncmanager.h107
4 files changed, 630 insertions, 50 deletions
diff --git a/libkdepim/kpimprefs.cpp b/libkdepim/kpimprefs.cpp
index a9ea330..0a2f5f1 100644
--- a/libkdepim/kpimprefs.cpp
+++ b/libkdepim/kpimprefs.cpp
@@ -25,32 +25,35 @@
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <kglobal.h> 31#include <kglobal.h>
32#include <kconfig.h> 32#include <kconfig.h>
33#include <klocale.h> 33#include <klocale.h>
34#include <kdebug.h> 34#include <kdebug.h>
35 35
36#include "kpimprefs.h" 36#include "kpimprefs.h"
37 37
38KPimPrefs::KPimPrefs( const QString &name ) : 38KPimPrefs::KPimPrefs( const QString &name ) :
39 KPrefs( name ) 39 KPrefs( name )
40{ 40{
41 config()->setGroup("General");
42 addItemString("PassiveSyncPort",&mPassiveSyncPort,"9197" );
43 addItemString("PassiveSyncPw",&mPassiveSyncPw,"abc" );
41} 44}
42 45
43KPimPrefs::~KPimPrefs() 46KPimPrefs::~KPimPrefs()
44{ 47{
45} 48}
46 49
47void KPimPrefs::usrSetDefaults() 50void KPimPrefs::usrSetDefaults()
48{ 51{
49 setCategoryDefaults(); 52 setCategoryDefaults();
50} 53}
51 54
52void KPimPrefs::usrReadConfig() 55void KPimPrefs::usrReadConfig()
53{ 56{
54 kdDebug(5300) << "KPimPrefs::usrReadConfig()" << endl; 57 kdDebug(5300) << "KPimPrefs::usrReadConfig()" << endl;
55 58
56 config()->setGroup("General"); 59 config()->setGroup("General");
diff --git a/libkdepim/kpimprefs.h b/libkdepim/kpimprefs.h
index 6f92919..fde8093 100644
--- a/libkdepim/kpimprefs.h
+++ b/libkdepim/kpimprefs.h
@@ -42,28 +42,29 @@ class KPimPrefs : public KPrefs
42 KPimPrefs( const QString &name = QString::null ); 42 KPimPrefs( const QString &name = QString::null );
43 43
44 virtual ~KPimPrefs(); 44 virtual ~KPimPrefs();
45 45
46 /** Set preferences to default values */ 46 /** Set preferences to default values */
47 void usrSetDefaults(); 47 void usrSetDefaults();
48 48
49 /** Read preferences from config file */ 49 /** Read preferences from config file */
50 void usrReadConfig(); 50 void usrReadConfig();
51 51
52 /** Write preferences to config file */ 52 /** Write preferences to config file */
53 void usrWriteConfig(); 53 void usrWriteConfig();
54 54
55 55
56 public: 56 public:
57 QStringList mCustomCategories; 57 QStringList mCustomCategories;
58 58 QString mPassiveSyncPort;
59 QString mPassiveSyncPw;
59 60
60 61
61 62
62 protected: 63 protected:
63 virtual void setCategoryDefaults(); 64 virtual void setCategoryDefaults();
64 65
65 66
66 67
67}; 68};
68 69
69#endif 70#endif
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index c0cc840..5d48884 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -19,99 +19,106 @@
19*/ 19*/
20 20
21// $Id$ 21// $Id$
22 22
23#include "ksyncmanager.h" 23#include "ksyncmanager.h"
24 24
25#include <stdlib.h> 25#include <stdlib.h>
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#include <unistd.h> 28#include <unistd.h>
29#endif 29#endif
30 30
31 31
32#include "ksyncprofile.h" 32#include "ksyncprofile.h"
33#include "ksyncprefsdialog.h" 33#include "ksyncprefsdialog.h"
34#include "kpimprefs.h" 34#include "kpimprefs.h"
35#include <kmessagebox.h>
35 36
36#include <qdir.h> 37#include <qdir.h>
37#include <qprogressbar.h> 38#include <qprogressbar.h>
38#include <qpopupmenu.h> 39#include <qpopupmenu.h>
39#include <qpushbutton.h> 40#include <qpushbutton.h>
40#include <qradiobutton.h> 41#include <qradiobutton.h>
41#include <qbuttongroup.h> 42#include <qbuttongroup.h>
42#include <qtimer.h> 43#include <qtimer.h>
43#include <qmessagebox.h> 44#include <qmessagebox.h>
44#include <qapplication.h> 45#include <qapplication.h>
45#include <qlineedit.h> 46#include <qlineedit.h>
46#include <qdialog.h> 47#include <qdialog.h>
47#include <qlayout.h> 48#include <qlayout.h>
49#include <qtextcodec.h>
50#include <qlabel.h>
48 51
49#include <klocale.h> 52#include <klocale.h>
50#include <kglobal.h> 53#include <kglobal.h>
51#include <kconfig.h> 54#include <kconfig.h>
52#include <kfiledialog.h> 55#include <kfiledialog.h>
53 56
54KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu) 57KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
55 : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu) 58 : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mPrefs(prefs ),mSyncMenu(syncmenu)
56{ 59{
60 mServerSocket = 0;
57 bar = new QProgressBar ( 1, 0 ); 61 bar = new QProgressBar ( 1, 0 );
58 bar->setCaption (""); 62 bar->setCaption ("");
59 63
60 int w = 300; 64 int w = 300;
61 if ( QApplication::desktop()->width() < 320 ) 65 if ( QApplication::desktop()->width() < 320 )
62 w = 220; 66 w = 220;
63 int h = bar->sizeHint().height() ; 67 int h = bar->sizeHint().height() ;
64 int dw = QApplication::desktop()->width(); 68 int dw = QApplication::desktop()->width();
65 int dh = QApplication::desktop()->height(); 69 int dh = QApplication::desktop()->height();
66 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 70 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
67 71
68} 72}
69 73
70KSyncManager::~KSyncManager() 74KSyncManager::~KSyncManager()
71{ 75{
72 delete bar; 76 delete bar;
73} 77}
74 78
75 79//LR ok
76void KSyncManager::fillSyncMenu() 80void KSyncManager::fillSyncMenu()
77{ 81{
78 if ( mSyncMenu->count() ) 82 if ( mSyncMenu->count() )
79 mSyncMenu->clear(); 83 mSyncMenu->clear();
80 84
81 mSyncMenu->insertItem( i18n("Configure..."), 0 ); 85 mSyncMenu->insertItem( i18n("Configure..."), 0 );
82 mSyncMenu->insertSeparator(); 86 mSyncMenu->insertSeparator();
87 if ( mServerSocket == 0 ) {
88 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 );
89 } else {
90 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 );
91 }
92 mSyncMenu->insertSeparator();
83 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 93 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
84 mSyncMenu->insertSeparator(); 94 mSyncMenu->insertSeparator();
85 95
86 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 96 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
87 config.setGroup("General"); 97 config.setGroup("General");
88 QStringList prof = config.readListEntry("SyncProfileNames"); 98 QStringList prof = config.readListEntry("SyncProfileNames");
89 mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 99 mLocalMachineName = config.readEntry("LocalMachineName","undefined");
90 if ( prof.count() < 3 ) { 100 if ( prof.count() < 2 ) {
91 prof.clear(); 101 prof.clear();
92 prof << i18n("Sharp_DTM"); 102 prof << i18n("Sharp_DTM");
93 prof << i18n("Local_file"); 103 prof << i18n("Local_file");
94 prof << i18n("Last_file");
95 KSyncProfile* temp = new KSyncProfile (); 104 KSyncProfile* temp = new KSyncProfile ();
96 temp->setName( prof[0] ); 105 temp->setName( prof[0] );
97 temp->writeConfig(&config); 106 temp->writeConfig(&config);
98 temp->setName( prof[1] ); 107 temp->setName( prof[1] );
99 temp->writeConfig(&config); 108 temp->writeConfig(&config);
100 temp->setName( prof[2] );
101 temp->writeConfig(&config);
102 config.setGroup("General"); 109 config.setGroup("General");
103 config.writeEntry("SyncProfileNames",prof); 110 config.writeEntry("SyncProfileNames",prof);
104 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 111 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
105 config.sync(); 112 config.sync();
106 delete temp; 113 delete temp;
107 } 114 }
108 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 115 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
109 mSyncProfileNames = prof; 116 mSyncProfileNames = prof;
110 unsigned int i; 117 unsigned int i;
111 for ( i = 0; i < prof.count(); ++i ) { 118 for ( i = 0; i < prof.count(); ++i ) {
112 mSyncMenu->insertItem( prof[i], 1000+i ); 119 mSyncMenu->insertItem( prof[i], 1000+i );
113 if ( i == 2 ) 120 if ( i == 2 )
114 mSyncMenu->insertSeparator(); 121 mSyncMenu->insertSeparator();
115 } 122 }
116 QDir app_dir; 123 QDir app_dir;
117 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 124 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
@@ -128,32 +135,43 @@ void KSyncManager::slotSyncMenu( int action )
128 //qDebug("syncaction %d ", action); 135 //qDebug("syncaction %d ", action);
129 if ( action == 0 ) { 136 if ( action == 0 ) {
130 137
131 // seems to be a Qt2 event handling bug 138 // seems to be a Qt2 event handling bug
132 // syncmenu.clear causes a segfault at first time 139 // syncmenu.clear causes a segfault at first time
133 // when we call it after the main event loop, it is ok 140 // when we call it after the main event loop, it is ok
134 // same behaviour when calling OM/Pi via QCOP for the first time 141 // same behaviour when calling OM/Pi via QCOP for the first time
135 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 142 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
136 //confSync(); 143 //confSync();
137 144
138 return; 145 return;
139 } 146 }
140 if ( action == 1 ) { 147 if ( action == 1 ) {
141 multiSync( true ); 148 multiSync( true );
142 return; 149 return;
143 } 150 }
151 if ( action == 2 ) {
152 enableQuick();
153 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
154 return;
155 }
156 if ( action == 3 ) {
157 delete mServerSocket;
158 mServerSocket = 0;
159 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
160 return;
161 }
144 162
145 if (blockSave()) 163 if (blockSave())
146 return; 164 return;
147 165
148 setBlockSave(true); 166 setBlockSave(true);
149 167
150 mCurrentSyncProfile = action - 1000 ; 168 mCurrentSyncProfile = action - 1000 ;
151 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 169 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
152 mCurrentSyncName = mLocalMachineName ; 170 mCurrentSyncName = mLocalMachineName ;
153 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 171 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
154 KSyncProfile* temp = new KSyncProfile (); 172 KSyncProfile* temp = new KSyncProfile ();
155 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 173 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
156 temp->readConfig(&config); 174 temp->readConfig(&config);
157 mAskForPreferences = temp->getAskForPreferences(); 175 mAskForPreferences = temp->getAskForPreferences();
158 mSyncAlgoPrefs = temp->getSyncPrefs(); 176 mSyncAlgoPrefs = temp->getSyncPrefs();
159 mWriteBackFile = temp->getWriteBackFile(); 177 mWriteBackFile = temp->getWriteBackFile();
@@ -185,40 +203,94 @@ void KSyncManager::slotSyncMenu( int action )
185 break; 203 break;
186 case (PWMPI): 204 case (PWMPI):
187 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 205 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
188 mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 206 mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
189 break; 207 break;
190 default: 208 default:
191 qDebug("KSyncManager::slotSyncMenu: invalid apptype selected"); 209 qDebug("KSyncManager::slotSyncMenu: invalid apptype selected");
192 break; 210 break;
193 211
194 } 212 }
195 } else { 213 } else {
196 if ( temp->getIsPhoneSync() ) { 214 if ( temp->getIsPhoneSync() ) {
197 mPhoneDevice = temp->getPhoneDevice( ) ; 215 mPhoneDevice = temp->getPhoneDevice( ) ;
198 mPhoneConnection = temp->getPhoneConnection( ); 216 mPhoneConnection = temp->getPhoneConnection( );
199 mPhoneModel = temp->getPhoneModel( ); 217 mPhoneModel = temp->getPhoneModel( );
200 syncPhone(); 218 syncPhone();
201 } else 219 } else if ( temp->getIsPiSync() ) {
220 mPassWordPiSync = temp->getRemotePw();
221 mActiveSyncPort = temp->getRemotePort();
222 mActiveSyncIP = temp->getRemoteIP();
223 syncPi();
224 }
202 syncRemote( temp ); 225 syncRemote( temp );
203 226
204 } 227 }
205 } 228 }
206 delete temp; 229 delete temp;
207 setBlockSave(false); 230 setBlockSave(false);
208} 231}
232void KSyncManager::enableQuick()
233{
234 QDialog dia ( 0, "input-dialog", true );
235 QLineEdit lab ( &dia );
236 QVBoxLayout lay( &dia );
237 lab.setText( mPrefs->mPassiveSyncPort );
238 lay.setMargin(7);
239 lay.setSpacing(7);
240 int po = 9197+mTargetApp;
241 QLabel label ( i18n("Port number (Default: %1)").arg(po), &dia );
242 lay.addWidget( &label);
243 lay.addWidget( &lab);
244
245 QLineEdit lepw ( &dia );
246 lepw.setText( mPrefs->mPassiveSyncPw );
247 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
248 lay.addWidget( &label2);
249 lay.addWidget( &lepw);
250 dia.setFixedSize( 230,80 );
251 dia.setCaption( i18n("Enter port for Pi-Sync") );
252 QPushButton pb ( "OK", &dia);
253 lay.addWidget( &pb );
254 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
255 dia.show();
256 if ( ! dia.exec() )
257 return;
258 dia.hide();
259 qApp->processEvents();
260 mPrefs->mPassiveSyncPw = lepw.text();
261 mPrefs->mPassiveSyncPort = lab.text();
262 bool ok;
263 Q_UINT16 port = mPrefs->mPassiveSyncPort.toUInt(&ok);
264 if ( ! ok ) {
265 KMessageBox::information( 0, i18n("No valid port"));
266 return;
267 }
268 //qDebug("port %d ", port);
269 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
270 mServerSocket->setFileName( defaultFileName() );
271 //qDebug("connected ");
272 if ( !mServerSocket->ok() ) {
273 KMessageBox::information( 0, i18n("Failed to bind or\nlisten to the port!"));
274 delete mServerSocket;
275 mServerSocket = 0;
276 return;
277 }
278 connect( mServerSocket, SIGNAL ( saveFile() ),this, SIGNAL ( save() ) );
279 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
280}
209 281
210void KSyncManager::syncLocalFile() 282void KSyncManager::syncLocalFile()
211{ 283{
212 284
213 QString fn =mLastSyncedLocalFile; 285 QString fn =mLastSyncedLocalFile;
214 QString ext; 286 QString ext;
215 287
216 switch(mTargetApp) 288 switch(mTargetApp)
217 { 289 {
218 case (KAPI): 290 case (KAPI):
219 ext = "(*.vcf)"; 291 ext = "(*.vcf)";
220 break; 292 break;
221 case (KOPI): 293 case (KOPI):
222 ext = "(*.ics/*.vcs)"; 294 ext = "(*.ics/*.vcs)";
223 break; 295 break;
224 case (PWMPI): 296 case (PWMPI):
@@ -258,33 +330,32 @@ bool KSyncManager::syncWithFile( QString fn , bool quick )
258 mess, 330 mess,
259 i18n("Sync"), i18n("Cancel"), 0, 331 i18n("Sync"), i18n("Cancel"), 0,
260 0, 1 ); 332 0, 1 );
261 if ( result ) 333 if ( result )
262 return false; 334 return false;
263 } 335 }
264 if ( mAskForPreferences ) 336 if ( mAskForPreferences )
265 edit_sync_options(); 337 edit_sync_options();
266 if ( result == 0 ) { 338 if ( result == 0 ) {
267 //qDebug("Now sycing ... "); 339 //qDebug("Now sycing ... ");
268 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) ) 340 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) )
269 mParent->setCaption( i18n("Synchronization successful") ); 341 mParent->setCaption( i18n("Synchronization successful") );
270 else 342 else
271 mParent->setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 343 mParent->setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
272 if ( ! quick ) 344 if ( ! quick )
273 mLastSyncedLocalFile = fn; 345 mLastSyncedLocalFile = fn;
274 mImplementation->sync_setModified();
275 } 346 }
276 return ret; 347 return ret;
277} 348}
278void KSyncManager::quickSyncLocalFile() 349void KSyncManager::quickSyncLocalFile()
279{ 350{
280 351
281 if ( syncWithFile( mLastSyncedLocalFile, false ) ) { 352 if ( syncWithFile( mLastSyncedLocalFile, false ) ) {
282 qDebug("quick syncLocalFile() successful "); 353 qDebug("quick syncLocalFile() successful ");
283 354
284 } 355 }
285} 356}
286void KSyncManager::multiSync( bool askforPrefs ) 357void KSyncManager::multiSync( bool askforPrefs )
287{ 358{
288 if (blockSave()) 359 if (blockSave())
289 return; 360 return;
290 setBlockSave(true); 361 setBlockSave(true);
@@ -297,33 +368,33 @@ void KSyncManager::multiSync( bool askforPrefs )
297 mParent->setCaption(i18n("Aborted! Nothing synced!")); 368 mParent->setCaption(i18n("Aborted! Nothing synced!"));
298 return; 369 return;
299 } 370 }
300 mCurrentSyncDevice = i18n("Multiple profiles") ; 371 mCurrentSyncDevice = i18n("Multiple profiles") ;
301 mSyncAlgoPrefs = mRingSyncAlgoPrefs; 372 mSyncAlgoPrefs = mRingSyncAlgoPrefs;
302 if ( askforPrefs ) { 373 if ( askforPrefs ) {
303 edit_sync_options(); 374 edit_sync_options();
304 mRingSyncAlgoPrefs = mSyncAlgoPrefs; 375 mRingSyncAlgoPrefs = mSyncAlgoPrefs;
305 } 376 }
306 mParent->setCaption(i18n("Multiple sync started.") ); 377 mParent->setCaption(i18n("Multiple sync started.") );
307 qApp->processEvents(); 378 qApp->processEvents();
308 int num = ringSync() ; 379 int num = ringSync() ;
309 if ( num > 1 ) 380 if ( num > 1 )
310 ringSync(); 381 ringSync();
311 setBlockSave(false); 382 setBlockSave(false);
312 if ( num ) 383 if ( num )
313 mImplementation->sync_save(); 384 emit save();
314 if ( num ) 385 if ( num )
315 mParent->setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 386 mParent->setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
316 else 387 else
317 mParent->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 388 mParent->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
318 return; 389 return;
319} 390}
320int KSyncManager::ringSync() 391int KSyncManager::ringSync()
321{ 392{
322 int syncedProfiles = 0; 393 int syncedProfiles = 0;
323 unsigned int i; 394 unsigned int i;
324 QTime timer; 395 QTime timer;
325 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 396 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
326 QStringList syncProfileNames = mSyncProfileNames; 397 QStringList syncProfileNames = mSyncProfileNames;
327 KSyncProfile* temp = new KSyncProfile (); 398 KSyncProfile* temp = new KSyncProfile ();
328 mAskForPreferences = false; 399 mAskForPreferences = false;
329 for ( i = 0; i < syncProfileNames.count(); ++i ) { 400 for ( i = 0; i < syncProfileNames.count(); ++i ) {
@@ -415,52 +486,52 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
415{ 486{
416 QString question; 487 QString question;
417 if ( ask ) { 488 if ( ask ) {
418 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 489 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
419 if ( QMessageBox::information( mParent, i18n("Sync"), 490 if ( QMessageBox::information( mParent, i18n("Sync"),
420 question, 491 question,
421 i18n("Yes"), i18n("No"), 492 i18n("Yes"), i18n("No"),
422 0, 0 ) != 0 ) 493 0, 0 ) != 0 )
423 return; 494 return;
424 } 495 }
425 496
426 QString preCommand; 497 QString preCommand;
427 QString localTempFile; 498 QString localTempFile;
428 QString postCommand; 499 QString postCommand;
429 500
430 switch(mTargetApp) 501 switch(mTargetApp)
431 { 502 {
432 case (KAPI): 503 case (KAPI):
433 preCommand = prof->getPreSyncCommandAB(); 504 preCommand = prof->getPreSyncCommandAB();
434 postCommand = prof->getPostSyncCommandAB(); 505 postCommand = prof->getPostSyncCommandAB();
435 localTempFile = prof->getLocalTempFileAB(); 506 localTempFile = prof->getLocalTempFileAB();
436 break; 507 break;
437 case (KOPI): 508 case (KOPI):
438 preCommand = prof->getPreSyncCommand(); 509 preCommand = prof->getPreSyncCommand();
439 postCommand = prof->getPostSyncCommand(); 510 postCommand = prof->getPostSyncCommand();
440 localTempFile = prof->getLocalTempFile(); 511 localTempFile = prof->getLocalTempFile();
441 break; 512 break;
442 case (PWMPI): 513 case (PWMPI):
443 preCommand = prof->getPreSyncCommandPWM(); 514 preCommand = prof->getPreSyncCommandPWM();
444 postCommand = prof->getPostSyncCommandPWM(); 515 postCommand = prof->getPostSyncCommandPWM();
445 localTempFile = prof->getLocalTempFilePWM(); 516 localTempFile = prof->getLocalTempFilePWM();
446 break; 517 break;
447 default: 518 default:
448 qDebug("KSyncManager::syncRemote: invalid apptype selected"); 519 qDebug("KSyncManager::syncRemote: invalid apptype selected");
449 break; 520 break;
450 } 521 }
451 522
452 523
453 int fi; 524 int fi;
454 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 525 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
455 QString pwd = getPassword(); 526 QString pwd = getPassword();
456 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 527 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
457 528
458 } 529 }
459 int maxlen = 30; 530 int maxlen = 30;
460 if ( QApplication::desktop()->width() > 320 ) 531 if ( QApplication::desktop()->width() > 320 )
461 maxlen += 25; 532 maxlen += 25;
462 mParent->setCaption ( i18n( "Copy remote file to local machine..." ) ); 533 mParent->setCaption ( i18n( "Copy remote file to local machine..." ) );
463 int fileSize = 0; 534 int fileSize = 0;
464 int result = system ( preCommand ); 535 int result = system ( preCommand );
465 // 0 : okay 536 // 0 : okay
466 // 256: no such file or dir 537 // 256: no such file or dir
@@ -601,63 +672,487 @@ void KSyncManager::confSync()
601 sp->show(); 672 sp->show();
602#endif 673#endif
603 sp->exec(); 674 sp->exec();
604 mSyncProfileNames = sp->getSyncProfileNames(); 675 mSyncProfileNames = sp->getSyncProfileNames();
605 mLocalMachineName = sp->getLocalMachineName (); 676 mLocalMachineName = sp->getLocalMachineName ();
606 fillSyncMenu(); 677 fillSyncMenu();
607} 678}
608 679
609void KSyncManager::syncSharp() 680void KSyncManager::syncSharp()
610{ 681{
611 if ( ! syncExternalApplication("sharp") ) 682 if ( ! syncExternalApplication("sharp") )
612 qDebug("ERROR sync sharp ");; 683 qDebug("ERROR sync sharp ");;
613} 684}
614 685
615bool KSyncManager::syncExternalApplication(QString resource) 686bool KSyncManager::syncExternalApplication(QString resource)
616{ 687{
617 if ( mImplementation->sync_isModified() ) 688
618 mImplementation->sync_save(); 689 emit save();
619 690
620 if ( mAskForPreferences ) 691 if ( mAskForPreferences )
621 edit_sync_options(); 692 edit_sync_options();
622 693
623 qDebug("sync %s", resource.latin1()); 694 qDebug("sync %s", resource.latin1());
624 695
625 bool syncOK = mImplementation->syncExternal(this, resource); 696 bool syncOK = mImplementation->syncExternal(this, resource);
626 697
627 return syncOK; 698 return syncOK;
628 699
629} 700}
630 701
631void KSyncManager::syncPhone() 702void KSyncManager::syncPhone()
632{ 703{
633 if ( mImplementation->sync_isModified() ) 704 emit save();
634 mImplementation->sync_save();
635 705
636 qDebug("pending syncPhone(); "); 706 qDebug("pending syncPhone(); ");
637 //mView->syncPhone(); 707 //mView->syncPhone();
638 mImplementation->sync_setModified();
639 708
640} 709}
641 710
642void KSyncManager::showProgressBar(int percentage, QString caption, int total) 711void KSyncManager::showProgressBar(int percentage, QString caption, int total)
643{ 712{
644 if (!bar->isVisible()) 713 if (!bar->isVisible())
645 { 714 {
646 bar->setCaption (caption); 715 bar->setCaption (caption);
647 bar->setTotalSteps ( total ) ; 716 bar->setTotalSteps ( total ) ;
648 717
649 bar->show(); 718 bar->show();
650 } 719 }
651 720
652 bar->setProgress( percentage ); 721 bar->setProgress( percentage );
653} 722}
654 723
655void KSyncManager::hideProgressBar() 724void KSyncManager::hideProgressBar()
656{ 725{
657 bar->hide(); 726 bar->hide();
658} 727}
659 728
660bool KSyncManager::isProgressBarCanceled() 729bool KSyncManager::isProgressBarCanceled()
661{ 730{
662 return !bar->isVisible(); 731 return !bar->isVisible();
663} 732}
733
734QString KSyncManager::syncFileName()
735{
736
737 QString fn = "tempfile";
738 switch(mTargetApp)
739 {
740 case (KAPI):
741 fn = "addressbook.vcf";
742 break;
743 case (KOPI):
744 fn = "synccalendar.ics";
745 break;
746 case (PWMPI):
747 fn = "manager.pwm";
748 break;
749 default:
750 break;
751 }
752#ifdef _WIN32_
753 return locateLocal( "tmp", fn );
754#else
755 return (QString( "/tmp/" )+ fn );
756#endif
757}
758
759void KSyncManager::syncPi()
760{
761 qApp->processEvents();
762 bool ok;
763 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
764 if ( ! ok ) {
765 mParent->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
766 return;
767 }
768 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this );
769 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
770 mParent->setCaption( i18n("Sending request for remote file ...") );
771 commandSocket->readFile( syncFileName() );
772}
773
774void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
775{
776 qDebug("MainWindow::deleteCommandSocket %d", state);
777
778 //enum { success, errorW, errorR, quiet };
779 if ( state == KCommandSocket::errorR ) {
780 mParent->setCaption( i18n("ERROR: Receiving remote file failed.") );
781 delete s;
782 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this );
783 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
784 commandSocket->sendStop();
785 return;
786
787 } else if ( state == KCommandSocket::errorW ) {
788 mParent->setCaption( i18n("ERROR:Writing back file failed.") );
789
790 } else if ( state == KCommandSocket::successR ) {
791 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
792
793 } else if ( state == KCommandSocket::successW ) {
794 mParent->setCaption( i18n("Pi-Sync succesful!") );
795 }
796
797 delete s;
798}
799
800void KSyncManager::readFileFromSocket()
801{
802 QString fileName = syncFileName();
803 mParent->setCaption( i18n("Remote file saved to temp file.") );
804 if ( ! syncWithFile( fileName , true ) ) {
805 mParent->setCaption( i18n("Syncing failed.") );
806 qDebug("Syncing failed ");
807 return;
808 }
809 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this );
810 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
811 if ( mWriteBackFile )
812 commandSocket->writeFile( fileName );
813 else {
814 commandSocket->sendStop();
815 mParent->setCaption( i18n("Pi-Sync succesful!") );
816 }
817}
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
842{
843 mPassWord = pw;
844 mSocket = 0;
845 mSyncActionDialog = 0;
846 blockRC = false;
847};
848
849void KServerSocket::newConnection ( int socket )
850{
851 // qDebug("KServerSocket:New connection %d ", socket);
852 if ( mSocket ) {
853 qDebug("KServerSocket::newConnection Socket deleted! ");
854 delete mSocket;
855 mSocket = 0;
856 }
857 mSocket = new QSocket( this );
858 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
859 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
860 mSocket->setSocket( socket );
861}
862
863void KServerSocket::discardClient()
864{
865 //qDebug(" KServerSocket::discardClient()");
866 if ( mSocket ) {
867 delete mSocket;
868 mSocket = 0;
869 }
870 //emit endConnect();
871}
872void KServerSocket::readClient()
873{
874 if ( blockRC )
875 return;
876 if ( mSocket == 0 ) {
877 qDebug("ERROR::KServerSocket::readClient(): mSocket == 0 ");
878 return;
879 }
880 qDebug("KServerSocket readClient()");
881 if ( mSocket->canReadLine() ) {
882 QString line = mSocket->readLine();
883 qDebug("KServerSocket readline: %s ", line.latin1());
884 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
885 if ( tokens[0] == "GET" ) {
886 if ( tokens[1] == mPassWord )
887 //emit sendFile( mSocket );
888 send_file();
889 else {
890 KMessageBox::information( 0, i18n("ERROR:\nGot send file request\nwith invalid password"));
891 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() );
892 }
893 }
894 if ( tokens[0] == "PUT" ) {
895 if ( tokens[1] == mPassWord ) {
896 //emit getFile( mSocket );
897 blockRC = true;
898 get_file();
899 }
900 else {
901 KMessageBox::information( 0, i18n("ERROR:\nGot receive file request\nwith invalid password"));
902 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() );
903 }
904 }
905 if ( tokens[0] == "STOP" ) {
906 //emit endConnect();
907 end_connect();
908 }
909 }
910}
911void KServerSocket::end_connect()
912{
913 delete mSyncActionDialog;
914 mSyncActionDialog = 0;
915}
916void KServerSocket::send_file()
917{
918 //qDebug("MainWindow::sendFile(QSocket* s) ");
919 if ( mSyncActionDialog )
920 delete mSyncActionDialog;
921 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
922 mSyncActionDialog->setCaption(i18n("Received sync request"));
923 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
924 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
925 lay->addWidget( label);
926 lay->setMargin(7);
927 lay->setSpacing(7);
928 mSyncActionDialog->setFixedSize( 230, 120);
929 mSyncActionDialog->show();
930 qDebug("KSS::saving ... ");
931 emit saveFile();
932 qApp->processEvents();
933 QString fileName = mFileName;
934 QFile file( fileName );
935 if (!file.open( IO_ReadOnly ) ) {
936 delete mSyncActionDialog;
937 mSyncActionDialog = 0;
938 qDebug("KSS::error open file ");
939 mSocket->close();
940 if ( mSocket->state() == QSocket::Idle )
941 QTimer::singleShot( 10, this , SLOT ( discardClient()));
942 return ;
943
944 }
945 mSyncActionDialog->setCaption( i18n("Sending file...") );
946 QTextStream ts( &file );
947 ts.setCodec( QTextCodec::codecForName("utf8") );
948 QTextStream os( mSocket );
949 os.setCodec( QTextCodec::codecForName("utf8") );
950 //os.setEncoding( QTextStream::UnicodeUTF8 );
951 while ( ! ts.atEnd() ) {
952 os << ts.readLine() << "\n";
953 }
954 //os << ts.read();
955 file.close();
956 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
957 mSocket->close();
958 if ( mSocket->state() == QSocket::Idle )
959 QTimer::singleShot( 10, this , SLOT ( discardClient()));
960}
961void KServerSocket::get_file()
962{
963 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
964
965 piTime.start();
966 piFileString = "";
967 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
968}
969
970
971void KServerSocket::readBackFileFromSocket()
972{
973 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
974 while ( mSocket->canReadLine () ) {
975 piTime.restart();
976 QString line = mSocket->readLine ();
977 piFileString += line;
978 //qDebug("readline: %s ", line.latin1());
979 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
980
981 }
982 if ( piTime.elapsed () < 3000 ) {
983 // wait for more
984 //qDebug("waitformore ");
985 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
986 return;
987 }
988 QString fileName = mFileName;
989 QFile file ( fileName );
990 if (!file.open( IO_WriteOnly ) ) {
991 delete mSyncActionDialog;
992 mSyncActionDialog = 0;
993 qDebug("error open cal file ");
994 piFileString = "";
995 emit file_received( false );
996 blockRC = false;
997 return ;
998
999 }
1000
1001 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1002 QTextStream ts ( &file );
1003 ts.setCodec( QTextCodec::codecForName("utf8") );
1004 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1005 ts << piFileString;
1006 mSocket->close();
1007 if ( mSocket->state() == QSocket::Idle )
1008 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1009 file.close();
1010 delete mSyncActionDialog;
1011 mSyncActionDialog = 0;
1012 piFileString = "";
1013 blockRC = false;
1014 emit file_received( true );
1015
1016}
1017
1018KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, const char * name ): QObject( parent, name )
1019{
1020 mPassWord = password;
1021 mSocket = 0;
1022 mPort = port;
1023 mHost = host;
1024
1025 mRetVal = quiet;
1026 mTimerSocket = new QTimer ( this );
1027 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( deleteSocket() ) );
1028}
1029void KCommandSocket::readFile( QString fn )
1030{
1031 if ( !mSocket ) {
1032 mSocket = new QSocket( this );
1033 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1034 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1035 }
1036 mFileString = "";
1037 mFileName = fn;
1038 mFirst = true;
1039 mSocket->connectToHost( mHost, mPort );
1040 QTextStream os( mSocket );
1041 os.setEncoding( QTextStream::UnicodeUTF8 );
1042 os << "GET " << mPassWord << "\r\n";
1043 mTimerSocket->start( 10000 );
1044}
1045
1046void KCommandSocket::writeFile( QString fileName )
1047{
1048 if ( !mSocket ) {
1049 mSocket = new QSocket( this );
1050 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1051 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1052 }
1053 mFileName = fileName ;
1054 mSocket->connectToHost( mHost, mPort );
1055}
1056void KCommandSocket::writeFileToSocket()
1057{
1058 QFile file2( mFileName );
1059 if (!file2.open( IO_ReadOnly ) ) {
1060 mRetVal= errorW;
1061 mSocket->close();
1062 if ( mSocket->state() == QSocket::Idle )
1063 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1064 return ;
1065 }
1066 QTextStream ts2( &file2 );
1067 ts2.setCodec( QTextCodec::codecForName("utf8") );
1068 QTextStream os2( mSocket );
1069 os2.setCodec( QTextCodec::codecForName("utf8") );
1070 os2 << "PUT " << mPassWord << "\r\n";;
1071 while ( ! ts2.atEnd() ) {
1072 os2 << ts2.readLine() << "\n";
1073 }
1074 mRetVal= successW;
1075 file2.close();
1076 mSocket->close();
1077 if ( mSocket->state() == QSocket::Idle )
1078 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1079}
1080void KCommandSocket::sendStop()
1081{
1082 if ( !mSocket ) {
1083 mSocket = new QSocket( this );
1084 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1085 }
1086 mSocket->connectToHost( mHost, mPort );
1087 QTextStream os2( mSocket );
1088 os2.setCodec( QTextCodec::codecForName("utf8") );
1089 os2 << "STOP\r\n";
1090 mSocket->close();
1091 if ( mSocket->state() == QSocket::Idle )
1092 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1093}
1094
1095void KCommandSocket::startReadFileFromSocket()
1096{
1097 if ( ! mFirst )
1098 return;
1099 mFirst = false;
1100 mTimerSocket->stop();
1101 mFileString = "";
1102 mTime.start();
1103 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1104
1105}
1106void KCommandSocket::readFileFromSocket()
1107{
1108 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1109 while ( mSocket->canReadLine () ) {
1110 mTime.restart();
1111 QString line = mSocket->readLine ();
1112 mFileString += line;
1113 //qDebug("readline: %s ", line.latin1());
1114 }
1115 if ( mTime.elapsed () < 3000 ) {
1116 // wait for more
1117 //qDebug("waitformore ");
1118 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1119 return;
1120 }
1121 QString fileName = mFileName;
1122 QFile file ( fileName );
1123 if (!file.open( IO_WriteOnly ) ) {
1124 mFileString = "";
1125 mRetVal = errorR;
1126 qDebug("Error open temp calender file for writing: %s",fileName.latin1() );
1127 deleteSocket();
1128 return ;
1129
1130 }
1131 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1132 QTextStream ts ( &file );
1133 ts.setCodec( QTextCodec::codecForName("utf8") );
1134 ts << mFileString;
1135 file.close();
1136 mFileString = "";
1137 mRetVal = successR;
1138 mSocket->close();
1139 // if state is not idle, deleteSocket(); is called via
1140 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1141 if ( mSocket->state() == QSocket::Idle )
1142 deleteSocket();
1143}
1144
1145void KCommandSocket::deleteSocket()
1146{
1147 if ( mTimerSocket->isActive () ) {
1148 mTimerSocket->stop();
1149 KMessageBox::information( 0, i18n("ERROR:\nConnection to remote host timed out!\nDid you forgot to enable\nsyncing on remote host? "));
1150 mRetVal = errorR;
1151 }
1152 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1153 if ( mSocket)
1154 delete mSocket;
1155 mSocket = 0;
1156 emit commandFinished( this, mRetVal );
1157}
1158
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 6b10016..52e2772 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -11,93 +11,179 @@
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20$Id$ 20$Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qsocket.h>
28#include <qdatetime.h>
29#include <qserversocket.h>
30#include <qtextstream.h>
31#include <qregexp.h>
27 32
28class QPopupMenu; 33class QPopupMenu;
29class KSyncProfile; 34class KSyncProfile;
30class KPimPrefs; 35class KPimPrefs;
31class QWidget; 36class QWidget;
32class KSyncManager; 37class KSyncManager;
33class KSyncInterface; 38class KSyncInterface;
34class QProgressBar; 39class QProgressBar;
35 40
41
42class KServerSocket : public QServerSocket
43{
44 Q_OBJECT
45
46public:
47 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
48
49 void newConnection ( int socket ) ;
50 void setFileName( QString fn ) {mFileName = fn;};
51
52signals:
53 //void sendFile(QSocket*);
54 //void getFile(QSocket*);
55 void file_received( bool );
56 //void file_sent();
57 void saveFile();
58 void endConnect();
59private slots:
60 void discardClient();
61 void readClient();
62 void readBackFileFromSocket();
63 private :
64 bool blockRC;
65 void send_file();
66 void get_file();
67 void end_connect();
68 QDialog* mSyncActionDialog;
69 QSocket* mSocket;
70 QString mPassWord;
71 QString mFileName;
72 QTime piTime;
73 QString piFileString;
74};
75
76class KCommandSocket : public QObject
77{
78 Q_OBJECT
79public:
80 enum state { successR, errorR, successW, errorW, quiet };
81 KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, const char * name=0 );
82 void readFile( QString );
83 void writeFile( QString );
84 void sendStop();
85
86
87signals:
88 void commandFinished( KCommandSocket*, int );
89private slots:
90 void startReadFileFromSocket();
91 void readFileFromSocket();
92 void deleteSocket();
93 void writeFileToSocket();
94 private :
95 QSocket* mSocket;
96 QString mPassWord;
97 Q_UINT16 mPort;
98 QString mHost;
99 QString mFileName;
100 QTimer* mTimerSocket;
101 int mRetVal;
102 QTime mTime;
103 QString mFileString;
104 bool mFirst;
105};
106
107
36class KSyncManager : public QObject 108class KSyncManager : public QObject
37{ 109{
38 Q_OBJECT 110 Q_OBJECT
39 111
40 public: 112 public:
41 enum TargetApp { 113 enum TargetApp {
42 KOPI = 0, 114 KOPI = 0,
43 KAPI = 1, 115 KAPI = 1,
44 PWMPI = 2 }; 116 PWMPI = 2 };
45 117
46 118
47 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 119 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
48 ~KSyncManager() ; 120 ~KSyncManager() ;
49 121
50 bool blockSave() { return mBlockSaveFlag; } 122 bool blockSave() { return mBlockSaveFlag; }
51 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 123 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
52 124 void setDefaultFileName( QString s) { mDefFileName = s ;}
125 QString defaultFileName() { return mDefFileName ;}
126 QString syncFileName();
53 void fillSyncMenu(); 127 void fillSyncMenu();
54 128
55 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 129 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
56 QString getCurrentSyncName() { return mCurrentSyncName; } 130 QString getCurrentSyncName() { return mCurrentSyncName; }
57 131
58 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 132 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
59 void hideProgressBar(); 133 void hideProgressBar();
60 bool isProgressBarCanceled(); 134 bool isProgressBarCanceled();
61 135
62 // sync stuff 136 // sync stuff
63 QString mLocalMachineName; 137 QString mLocalMachineName;
64 QStringList mExternSyncProfiles; 138 QStringList mExternSyncProfiles;
65 QStringList mSyncProfileNames; 139 QStringList mSyncProfileNames;
66 bool mAskForPreferences; 140 bool mAskForPreferences;
67 bool mShowSyncSummary; 141 bool mShowSyncSummary;
68 bool mShowSyncEvents; 142 bool mShowSyncEvents;
69 bool mShowTodoInAgenda; 143 bool mShowTodoInAgenda;
70 bool mWriteBackExistingOnly; 144 bool mWriteBackExistingOnly;
71 int mSyncAlgoPrefs; 145 int mSyncAlgoPrefs;
72 int mRingSyncAlgoPrefs; 146 int mRingSyncAlgoPrefs;
73 bool mWriteBackFile; 147 bool mWriteBackFile;
74 int mWriteBackInFuture; 148 int mWriteBackInFuture;
75 QString mPhoneDevice; 149 QString mPhoneDevice;
76 QString mPhoneConnection; 150 QString mPhoneConnection;
77 QString mPhoneModel; 151 QString mPhoneModel;
78 QString mLastSyncedLocalFile; // save! 152 QString mLastSyncedLocalFile; // save!
153 QString mPassWordPiSync;
154 QString mActiveSyncPort;
155 QString mActiveSyncIP ;
79 156
80 157 signals:
158 void save();
159 void getFile( bool );
81 160
82 public slots: 161 public slots:
83 void slotSyncMenu( int ); 162 void slotSyncMenu( int );
84 163
85 private: 164 private:
86 // LR ******************************* 165 // LR *******************************
87 // sync stuff! 166 // sync stuff!
167 void syncPi();
168 void deleteCommandSocket(KCommandSocket*s, int state);
169 void readFileFromSocket();
170 KServerSocket * mServerSocket;
171 void enableQuick();
172 KPimPrefs* mPrefs;
173 QString mDefFileName;
88 QString mCurrentSyncDevice; 174 QString mCurrentSyncDevice;
89 QString mCurrentSyncName; 175 QString mCurrentSyncName;
90 void quickSyncLocalFile(); 176 void quickSyncLocalFile();
91 bool syncWithFile( QString fn , bool quick ); 177 bool syncWithFile( QString fn , bool quick );
92 void syncLocalFile(); 178 void syncLocalFile();
93 void syncPhone(); 179 void syncPhone();
94 void syncSharp(); 180 void syncSharp();
95 bool syncExternalApplication(QString); 181 bool syncExternalApplication(QString);
96 void multiSync( bool askforPrefs ); 182 void multiSync( bool askforPrefs );
97 int mCurrentSyncProfile ; 183 int mCurrentSyncProfile ;
98 void syncRemote( KSyncProfile* prof, bool ask = true); 184 void syncRemote( KSyncProfile* prof, bool ask = true);
99 void edit_sync_options(); 185 void edit_sync_options();
100 int ringSync(); 186 int ringSync();
101 QString getPassword( ); 187 QString getPassword( );
102 188
103 private slots: 189 private slots:
@@ -109,39 +195,34 @@ class KSyncManager : public QObject
109 195
110 196
111 QWidget* mParent; 197 QWidget* mParent;
112 KSyncInterface* mImplementation; 198 KSyncInterface* mImplementation;
113 TargetApp mTargetApp; 199 TargetApp mTargetApp;
114 QPopupMenu* mSyncMenu; 200 QPopupMenu* mSyncMenu;
115 201
116 QProgressBar* bar; 202 QProgressBar* bar;
117 203
118 204
119 205
120 206
121 207
122}; 208};
123 209
124 210
125class KSyncInterface 211class KSyncInterface
126{ 212{
127 public: 213
214
215 public :
128 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; 216 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
129 217
130 virtual bool syncExternal(KSyncManager* manager, QString resource) 218 virtual bool syncExternal(KSyncManager* manager, QString resource)
131 { 219 {
132 // empty implementation, because some syncable applications do not have an external(sharpdtm) syncmode, like pwmanager. 220 // empty implementation, because some syncable applications do not have an external(sharpdtm) syncmode, like pwmanager.
133 return false; 221 return false;
134 } 222 }
135 223
136 //called by the syncmanager to indicate that the work has to be marked as dirty. 224
137 virtual void sync_setModified() = 0;
138
139 //called by the syncmanager to ask if the dirty flag is set.
140 virtual bool sync_isModified() = 0;
141
142 //called by the syncmanager to indicate that the work has to be saved.
143 virtual void sync_save() = 0;
144}; 225};
145 226
146 227
147#endif 228#endif