summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp33
-rw-r--r--libkdepim/ksyncmanager.cpp186
-rw-r--r--libkdepim/ksyncmanager.h14
-rw-r--r--pwmanager/pwmanager/pwm.cpp22
-rw-r--r--pwmanager/pwmanager/pwm.h1
-rw-r--r--pwmanager/pwmanager/pwmdoc.cpp92
-rw-r--r--pwmanager/pwmanager/pwmdoc.h25
7 files changed, 318 insertions, 55 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index f222234..f8359de 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1073,19 +1073,20 @@ void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1073 } 1073 }
1074 1074
1075} 1075}
1076 1076
1077void KABCore::save() 1077void KABCore::save()
1078{ 1078{
1079 if (syncManager->blockSave()) 1079 if (syncManager->blockSave())
1080 return; 1080 return;
1081 syncManager->setBlockSave(true);
1082 if ( !mModified ) 1081 if ( !mModified )
1083 return; 1082 return;
1083
1084 syncManager->setBlockSave(true);
1084 QString text = i18n( "There was an error while attempting to save\n the " 1085 QString text = i18n( "There was an error while attempting to save\n the "
1085 "address book. Please check that some \nother application is " 1086 "address book. Please check that some \nother application is "
1086 "not using it. " ); 1087 "not using it. " );
1087 statusMessage(i18n("Saving addressbook ... ")); 1088 statusMessage(i18n("Saving addressbook ... "));
1088#ifndef KAB_EMBEDDED 1089#ifndef KAB_EMBEDDED
1089 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1090 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1090 if ( !b || !b->save() ) { 1091 if ( !b || !b->save() ) {
1091 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1092 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
@@ -2329,34 +2330,27 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2329 } 2330 }
2330#endif 2331#endif
2331 2332
2332 //qDebug("*************************** "); 2333 //qDebug("*************************** ");
2333 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2334 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2334 QStringList er = remote->uidList(); 2335 QStringList er = remote->uidList();
2335 Addressee inR ;//= er.first(); 2336 Addressee inR ;//= er.first();
2336 Addressee inL; 2337 Addressee inL;
2337 QProgressBar bar( er.count(),0 ); 2338
2338 bar.setCaption (i18n("Syncing - close to abort!") ); 2339 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2339 2340
2340 int w = 300;
2341 if ( QApplication::desktop()->width() < 320 )
2342 w = 220;
2343 int h = bar.sizeHint().height() ;
2344 int dw = QApplication::desktop()->width();
2345 int dh = QApplication::desktop()->height();
2346 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2347 bar.show();
2348 int modulo = (er.count()/10)+1; 2341 int modulo = (er.count()/10)+1;
2349 int incCounter = 0; 2342 int incCounter = 0;
2350 while ( incCounter < er.count()) { 2343 while ( incCounter < er.count()) {
2351 if ( ! bar.isVisible() ) 2344 if (syncManager->isProgressBarCanceled())
2352 return false; 2345 return false;
2353 if ( incCounter % modulo == 0 ) 2346 if ( incCounter % modulo == 0 )
2354 bar.setProgress( incCounter ); 2347 syncManager->showProgressBar(incCounter);
2348
2355 uid = er[ incCounter ]; 2349 uid = er[ incCounter ];
2356 bool skipIncidence = false; 2350 bool skipIncidence = false;
2357 if ( uid.left(19) == QString("last-syncAddressee-") ) 2351 if ( uid.left(19) == QString("last-syncAddressee-") )
2358 skipIncidence = true; 2352 skipIncidence = true;
2359 QString idS,OidS; 2353 QString idS,OidS;
2360 qApp->processEvents(); 2354 qApp->processEvents();
2361 if ( !skipIncidence ) { 2355 if ( !skipIncidence ) {
2362 inL = local->findByUid( uid ); 2356 inL = local->findByUid( uid );
@@ -2438,26 +2432,25 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2438 } 2432 }
2439 } 2433 }
2440 } 2434 }
2441 ++incCounter; 2435 ++incCounter;
2442 } 2436 }
2443 er.clear(); 2437 er.clear();
2444 QStringList el = local->uidList(); 2438 QStringList el = local->uidList();
2445 modulo = (el.count()/10)+1; 2439 modulo = (el.count()/10)+1;
2446 bar.setCaption (i18n("Add / remove addressees") ); 2440
2447 bar.setTotalSteps ( el.count() ) ; 2441 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2448 bar.show();
2449 incCounter = 0; 2442 incCounter = 0;
2450 while ( incCounter < el.count()) { 2443 while ( incCounter < el.count()) {
2451 qApp->processEvents(); 2444 qApp->processEvents();
2452 if ( ! bar.isVisible() ) 2445 if (syncManager->isProgressBarCanceled())
2453 return false; 2446 return false;
2454 if ( incCounter % modulo == 0 ) 2447 if ( incCounter % modulo == 0 )
2455 bar.setProgress( incCounter ); 2448 syncManager->showProgressBar(incCounter);
2456 uid = el[ incCounter ]; 2449 uid = el[ incCounter ];
2457 bool skipIncidence = false; 2450 bool skipIncidence = false;
2458 if ( uid.left(19) == QString("last-syncAddressee-") ) 2451 if ( uid.left(19) == QString("last-syncAddressee-") )
2459 skipIncidence = true; 2452 skipIncidence = true;
2460 if ( !skipIncidence ) { 2453 if ( !skipIncidence ) {
2461 inL = local->findByUid( uid ); 2454 inL = local->findByUid( uid );
2462 inR = remote->findByUid( uid ); 2455 inR = remote->findByUid( uid );
2463 if ( inR.isEmpty() ) { 2456 if ( inR.isEmpty() ) {
@@ -2494,17 +2487,17 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2494 } 2487 }
2495 } 2488 }
2496 } 2489 }
2497 } 2490 }
2498 } 2491 }
2499 ++incCounter; 2492 ++incCounter;
2500 } 2493 }
2501 el.clear(); 2494 el.clear();
2502 bar.hide(); 2495 syncManager->hideProgressBar();
2503 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2496 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2504 // get rid of micro seconds 2497 // get rid of micro seconds
2505 QTime t = mLastAddressbookSync.time(); 2498 QTime t = mLastAddressbookSync.time();
2506 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2499 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2507 addresseeLSync.setRevision( mLastAddressbookSync ); 2500 addresseeLSync.setRevision( mLastAddressbookSync );
2508 addresseeRSync.setRevision( mLastAddressbookSync ); 2501 addresseeRSync.setRevision( mLastAddressbookSync );
2509 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2502 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2510 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2503 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 87f200a..07e6761 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -29,16 +29,17 @@
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 35
36#include <qdir.h> 36#include <qdir.h>
37#include <qprogressbar.h>
37#include <qpopupmenu.h> 38#include <qpopupmenu.h>
38#include <qpushbutton.h> 39#include <qpushbutton.h>
39#include <qradiobutton.h> 40#include <qradiobutton.h>
40#include <qbuttongroup.h> 41#include <qbuttongroup.h>
41#include <qtimer.h> 42#include <qtimer.h>
42#include <qmessagebox.h> 43#include <qmessagebox.h>
43#include <qapplication.h> 44#include <qapplication.h>
44#include <qlineedit.h> 45#include <qlineedit.h>
@@ -48,22 +49,32 @@
48#include <klocale.h> 49#include <klocale.h>
49#include <kglobal.h> 50#include <kglobal.h>
50#include <kconfig.h> 51#include <kconfig.h>
51#include <kfiledialog.h> 52#include <kfiledialog.h>
52 53
53KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu) 54KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
54 : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mPrefs(prefs), mSyncMenu(syncmenu) 55 : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mPrefs(prefs), mSyncMenu(syncmenu)
55{ 56{
57 bar = new QProgressBar ( 1, 0 );
58 bar->setCaption ("");
59
60 int w = 300;
61 if ( QApplication::desktop()->width() < 320 )
62 w = 220;
63 int h = bar->sizeHint().height() ;
64 int dw = QApplication::desktop()->width();
65 int dh = QApplication::desktop()->height();
66 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
56 67
57} 68}
58 69
59KSyncManager::~KSyncManager() 70KSyncManager::~KSyncManager()
60{ 71{
61 72 delete bar;
62} 73}
63 74
64 75
65void KSyncManager::fillSyncMenu() 76void KSyncManager::fillSyncMenu()
66{ 77{
67 if ( mSyncMenu->count() ) 78 if ( mSyncMenu->count() )
68 mSyncMenu->clear(); 79 mSyncMenu->clear();
69 80
@@ -73,18 +84,18 @@ void KSyncManager::fillSyncMenu()
73 mSyncMenu->insertSeparator(); 84 mSyncMenu->insertSeparator();
74 85
75 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 86 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
76 config.setGroup("General"); 87 config.setGroup("General");
77 QStringList prof = config.readListEntry("SyncProfileNames"); 88 QStringList prof = config.readListEntry("SyncProfileNames");
78 mPrefs->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 89 mPrefs->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
79 if ( prof.count() < 3 ) { 90 if ( prof.count() < 3 ) {
80 prof.clear(); 91 prof.clear();
81 prof << i18n("Sharp_DTM"); 92 prof << i18n("Sharp_DTM");
82 prof << i18n("Local_file"); 93 prof << i18n("Local_file");
83 prof << i18n("Last_file"); 94 prof << i18n("Last_file");
84 KSyncProfile* temp = new KSyncProfile (); 95 KSyncProfile* temp = new KSyncProfile ();
85 temp->setName( prof[0] ); 96 temp->setName( prof[0] );
86 temp->writeConfig(&config); 97 temp->writeConfig(&config);
87 temp->setName( prof[1] ); 98 temp->setName( prof[1] );
88 temp->writeConfig(&config); 99 temp->writeConfig(&config);
89 temp->setName( prof[2] ); 100 temp->setName( prof[2] );
90 temp->writeConfig(&config); 101 temp->writeConfig(&config);
@@ -93,24 +104,27 @@ void KSyncManager::fillSyncMenu()
93 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 104 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
94 config.sync(); 105 config.sync();
95 delete temp; 106 delete temp;
96 } 107 }
97 mPrefs->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 108 mPrefs->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
98 mPrefs->mSyncProfileNames = prof; 109 mPrefs->mSyncProfileNames = prof;
99 unsigned int i; 110 unsigned int i;
100 for ( i = 0; i < prof.count(); ++i ) { 111 for ( i = 0; i < prof.count(); ++i ) {
101
102 mSyncMenu->insertItem( prof[i], 1000+i ); 112 mSyncMenu->insertItem( prof[i], 1000+i );
103 if ( i == 2 ) 113 if ( i == 2 )
104 mSyncMenu->insertSeparator(); 114 mSyncMenu->insertSeparator();
105 } 115 }
106 QDir app_dir; 116 QDir app_dir;
107 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 117 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
108 mSyncMenu->setItemEnabled( false , 1000 ); 118 if ( mTargetApp == PWMPI) {
119 mSyncMenu->removeItem( 1000 );
120 }
121 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
122 mSyncMenu->setItemEnabled( 1000, false );
109 } 123 }
110 //probaly useless 124 //probaly useless
111 //mView->setupExternSyncProfiles(); 125 //mView->setupExternSyncProfiles();
112} 126}
113 127
114void KSyncManager::slotSyncMenu( int action ) 128void KSyncManager::slotSyncMenu( int action )
115{ 129{
116 //qDebug("syncaction %d ", action); 130 //qDebug("syncaction %d ", action);
@@ -156,19 +170,35 @@ void KSyncManager::slotSyncMenu( int action )
156 } else if ( action == 1001 ) { 170 } else if ( action == 1001 ) {
157 syncLocalFile(); 171 syncLocalFile();
158 172
159 } else if ( action == 1002 ) { 173 } else if ( action == 1002 ) {
160 quickSyncLocalFile(); 174 quickSyncLocalFile();
161 175
162 } else if ( action >= 1003 ) { 176 } else if ( action >= 1003 ) {
163 if ( temp->getIsLocalFileSync() ) { 177 if ( temp->getIsLocalFileSync() ) {
164 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 178 switch(mTargetApp)
179 {
180 case (KAPI):
181 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
165 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 182 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
166 183 break;
184 case (KOPI):
185 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
186 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
187 break;
188 case (PWMPI):
189 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
190 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
191 break;
192 default:
193 qDebug("KSyncManager::slotSyncMenu: invalid apptype selected");
194 break;
195
196 }
167 } else { 197 } else {
168 if ( temp->getIsPhoneSync() ) { 198 if ( temp->getIsPhoneSync() ) {
169 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ; 199 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
170 mPrefs->mPhoneConnection = temp->getPhoneConnection( ); 200 mPrefs->mPhoneConnection = temp->getPhoneConnection( );
171 mPrefs->mPhoneModel = temp->getPhoneModel( ); 201 mPrefs->mPhoneModel = temp->getPhoneModel( );
172 syncPhone(); 202 syncPhone();
173 } else 203 } else
174 syncRemote( temp ); 204 syncRemote( temp );
@@ -178,18 +208,36 @@ void KSyncManager::slotSyncMenu( int action )
178 delete temp; 208 delete temp;
179 setBlockSave(false); 209 setBlockSave(false);
180} 210}
181 211
182void KSyncManager::syncLocalFile() 212void KSyncManager::syncLocalFile()
183{ 213{
184 214
185 QString fn =mPrefs->mLastSyncedLocalFile; 215 QString fn =mPrefs->mLastSyncedLocalFile;
186 216 QString ext;
187 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), mParent ); 217
218 switch(mTargetApp)
219 {
220 case (KAPI):
221 ext = "(*.vcf)";
222 break;
223 case (KOPI):
224 ext = "(*.ics/*.vcs)";
225 break;
226 case (PWMPI):
227 ext = "(*.pwm)";
228 break;
229 default:
230 qDebug("KSyncManager::syncLocalFile: invalid apptype selected");
231 break;
232
233 }
234
235 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
188 if ( fn == "" ) 236 if ( fn == "" )
189 return; 237 return;
190 if ( syncWithFile( fn, false ) ) { 238 if ( syncWithFile( fn, false ) ) {
191 qDebug("syncLocalFile() successful "); 239 qDebug("syncLocalFile() successful ");
192 } 240 }
193 241
194} 242}
195bool KSyncManager::syncWithFile( QString fn , bool quick ) 243bool KSyncManager::syncWithFile( QString fn , bool quick )
@@ -279,34 +327,70 @@ int KSyncManager::ringSync()
279 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 327 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
280 QStringList syncProfileNames = mPrefs->mSyncProfileNames; 328 QStringList syncProfileNames = mPrefs->mSyncProfileNames;
281 KSyncProfile* temp = new KSyncProfile (); 329 KSyncProfile* temp = new KSyncProfile ();
282 mPrefs->mAskForPreferences = false; 330 mPrefs->mAskForPreferences = false;
283 for ( i = 0; i < syncProfileNames.count(); ++i ) { 331 for ( i = 0; i < syncProfileNames.count(); ++i ) {
284 mCurrentSyncProfile = i; 332 mCurrentSyncProfile = i;
285 temp->setName(syncProfileNames[mCurrentSyncProfile]); 333 temp->setName(syncProfileNames[mCurrentSyncProfile]);
286 temp->readConfig(&config); 334 temp->readConfig(&config);
287 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 335
336 QString includeInRingSync;
337 switch(mTargetApp)
338 {
339 case (KAPI):
340 includeInRingSync = temp->getIncludeInRingSyncAB();
341 break;
342 case (KOPI):
343 includeInRingSync = temp->getIncludeInRingSync();
344 break;
345 case (PWMPI):
346 includeInRingSync = temp->getIncludeInRingSyncPWM();
347 break;
348 default:
349 qDebug("KSyncManager::ringSync: invalid apptype selected");
350 break;
351
352 }
353
354
355 if ( includeInRingSync && ( i < 1 || i > 2 )) {
288 mParent->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 356 mParent->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
289 ++syncedProfiles; 357 ++syncedProfiles;
290 // mPrefs->mAskForPreferences = temp->getAskForPreferences(); 358 // mPrefs->mAskForPreferences = temp->getAskForPreferences();
291 mPrefs->mWriteBackFile = temp->getWriteBackFile(); 359 mPrefs->mWriteBackFile = temp->getWriteBackFile();
292 mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting(); 360 mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
293 mPrefs->mWriteBackInFuture = 0; 361 mPrefs->mWriteBackInFuture = 0;
294 if ( temp->getWriteBackFuture() ) 362 if ( temp->getWriteBackFuture() )
295 mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 363 mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
296 mPrefs->mShowSyncSummary = false; 364 mPrefs->mShowSyncSummary = false;
297 mCurrentSyncDevice = syncProfileNames[i] ; 365 mCurrentSyncDevice = syncProfileNames[i] ;
298 mCurrentSyncName = mPrefs->mLocalMachineName; 366 mCurrentSyncName = mPrefs->mLocalMachineName;
299 if ( i == 0 ) { 367 if ( i == 0 ) {
300 syncSharp(); 368 syncSharp();
301 } else { 369 } else {
302 if ( temp->getIsLocalFileSync() ) { 370 if ( temp->getIsLocalFileSync() ) {
303 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 371 switch(mTargetApp)
304 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 372 {
373 case (KAPI):
374 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
375 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
376 break;
377 case (KOPI):
378 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
379 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
380 break;
381 case (PWMPI):
382 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
383 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
384 break;
385 default:
386 qDebug("KSyncManager::slotSyncMenu: invalid apptype selected");
387 break;
388 }
305 } else { 389 } else {
306 if ( temp->getIsPhoneSync() ) { 390 if ( temp->getIsPhoneSync() ) {
307 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ; 391 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
308 mPrefs->mPhoneConnection = temp->getPhoneConnection( ); 392 mPrefs->mPhoneConnection = temp->getPhoneConnection( );
309 mPrefs->mPhoneModel = temp->getPhoneModel( ); 393 mPrefs->mPhoneModel = temp->getPhoneModel( );
310 syncPhone(); 394 syncPhone();
311 } else 395 } else
312 syncRemote( temp, false ); 396 syncRemote( temp, false );
@@ -335,63 +419,92 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
335 if ( ask ) { 419 if ( ask ) {
336 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 420 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
337 if ( QMessageBox::information( mParent, i18n("Sync"), 421 if ( QMessageBox::information( mParent, i18n("Sync"),
338 question, 422 question,
339 i18n("Yes"), i18n("No"), 423 i18n("Yes"), i18n("No"),
340 0, 0 ) != 0 ) 424 0, 0 ) != 0 )
341 return; 425 return;
342 } 426 }
343 QString command = prof->getPreSyncCommandAB(); 427
428 QString preCommand;
429 QString localTempFile;
430 QString postCommand;
431
432 switch(mTargetApp)
433 {
434 case (KAPI):
435 preCommand = prof->getPreSyncCommandAB();
436 postCommand = prof->getPostSyncCommandAB();
437 localTempFile = prof->getLocalTempFileAB();
438 break;
439 case (KOPI):
440 preCommand = prof->getPreSyncCommand();
441 postCommand = prof->getPostSyncCommand();
442 localTempFile = prof->getLocalTempFile();
443 break;
444 case (PWMPI):
445 preCommand = prof->getPreSyncCommandPWM();
446 postCommand = prof->getPostSyncCommandPWM();
447 localTempFile = prof->getLocalTempFilePWM();
448 break;
449 default:
450 qDebug("KSyncManager::syncRemote: invalid apptype selected");
451 break;
452 }
453
454
344 int fi; 455 int fi;
345 if ( (fi = command.find("$PWD$")) > 0 ) { 456 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
346 QString pwd = getPassword(); 457 QString pwd = getPassword();
347 command = command.left( fi )+ pwd + command.mid( fi+5 ); 458 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
348 459
349 } 460 }
350 int maxlen = 30; 461 int maxlen = 30;
351 if ( QApplication::desktop()->width() > 320 ) 462 if ( QApplication::desktop()->width() > 320 )
352 maxlen += 25; 463 maxlen += 25;
353 mParent->setCaption ( i18n( "Copy remote file to local machine..." ) ); 464 mParent->setCaption ( i18n( "Copy remote file to local machine..." ) );
354 int fileSize = 0; 465 int fileSize = 0;
355 int result = system ( command ); 466 int result = system ( preCommand );
356 // 0 : okay 467 // 0 : okay
357 // 256: no such file or dir 468 // 256: no such file or dir
358 // 469 //
359 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 470 qDebug("KO: Remote copy result(0 = okay): %d ",result );
360 if ( result != 0 ) { 471 if ( result != 0 ) {
361 unsigned int len = maxlen; 472 unsigned int len = maxlen;
362 while ( len < command.length() ) { 473 while ( len < preCommand.length() ) {
363 command.insert( len , "\n" ); 474 preCommand.insert( len , "\n" );
364 len += maxlen +2; 475 len += maxlen +2;
365 } 476 }
366 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ; 477 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
367 QMessageBox::information( mParent, i18n("Sync - ERROR"), 478 QMessageBox::information( mParent, i18n("Sync - ERROR"),
368 question, 479 question,
369 i18n("Okay!")) ; 480 i18n("Okay!")) ;
370 mParent->setCaption (""); 481 mParent->setCaption ("");
371 return; 482 return;
372 } 483 }
373 mParent->setCaption ( i18n( "Copying succeed." ) ); 484 mParent->setCaption ( i18n( "Copying succeed." ) );
374 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 485 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
375 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 486
487
488
489 if ( syncWithFile( localTempFile, true ) ) {
376// Event* e = mView->getLastSyncEvent(); 490// Event* e = mView->getLastSyncEvent();
377// e->setReadOnly( false ); 491// e->setReadOnly( false );
378// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 492// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
379// e->setReadOnly( true ); 493// e->setReadOnly( true );
380 if ( mPrefs->mWriteBackFile ) { 494 if ( mPrefs->mWriteBackFile ) {
381 command = prof->getPostSyncCommandAB();
382 int fi; 495 int fi;
383 if ( (fi = command.find("$PWD$")) > 0 ) { 496 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
384 QString pwd = getPassword(); 497 QString pwd = getPassword();
385 command = command.left( fi )+ pwd + command.mid( fi+5 ); 498 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
386 499
387 } 500 }
388 mParent->setCaption ( i18n( "Writing back file ..." ) ); 501 mParent->setCaption ( i18n( "Writing back file ..." ) );
389 result = system ( command ); 502 result = system ( postCommand );
390 qDebug("Writing back file result: %d ", result); 503 qDebug("Writing back file result: %d ", result);
391 if ( result != 0 ) { 504 if ( result != 0 ) {
392 mParent->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 505 mParent->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
393 return; 506 return;
394 } else { 507 } else {
395 mParent->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 508 mParent->setCaption ( i18n( "Syncronization sucessfully completed" ) );
396 } 509 }
397 } 510 }
@@ -522,8 +635,31 @@ void KSyncManager::syncPhone()
522 if ( mImplementation->sync_isModified() ) 635 if ( mImplementation->sync_isModified() )
523 mImplementation->sync_save(); 636 mImplementation->sync_save();
524 637
525 qDebug("pending syncPhone(); "); 638 qDebug("pending syncPhone(); ");
526 //mView->syncPhone(); 639 //mView->syncPhone();
527 mImplementation->sync_setModified(); 640 mImplementation->sync_setModified();
528 641
529} 642}
643
644void KSyncManager::showProgressBar(int percentage, QString caption, int total)
645{
646 if (!bar->isVisible())
647 {
648 bar->setCaption (caption);
649 bar->setTotalSteps ( total ) ;
650
651 bar->show();
652 }
653
654 bar->setProgress( percentage );
655}
656
657void KSyncManager::hideProgressBar()
658{
659 bar->hide();
660}
661
662bool KSyncManager::isProgressBarCanceled()
663{
664 return !bar->isVisible();
665}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 389a005..9761107 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -26,16 +26,17 @@ $Id$
26#include <qstring.h> 26#include <qstring.h>
27 27
28class QPopupMenu; 28class QPopupMenu;
29class KSyncProfile; 29class KSyncProfile;
30class KPimPrefs; 30class KPimPrefs;
31class QWidget; 31class QWidget;
32class KSyncManager; 32class KSyncManager;
33class KSyncInterface; 33class KSyncInterface;
34class QProgressBar;
34 35
35class KSyncManager : public QObject 36class KSyncManager : public QObject
36{ 37{
37 Q_OBJECT 38 Q_OBJECT
38 39
39 public: 40 public:
40 enum TargetApp { 41 enum TargetApp {
41 KOPI = 0, 42 KOPI = 0,
@@ -49,16 +50,21 @@ class KSyncManager : public QObject
49 bool blockSave() { return mBlockSaveFlag; } 50 bool blockSave() { return mBlockSaveFlag; }
50 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 51 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
51 52
52 void fillSyncMenu(); 53 void fillSyncMenu();
53 54
54 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 55 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
55 QString getCurrentSyncName() { return mCurrentSyncName; } 56 QString getCurrentSyncName() { return mCurrentSyncName; }
56 57
58 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
59 void hideProgressBar();
60 bool isProgressBarCanceled();
61
62
57 public slots: 63 public slots:
58 void slotSyncMenu( int ); 64 void slotSyncMenu( int );
59 65
60 private: 66 private:
61 // LR ******************************* 67 // LR *******************************
62 // sync stuff! 68 // sync stuff!
63 QString mCurrentSyncDevice; 69 QString mCurrentSyncDevice;
64 QString mCurrentSyncName; 70 QString mCurrentSyncName;
@@ -84,31 +90,35 @@ class KSyncManager : public QObject
84 90
85 91
86 QWidget* mParent; 92 QWidget* mParent;
87 KSyncInterface* mImplementation; 93 KSyncInterface* mImplementation;
88 TargetApp mTargetApp; 94 TargetApp mTargetApp;
89 KPimPrefs* mPrefs; 95 KPimPrefs* mPrefs;
90 QPopupMenu* mSyncMenu; 96 QPopupMenu* mSyncMenu;
91 97
92 98 QProgressBar* bar;
93 99
94 100
95 101
96 102
97 103
98}; 104};
99 105
100 106
101class KSyncInterface 107class KSyncInterface
102{ 108{
103 public: 109 public:
104 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; 110 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
105 virtual bool syncExternal(KSyncManager* manager, QString resource) = 0;
106 111
112 virtual bool syncExternal(KSyncManager* manager, QString resource)
113 {
114 // empty implementation, because some syncable applications do not have an external(sharpdtm) syncmode, like pwmanager.
115 return false;
116 }
107 117
108 //called by the syncmanager to indicate that the work has to be marked as dirty. 118 //called by the syncmanager to indicate that the work has to be marked as dirty.
109 virtual void sync_setModified() = 0; 119 virtual void sync_setModified() = 0;
110 120
111 //called by the syncmanager to ask if the dirty flag is set. 121 //called by the syncmanager to ask if the dirty flag is set.
112 virtual bool sync_isModified() = 0; 122 virtual bool sync_isModified() = 0;
113 123
114 //called by the syncmanager to indicate that the work has to be saved. 124 //called by the syncmanager to indicate that the work has to be saved.
diff --git a/pwmanager/pwmanager/pwm.cpp b/pwmanager/pwmanager/pwm.cpp
index ac2e66e..014e809 100644
--- a/pwmanager/pwmanager/pwm.cpp
+++ b/pwmanager/pwmanager/pwm.cpp
@@ -1317,37 +1317,47 @@ void PwM::createAboutData_slot()
1317 "Ian MacGregor - original documentation author.\n" 1317 "Ian MacGregor - original documentation author.\n"
1318 ); 1318 );
1319} 1319}
1320 1320
1321 1321
1322//this are the overwritten callbackmethods from the syncinterface 1322//this are the overwritten callbackmethods from the syncinterface
1323bool PwM::sync(KSyncManager* manager, QString filename, int mode) 1323bool PwM::sync(KSyncManager* manager, QString filename, int mode)
1324{ 1324{
1325 return true; 1325 PWM_ASSERT(curDoc());
1326}
1327 1326
1328bool PwM::syncExternal(KSyncManager* manager, QString resource) 1327 bool ret = curDoc()->sync(manager, filename, mode);
1329{ 1328
1330 return true; 1329 if (ret == true) {
1330 //US BUG: what can we call here to update the view of the current doc?
1331 //mViewManager->refreshView();
1332 }
1333
1334 return ret;
1331} 1335}
1332 1336
1333//called by the syncmanager to indicate that the work has to marked as dirty. 1337//called by the syncmanager to indicate that the work has to be marked as dirty.
1334void PwM::sync_setModified() 1338void PwM::sync_setModified()
1335{ 1339{
1340 PWM_ASSERT(curDoc());
1341 curDoc()->sync_setModified();
1336} 1342}
1337 1343
1338//called by the syncmanager to ask if the dirty flag is set. 1344//called by the syncmanager to ask if the dirty flag is set.
1339bool PwM::sync_isModified() 1345bool PwM::sync_isModified()
1340{ 1346{
1347 PWM_ASSERT(curDoc());
1348 return curDoc()->sync_isModified();
1341} 1349}
1342 1350
1343//called by the syncmanager to indicate that the work has to be saved. 1351//called by the syncmanager to indicate that the work has to be saved.
1344void PwM::sync_save() 1352void PwM::sync_save()
1345{ 1353{
1354 PWM_ASSERT(curDoc());
1355 return curDoc()->sync_save();
1346} 1356}
1347 1357
1348 1358
1349 1359
1350#endif 1360#endif
1351 1361
1352 1362
1353#ifndef PWM_EMBEDDED 1363#ifndef PWM_EMBEDDED
diff --git a/pwmanager/pwmanager/pwm.h b/pwmanager/pwmanager/pwm.h
index 2fe7352..7c6bf0d 100644
--- a/pwmanager/pwmanager/pwm.h
+++ b/pwmanager/pwmanager/pwm.h
@@ -266,17 +266,16 @@ protected:
266 266
267 267
268 268
269 269
270 private: 270 private:
271#ifdef PWM_EMBEDDED 271#ifdef PWM_EMBEDDED
272 //this are the overwritten callbackmethods from the syncinterface 272 //this are the overwritten callbackmethods from the syncinterface
273 virtual bool sync(KSyncManager* manager, QString filename, int mode); 273 virtual bool sync(KSyncManager* manager, QString filename, int mode);
274 virtual bool syncExternal(KSyncManager* manager, QString resource);
275 274
276 //called by the syncmanager to indicate that the work has to marked as dirty. 275 //called by the syncmanager to indicate that the work has to marked as dirty.
277 virtual void sync_setModified(); 276 virtual void sync_setModified();
278 //called by the syncmanager to ask if the dirty flag is set. 277 //called by the syncmanager to ask if the dirty flag is set.
279 virtual bool sync_isModified(); 278 virtual bool sync_isModified();
280 //called by the syncmanager to indicate that the work has to be saved. 279 //called by the syncmanager to indicate that the work has to be saved.
281 virtual void sync_save(); 280 virtual void sync_save();
282 281
diff --git a/pwmanager/pwmanager/pwmdoc.cpp b/pwmanager/pwmanager/pwmdoc.cpp
index 1b6d36f..82fc746 100644
--- a/pwmanager/pwmanager/pwmdoc.cpp
+++ b/pwmanager/pwmanager/pwmdoc.cpp
@@ -2776,11 +2776,103 @@ bool PwMDoc::tryDelete()
2776out_accept: 2776out_accept:
2777 deleted = true; 2777 deleted = true;
2778 delete this; 2778 delete this;
2779 return true; 2779 return true;
2780out_ignore: 2780out_ignore:
2781 return false; 2781 return false;
2782} 2782}
2783 2783
2784
2785
2786#ifdef PWM_EMBEDDED
2787//US ENH: this is the magic function that syncronizes the this doc with the remote doc
2788PwMerror PwMDoc::syncronize(KSyncManager* manager, PwMDoc* syncLocal , PwMDoc* syncRemote, int mode )
2789{
2790 bool syncOK = true;
2791 int addedPasswordsLocal = 0;
2792 int addedPasswordsRemote = 0;
2793 int deletedPasswordsRemote = 0;
2794 int deletedPasswordsLocal = 0;
2795 int changedLocal = 0;
2796 int changedRemote = 0;
2797
2798 QString mCurrentSyncName = manager->getCurrentSyncName();
2799 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809 return e_success;
2810}
2811
2812
2813
2814//this are the overwritten callbackmethods from the syncinterface
2815bool PwMDoc::sync(KSyncManager* manager, QString filename, int mode)
2816{
2817 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2818
2819 // construct on the stack = automatic cleanup.
2820 PwMDoc syncTarget(this, "synctarget");
2821
2822 PwMerror err = syncTarget.openDoc(&filename, 2 /*== deeplocked*/);
2823
2824 if (err != e_success)
2825 return false;
2826
2827 qDebug("PWM file loaded %s,sync mode %d",filename.latin1(), mode );
2828
2829
2830 err = syncronize(manager, this, &syncTarget, mode );
2831
2832 if (err == e_success) {
2833 if ( PWMPrefs::instance()->mWriteBackFile ){
2834 qDebug("Saving remote PWManager file");
2835 err = syncTarget.saveDoc(conf()->confGlobCompression());
2836 if (err != e_success)
2837 return false;
2838
2839 }
2840
2841 flagDirty();
2842 return true;
2843 }
2844 else {
2845 return false;
2846 }
2847}
2848
2849//called by the syncmanager to indicate that the work has to marked as dirty.
2850void PwMDoc::sync_setModified()
2851{
2852 flagDirty();
2853}
2854
2855//called by the syncmanager to ask if the dirty flag is set.
2856bool PwMDoc::sync_isModified()
2857{
2858 return isDirty();
2859}
2860
2861//called by the syncmanager to indicate that the work has to be saved.
2862void PwMDoc::sync_save()
2863{
2864 PwMerror ret = saveDoc(conf()->confGlobCompression());
2865}
2866
2867#endif
2868
2869
2870
2871
2872
2873
2874
2875
2784#ifndef PWM_EMBEDDED 2876#ifndef PWM_EMBEDDED
2785#include "pwmdoc.moc" 2877#include "pwmdoc.moc"
2786#endif 2878#endif
diff --git a/pwmanager/pwmanager/pwmdoc.h b/pwmanager/pwmanager/pwmdoc.h
index 193247e..ea4d687 100644
--- a/pwmanager/pwmanager/pwmdoc.h
+++ b/pwmanager/pwmanager/pwmdoc.h
@@ -54,16 +54,17 @@
54#include <qdatetime.h> 54#include <qdatetime.h>
55 55
56#include <kprocess.h> 56#include <kprocess.h>
57 57
58#ifndef PWM_EMBEDDED 58#ifndef PWM_EMBEDDED
59#include "configuration.h" 59#include "configuration.h"
60#else 60#else
61#include <kapplication.h> 61#include <kapplication.h>
62#include <ksyncmanager.h>
62#endif 63#endif
63 64
64#include <string> 65#include <string>
65#include <vector> 66#include <vector>
66#include <utility> 67#include <utility>
67 68
68using std::vector; 69using std::vector;
69using std::string; 70using std::string;
@@ -330,17 +331,20 @@ protected:
330 unsigned int mpwLock; 331 unsigned int mpwLock;
331 /** lock counter for the autoLock timer */ 332 /** lock counter for the autoLock timer */
332 unsigned int autoLockLock; 333 unsigned int autoLockLock;
333 /** lock counter for the metaCheck timer */ 334 /** lock counter for the metaCheck timer */
334 unsigned int metaCheckLock; 335 unsigned int metaCheckLock;
335}; 336};
336 337
337/** Document class for PwM */ 338/** Document class for PwM */
338class PwMDoc : public PwMDocUi 339//US ENH: derived from KSyncInterfaces, to get called by PwM when a sync is required.
340// But PwMDoc is handling the sync by itself.
341class PwMDoc : public PwMDocUi, public KSyncInterface
342
339{ 343{
340 Q_OBJECT 344 Q_OBJECT
341 friend class DocTimer; 345 friend class DocTimer;
342 346
343public: 347public:
344 /** construtor */ 348 /** construtor */
345 PwMDoc(QObject* parent = 0, const char *name = 0); 349 PwMDoc(QObject* parent = 0, const char *name = 0);
346 /** destructor */ 350 /** destructor */
@@ -691,11 +695,30 @@ protected:
691 { 695 {
692 currentPw = pw; 696 currentPw = pw;
693 setDocStatFlag(DOC_STAT_DISK_DIRTY); 697 setDocStatFlag(DOC_STAT_DISK_DIRTY);
694 } 698 }
695 /** make a backup-copy of the given file */ 699 /** make a backup-copy of the given file */
696 bool backupFile(const QString &filePath); 700 bool backupFile(const QString &filePath);
697 /** copy a file from src to dst */ 701 /** copy a file from src to dst */
698 bool copyFile(const QString &src, const QString &dst); 702 bool copyFile(const QString &src, const QString &dst);
703
704
705 public:
706#ifdef PWM_EMBEDDED
707 //US ENH: this is the magic function that syncronizes the local doc with the remote doc.
708 PwMerror syncronize(KSyncManager* manager, PwMDoc* syncLocal, PwMDoc* syncRemote, int mode );
709
710
711 //the following methods are the overwritten callbackmethods from the syncinterface
712 virtual bool sync(KSyncManager* manager, QString filename, int mode);
713
714 //called by the syncmanager to indicate that the work has to be marked as dirty.
715 virtual void sync_setModified();
716 //called by the syncmanager to ask if the dirty flag is set.
717 virtual bool sync_isModified();
718 //called by the syncmanager to indicate that the work has to be saved.
719 virtual void sync_save();
720#endif
721
699}; 722};
700 723
701#endif 724#endif