summaryrefslogtreecommitdiffabout
path: root/kaddressbook
authorzautrix <zautrix>2004-09-18 16:07:07 (UTC)
committer zautrix <zautrix>2004-09-18 16:07:07 (UTC)
commitbf18a7b4edb4121fd2ea974ac1ec634167c9b993 (patch) (unidiff)
tree056e62659f8bc5a5b20dc24dcaa73c38f4515cd5 /kaddressbook
parentca8fcf3fd4dc068747d8f31e2189145b22853d55 (diff)
downloadkdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.zip
kdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.tar.gz
kdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.tar.bz2
more AB sync
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp200
-rw-r--r--kaddressbook/kabcore.h1
2 files changed, 166 insertions, 35 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index f497541..226d5e4 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2142,733 +2142,863 @@ void KABCore::fillSyncMenu()
2142 for ( i = 0; i < prof.count(); ++i ) { 2142 for ( i = 0; i < prof.count(); ++i ) {
2143 2143
2144 syncMenu->insertItem( prof[i], 1000+i ); 2144 syncMenu->insertItem( prof[i], 1000+i );
2145 if ( i == 2 ) 2145 if ( i == 2 )
2146 syncMenu->insertSeparator(); 2146 syncMenu->insertSeparator();
2147 } 2147 }
2148 QDir app_dir; 2148 QDir app_dir;
2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
2150 syncMenu->setItemEnabled( false , 1000 ); 2150 syncMenu->setItemEnabled( false , 1000 );
2151 } 2151 }
2152 //probaly useless 2152 //probaly useless
2153 //mView->setupExternSyncProfiles(); 2153 //mView->setupExternSyncProfiles();
2154} 2154}
2155void KABCore::slotSyncMenu( int action ) 2155void KABCore::slotSyncMenu( int action )
2156{ 2156{
2157 //qDebug("syncaction %d ", action); 2157 //qDebug("syncaction %d ", action);
2158 if ( action == 0 ) { 2158 if ( action == 0 ) {
2159 2159
2160 // seems to be a Qt2 event handling bug 2160 // seems to be a Qt2 event handling bug
2161 // syncmenu.clear causes a segfault at first time 2161 // syncmenu.clear causes a segfault at first time
2162 // when we call it after the main event loop, it is ok 2162 // when we call it after the main event loop, it is ok
2163 // same behaviour when calling OM/Pi via QCOP for the first time 2163 // same behaviour when calling OM/Pi via QCOP for the first time
2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
2165 //confSync(); 2165 //confSync();
2166 2166
2167 return; 2167 return;
2168 } 2168 }
2169 if ( action == 1 ) { 2169 if ( action == 1 ) {
2170 multiSync( true ); 2170 multiSync( true );
2171 return; 2171 return;
2172 } 2172 }
2173 2173
2174 if (mBlockSaveFlag) 2174 if (mBlockSaveFlag)
2175 return; 2175 return;
2176 mBlockSaveFlag = true; 2176 mBlockSaveFlag = true;
2177 mCurrentSyncProfile = action - 1000 ; 2177 mCurrentSyncProfile = action - 1000 ;
2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ; 2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ; 2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2181 KSyncProfile* temp = new KSyncProfile (); 2181 KSyncProfile* temp = new KSyncProfile ();
2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2183 temp->readConfig(&config); 2183 temp->readConfig(&config);
2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2188 KABPrefs::instance()->mWriteBackInFuture = 0; 2188 KABPrefs::instance()->mWriteBackInFuture = 0;
2189 if ( temp->getWriteBackFuture() ) 2189 if ( temp->getWriteBackFuture() )
2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
2192 if ( action == 1000 ) { 2192 if ( action == 1000 ) {
2193 syncSharp(); 2193 syncSharp();
2194 2194
2195 } else if ( action == 1001 ) { 2195 } else if ( action == 1001 ) {
2196 syncLocalFile(); 2196 syncLocalFile();
2197 2197
2198 } else if ( action == 1002 ) { 2198 } else if ( action == 1002 ) {
2199 quickSyncLocalFile(); 2199 quickSyncLocalFile();
2200 2200
2201 } else if ( action >= 1003 ) { 2201 } else if ( action >= 1003 ) {
2202 if ( temp->getIsLocalFileSync() ) { 2202 if ( temp->getIsLocalFileSync() ) {
2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2205 } else { 2205 } else {
2206 if ( temp->getIsPhoneSync() ) { 2206 if ( temp->getIsPhoneSync() ) {
2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2210 syncPhone(); 2210 syncPhone();
2211 } else 2211 } else
2212 syncRemote( temp ); 2212 syncRemote( temp );
2213 2213
2214 } 2214 }
2215 } 2215 }
2216 delete temp; 2216 delete temp;
2217 mBlockSaveFlag = false; 2217 mBlockSaveFlag = false;
2218} 2218}
2219 2219
2220void KABCore::syncLocalFile() 2220void KABCore::syncLocalFile()
2221{ 2221{
2222 2222
2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile; 2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
2224 2224
2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
2226 if ( fn == "" ) 2226 if ( fn == "" )
2227 return; 2227 return;
2228 if ( syncWithFile( fn, false ) ) { 2228 if ( syncWithFile( fn, false ) ) {
2229 qDebug("syncLocalFile() successful "); 2229 qDebug("syncLocalFile() successful ");
2230 } 2230 }
2231 2231
2232} 2232}
2233bool KABCore::syncWithFile( QString fn , bool quick ) 2233bool KABCore::syncWithFile( QString fn , bool quick )
2234{ 2234{
2235 bool ret = false; 2235 bool ret = false;
2236 QFileInfo info; 2236 QFileInfo info;
2237 info.setFile( fn ); 2237 info.setFile( fn );
2238 QString mess; 2238 QString mess;
2239 bool loadbup = true; 2239 bool loadbup = true;
2240 if ( !info. exists() ) { 2240 if ( !info. exists() ) {
2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2243 mess ); 2243 mess );
2244 return ret; 2244 return ret;
2245 } 2245 }
2246 int result = 0; 2246 int result = 0;
2247 if ( !quick ) { 2247 if ( !quick ) {
2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2250 mess, 2250 mess,
2251 i18n("Sync"), i18n("Cancel"), 0, 2251 i18n("Sync"), i18n("Cancel"), 0,
2252 0, 1 ); 2252 0, 1 );
2253 if ( result ) 2253 if ( result )
2254 return false; 2254 return false;
2255 } 2255 }
2256 if ( KABPrefs::instance()->mAskForPreferences ) 2256 if ( KABPrefs::instance()->mAskForPreferences )
2257 edit_sync_options(); 2257 edit_sync_options();
2258 if ( result == 0 ) { 2258 if ( result == 0 ) {
2259 //qDebug("Now sycing ... "); 2259 //qDebug("Now sycing ... ");
2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) ) 2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
2261 setCaption( i18n("Synchronization successful") ); 2261 setCaption( i18n("Synchronization successful") );
2262 else 2262 else
2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
2264 if ( ! quick ) 2264 if ( ! quick )
2265 KABPrefs::instance()->mLastSyncedLocalFile = fn; 2265 KABPrefs::instance()->mLastSyncedLocalFile = fn;
2266 setModified(); 2266 setModified();
2267 } 2267 }
2268 return ret; 2268 return ret;
2269} 2269}
2270void KABCore::quickSyncLocalFile() 2270void KABCore::quickSyncLocalFile()
2271{ 2271{
2272 2272
2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) { 2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
2274 qDebug("quick syncLocalFile() successful "); 2274 qDebug("quick syncLocalFile() successful ");
2275 2275
2276 } 2276 }
2277} 2277}
2278void KABCore::multiSync( bool askforPrefs ) 2278void KABCore::multiSync( bool askforPrefs )
2279{ 2279{
2280 if (mBlockSaveFlag) 2280 if (mBlockSaveFlag)
2281 return; 2281 return;
2282 mBlockSaveFlag = true; 2282 mBlockSaveFlag = true;
2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2285 question, 2285 question,
2286 i18n("Yes"), i18n("No"), 2286 i18n("Yes"), i18n("No"),
2287 0, 0 ) != 0 ) { 2287 0, 0 ) != 0 ) {
2288 mBlockSaveFlag = false; 2288 mBlockSaveFlag = false;
2289 setCaption(i18n("Aborted! Nothing synced!")); 2289 setCaption(i18n("Aborted! Nothing synced!"));
2290 return; 2290 return;
2291 } 2291 }
2292 mCurrentSyncDevice = i18n("Multiple profiles") ; 2292 mCurrentSyncDevice = i18n("Multiple profiles") ;
2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs; 2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
2294 if ( askforPrefs ) { 2294 if ( askforPrefs ) {
2295 edit_sync_options(); 2295 edit_sync_options();
2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs; 2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
2297 } 2297 }
2298 setCaption(i18n("Multiple sync started.") ); 2298 setCaption(i18n("Multiple sync started.") );
2299 qApp->processEvents(); 2299 qApp->processEvents();
2300 int num = ringSync() ; 2300 int num = ringSync() ;
2301 if ( num > 1 ) 2301 if ( num > 1 )
2302 ringSync(); 2302 ringSync();
2303 mBlockSaveFlag = false; 2303 mBlockSaveFlag = false;
2304 if ( num ) 2304 if ( num )
2305 save(); 2305 save();
2306 if ( num ) 2306 if ( num )
2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
2308 else 2308 else
2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
2310 return; 2310 return;
2311} 2311}
2312int KABCore::ringSync() 2312int KABCore::ringSync()
2313{ 2313{
2314 int syncedProfiles = 0; 2314 int syncedProfiles = 0;
2315 int i; 2315 int i;
2316 QTime timer; 2316 QTime timer;
2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames; 2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
2319 KSyncProfile* temp = new KSyncProfile (); 2319 KSyncProfile* temp = new KSyncProfile ();
2320 KABPrefs::instance()->mAskForPreferences = false; 2320 KABPrefs::instance()->mAskForPreferences = false;
2321 for ( i = 0; i < syncProfileNames.count(); ++i ) { 2321 for ( i = 0; i < syncProfileNames.count(); ++i ) {
2322 mCurrentSyncProfile = i; 2322 mCurrentSyncProfile = i;
2323 temp->setName(syncProfileNames[mCurrentSyncProfile]); 2323 temp->setName(syncProfileNames[mCurrentSyncProfile]);
2324 temp->readConfig(&config); 2324 temp->readConfig(&config);
2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
2327 ++syncedProfiles; 2327 ++syncedProfiles;
2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2331 KABPrefs::instance()->mWriteBackInFuture = 0; 2331 KABPrefs::instance()->mWriteBackInFuture = 0;
2332 if ( temp->getWriteBackFuture() ) 2332 if ( temp->getWriteBackFuture() )
2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2334 KABPrefs::instance()->mShowSyncSummary = false; 2334 KABPrefs::instance()->mShowSyncSummary = false;
2335 mCurrentSyncDevice = syncProfileNames[i] ; 2335 mCurrentSyncDevice = syncProfileNames[i] ;
2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName; 2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
2337 if ( i == 0 ) { 2337 if ( i == 0 ) {
2338 syncSharp(); 2338 syncSharp();
2339 } else { 2339 } else {
2340 if ( temp->getIsLocalFileSync() ) { 2340 if ( temp->getIsLocalFileSync() ) {
2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2343 } else { 2343 } else {
2344 if ( temp->getIsPhoneSync() ) { 2344 if ( temp->getIsPhoneSync() ) {
2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2348 syncPhone(); 2348 syncPhone();
2349 } else 2349 } else
2350 syncRemote( temp, false ); 2350 syncRemote( temp, false );
2351 2351
2352 } 2352 }
2353 } 2353 }
2354 timer.start(); 2354 timer.start();
2355 setCaption(i18n("Multiple sync in progress ... please wait!") ); 2355 setCaption(i18n("Multiple sync in progress ... please wait!") );
2356 while ( timer.elapsed () < 2000 ) { 2356 while ( timer.elapsed () < 2000 ) {
2357 qApp->processEvents(); 2357 qApp->processEvents();
2358#ifndef _WIN32_ 2358#ifndef _WIN32_
2359 sleep (1); 2359 sleep (1);
2360#endif 2360#endif
2361 } 2361 }
2362 2362
2363 } 2363 }
2364 2364
2365 } 2365 }
2366 delete temp; 2366 delete temp;
2367 return syncedProfiles; 2367 return syncedProfiles;
2368} 2368}
2369 2369
2370void KABCore::syncRemote( KSyncProfile* prof, bool ask) 2370void KABCore::syncRemote( KSyncProfile* prof, bool ask)
2371{ 2371{
2372 QString question; 2372 QString question;
2373 if ( ask ) { 2373 if ( ask ) {
2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2376 question, 2376 question,
2377 i18n("Yes"), i18n("No"), 2377 i18n("Yes"), i18n("No"),
2378 0, 0 ) != 0 ) 2378 0, 0 ) != 0 )
2379 return; 2379 return;
2380 } 2380 }
2381 QString command = prof->getPreSyncCommandAB(); 2381 QString command = prof->getPreSyncCommandAB();
2382 int fi; 2382 int fi;
2383 if ( (fi = command.find("$PWD$")) > 0 ) { 2383 if ( (fi = command.find("$PWD$")) > 0 ) {
2384 QString pwd = getPassword(); 2384 QString pwd = getPassword();
2385 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2385 command = command.left( fi )+ pwd + command.mid( fi+5 );
2386 2386
2387 } 2387 }
2388 int maxlen = 30; 2388 int maxlen = 30;
2389 if ( QApplication::desktop()->width() > 320 ) 2389 if ( QApplication::desktop()->width() > 320 )
2390 maxlen += 25; 2390 maxlen += 25;
2391 setCaption ( i18n( "Copy remote file to local machine..." ) ); 2391 setCaption ( i18n( "Copy remote file to local machine..." ) );
2392 int fileSize = 0; 2392 int fileSize = 0;
2393 int result = system ( command ); 2393 int result = system ( command );
2394 // 0 : okay 2394 // 0 : okay
2395 // 256: no such file or dir 2395 // 256: no such file or dir
2396 // 2396 //
2397 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 2397 qDebug("KO: Remote copy result(0 = okay): %d ",result );
2398 if ( result != 0 ) { 2398 if ( result != 0 ) {
2399 int len = maxlen; 2399 int len = maxlen;
2400 while ( len < command.length() ) { 2400 while ( len < command.length() ) {
2401 command.insert( len , "\n" ); 2401 command.insert( len , "\n" );
2402 len += maxlen +2; 2402 len += maxlen +2;
2403 } 2403 }
2404 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) ; 2404 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) ;
2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), 2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
2406 question, 2406 question,
2407 i18n("Okay!")) ; 2407 i18n("Okay!")) ;
2408 setCaption ("KO/Pi"); 2408 setCaption ("KO/Pi");
2409 return; 2409 return;
2410 } 2410 }
2411 setCaption ( i18n( "Copying succeed." ) ); 2411 setCaption ( i18n( "Copying succeed." ) );
2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
2414// Event* e = mView->getLastSyncEvent(); 2414// Event* e = mView->getLastSyncEvent();
2415// e->setReadOnly( false ); 2415// e->setReadOnly( false );
2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2417// e->setReadOnly( true ); 2417// e->setReadOnly( true );
2418 if ( KABPrefs::instance()->mWriteBackFile ) { 2418 if ( KABPrefs::instance()->mWriteBackFile ) {
2419 command = prof->getPostSyncCommandAB(); 2419 command = prof->getPostSyncCommandAB();
2420 int fi; 2420 int fi;
2421 if ( (fi = command.find("$PWD$")) > 0 ) { 2421 if ( (fi = command.find("$PWD$")) > 0 ) {
2422 QString pwd = getPassword(); 2422 QString pwd = getPassword();
2423 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2423 command = command.left( fi )+ pwd + command.mid( fi+5 );
2424 2424
2425 } 2425 }
2426 setCaption ( i18n( "Writing back file ..." ) ); 2426 setCaption ( i18n( "Writing back file ..." ) );
2427 result = system ( command ); 2427 result = system ( command );
2428 qDebug("KO: Writing back file result: %d ", result); 2428 qDebug("KO: Writing back file result: %d ", result);
2429 if ( result != 0 ) { 2429 if ( result != 0 ) {
2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
2431 return; 2431 return;
2432 } else { 2432 } else {
2433 setCaption ( i18n( "Syncronization sucessfully completed" ) ); 2433 setCaption ( i18n( "Syncronization sucessfully completed" ) );
2434 } 2434 }
2435 } 2435 }
2436 } 2436 }
2437 return; 2437 return;
2438} 2438}
2439#include <qpushbutton.h> 2439#include <qpushbutton.h>
2440#include <qradiobutton.h> 2440#include <qradiobutton.h>
2441#include <qbuttongroup.h> 2441#include <qbuttongroup.h>
2442void KABCore::edit_sync_options() 2442void KABCore::edit_sync_options()
2443{ 2443{
2444 //mDialogManager->showSyncOptions(); 2444 //mDialogManager->showSyncOptions();
2445 //KABPrefs::instance()->mSyncAlgoPrefs 2445 //KABPrefs::instance()->mSyncAlgoPrefs
2446 QDialog dia( this, "dia", true ); 2446 QDialog dia( this, "dia", true );
2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2449 QVBoxLayout lay ( &dia ); 2449 QVBoxLayout lay ( &dia );
2450 lay.setSpacing( 2 ); 2450 lay.setSpacing( 2 );
2451 lay.setMargin( 3 ); 2451 lay.setMargin( 3 );
2452 lay.addWidget(&gr); 2452 lay.addWidget(&gr);
2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2459 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2459 //QRadioButton both( i18n("Take both on conflict"), &gr );
2460 QPushButton pb ( "OK", &dia); 2460 QPushButton pb ( "OK", &dia);
2461 lay.addWidget( &pb ); 2461 lay.addWidget( &pb );
2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) { 2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
2464 case 0: 2464 case 0:
2465 loc.setChecked( true); 2465 loc.setChecked( true);
2466 break; 2466 break;
2467 case 1: 2467 case 1:
2468 rem.setChecked( true ); 2468 rem.setChecked( true );
2469 break; 2469 break;
2470 case 2: 2470 case 2:
2471 newest.setChecked( true); 2471 newest.setChecked( true);
2472 break; 2472 break;
2473 case 3: 2473 case 3:
2474 ask.setChecked( true); 2474 ask.setChecked( true);
2475 break; 2475 break;
2476 case 4: 2476 case 4:
2477 f_loc.setChecked( true); 2477 f_loc.setChecked( true);
2478 break; 2478 break;
2479 case 5: 2479 case 5:
2480 f_rem.setChecked( true); 2480 f_rem.setChecked( true);
2481 break; 2481 break;
2482 case 6: 2482 case 6:
2483 // both.setChecked( true); 2483 // both.setChecked( true);
2484 break; 2484 break;
2485 default: 2485 default:
2486 break; 2486 break;
2487 } 2487 }
2488 if ( dia.exec() ) { 2488 if ( dia.exec() ) {
2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2490 } 2490 }
2491 2491
2492 2492
2493} 2493}
2494QString KABCore::getPassword( ) 2494QString KABCore::getPassword( )
2495{ 2495{
2496 QString retfile = ""; 2496 QString retfile = "";
2497 QDialog dia ( this, "input-dialog", true ); 2497 QDialog dia ( this, "input-dialog", true );
2498 QLineEdit lab ( &dia ); 2498 QLineEdit lab ( &dia );
2499 lab.setEchoMode( QLineEdit::Password ); 2499 lab.setEchoMode( QLineEdit::Password );
2500 QVBoxLayout lay( &dia ); 2500 QVBoxLayout lay( &dia );
2501 lay.setMargin(7); 2501 lay.setMargin(7);
2502 lay.setSpacing(7); 2502 lay.setSpacing(7);
2503 lay.addWidget( &lab); 2503 lay.addWidget( &lab);
2504 dia.setFixedSize( 230,50 ); 2504 dia.setFixedSize( 230,50 );
2505 dia.setCaption( i18n("Enter password") ); 2505 dia.setCaption( i18n("Enter password") );
2506 QPushButton pb ( "OK", &dia); 2506 QPushButton pb ( "OK", &dia);
2507 lay.addWidget( &pb ); 2507 lay.addWidget( &pb );
2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2509 dia.show(); 2509 dia.show();
2510 int res = dia.exec(); 2510 int res = dia.exec();
2511 if ( res ) 2511 if ( res )
2512 retfile = lab.text(); 2512 retfile = lab.text();
2513 dia.hide(); 2513 dia.hide();
2514 qApp->processEvents(); 2514 qApp->processEvents();
2515 return retfile; 2515 return retfile;
2516 2516
2517} 2517}
2518#include <libkcal/syncdefines.h> 2518#include <libkcal/syncdefines.h>
2519 2519
2520KABC::Addressee KABCore::getLastSyncAddressee() 2520KABC::Addressee KABCore::getLastSyncAddressee()
2521{ 2521{
2522 Addressee lse; 2522 Addressee lse;
2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2525 if (lse.isEmpty()) { 2525 if (lse.isEmpty()) {
2526 lse.setUid( "last-syncEvent-"+mCurrentSyncDevice ); 2526 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2527 QString sum = ""; 2528 QString sum = "";
2528 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 2529 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
2529 sum = "E: "; 2530 sum = "E: ";
2530 lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event")); 2531 lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event"));
2531 lse.setRevision( mLastAddressbookSync ); 2532 lse.setRevision( mLastAddressbookSync );
2532 lse.setCategories( i18n("SyncEvent") ); 2533 lse.setCategories( i18n("SyncEvent") );
2533 mAddressBook->insertAddressee( lse ); 2534 mAddressBook->insertAddressee( lse );
2534 } 2535 }
2535 return lse; 2536 return lse;
2536} 2537}
2537 2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{
2540
2541 //void setZaurusId(int id);
2542 // int zaurusId() const;
2543 // void setZaurusUid(int id);
2544 // int zaurusUid() const;
2545 // void setZaurusStat(int id);
2546 // int zaurusStat() const;
2547 // 0 equal
2548 // 1 take local
2549 // 2 take remote
2550 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync;
2552 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2553 bool remCh, locCh;
2554 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2555 //if ( remCh )
2556 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2557 locCh = ( local->revision() > mLastAddressbookSync );
2558 if ( !remCh && ! locCh ) {
2559 //qDebug("both not changed ");
2560 lastSync = local->revision().addDays(1);
2561 } else {
2562 if ( locCh ) {
2563 //qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1());
2564 lastSync = local->revision().addDays( -1 );
2565 if ( !remCh )
2566 remote->setRevision( lastSync.addDays( -1 ) );
2567 } else {
2568 //qDebug(" not loc changed ");
2569 lastSync = local->revision().addDays( 1 );
2570 if ( remCh )
2571 remote->setRevision( lastSync.addDays( 1 ) );
2572
2573 }
2574 }
2575 full = true;
2576 if ( mode < SYNC_PREF_ASK )
2577 mode = SYNC_PREF_ASK;
2578 } else {
2579 if ( local->revision() == remote->revision() )
2580 return 0;
2581
2582 }
2583 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2584
2585 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
2586 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2587 //full = true; //debug only
2588 if ( full ) {
2589 bool equ = ( (*local) == (*remote) );
2590 if ( equ ) {
2591 //qDebug("equal ");
2592 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2593 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2594 }
2595 if ( mode < SYNC_PREF_FORCE_LOCAL )
2596 return 0;
2597
2598 }//else //debug only
2599 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2600 }
2601 int result;
2602 bool localIsNew;
2603 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2604
2605 if ( full && mode < SYNC_PREF_NEWEST )
2606 mode = SYNC_PREF_ASK;
2607
2608 switch( mode ) {
2609 case SYNC_PREF_LOCAL:
2610 if ( lastSync > remote->revision() )
2611 return 1;
2612 if ( lastSync > local->revision() )
2613 return 2;
2614 return 1;
2615 break;
2616 case SYNC_PREF_REMOTE:
2617 if ( lastSync > remote->revision() )
2618 return 1;
2619 if ( lastSync > local->revision() )
2620 return 2;
2621 return 2;
2622 break;
2623 case SYNC_PREF_NEWEST:
2624 if ( local->revision() > remote->revision() )
2625 return 1;
2626 else
2627 return 2;
2628 break;
2629 case SYNC_PREF_ASK:
2630 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() );
2631 if ( lastSync > remote->revision() )
2632 return 1;
2633 if ( lastSync > local->revision() )
2634 return 2;
2635 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() );
2636 localIsNew = local->revision() >= remote->revision();
2637#if 0
2638 if ( localIsNew )
2639 getEventViewerDialog()->setColorMode( 1 );
2640 else
2641 getEventViewerDialog()->setColorMode( 2 );
2642 getEventViewerDialog()->setIncidence(local);
2643 if ( localIsNew )
2644 getEventViewerDialog()->setColorMode( 2 );
2645 else
2646 getEventViewerDialog()->setColorMode( 1 );
2647 getEventViewerDialog()->addIncidence(remote);
2648 getEventViewerDialog()->setColorMode( 0 );
2649 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
2650 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
2651 getEventViewerDialog()->showMe();
2652 result = getEventViewerDialog()->executeS( localIsNew );
2653#endif
2654 qDebug("conflict! ************************************** ");
2655 result = 1;
2656 return result;
2657
2658 break;
2659 case SYNC_PREF_FORCE_LOCAL:
2660 return 1;
2661 break;
2662 case SYNC_PREF_FORCE_REMOTE:
2663 return 2;
2664 break;
2665
2666 default:
2667 // SYNC_PREF_TAKE_BOTH not implemented
2668 break;
2669 }
2670 return 0;
2671}
2538bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2672bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2539{ 2673{
2540 bool syncOK = true; 2674 bool syncOK = true;
2541 int addedAddressee = 0; 2675 int addedAddressee = 0;
2542 int addedAddresseeR = 0; 2676 int addedAddresseeR = 0;
2543 int deletedAddresseeR = 0; 2677 int deletedAddresseeR = 0;
2544 int deletedAddresseeL = 0; 2678 int deletedAddresseeL = 0;
2545 int changedLocal = 0; 2679 int changedLocal = 0;
2546 int changedRemote = 0; 2680 int changedRemote = 0;
2547 //QPtrList<Addressee> el = local->rawAddressees(); 2681 //QPtrList<Addressee> el = local->rawAddressees();
2548 Addressee addresseeR; 2682 Addressee addresseeR;
2549 QString uid; 2683 QString uid;
2550 int take; 2684 int take;
2551 Addressee addresseeL; 2685 Addressee addresseeL;
2552 Addressee addresseeRSync; 2686 Addressee addresseeRSync;
2553 Addressee addresseeLSync; 2687 Addressee addresseeLSync;
2554 KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2688 KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2555 KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2689 KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2556 bool fullDateRange = false; 2690 bool fullDateRange = false;
2557 local->resetTempSyncStat(); 2691 local->resetTempSyncStat();
2558 mLastAddressbookSync = QDateTime::currentDateTime(); 2692 mLastAddressbookSync = QDateTime::currentDateTime();
2559 QDateTime modifiedCalendar = mLastAddressbookSync;; 2693 QDateTime modifiedCalendar = mLastAddressbookSync;;
2560 addresseeLSync = getLastSyncAddressee(); 2694 addresseeLSync = getLastSyncAddressee();
2695 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2561 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2696 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2562 if ( !addresseeR.isEmpty() ) { 2697 if ( !addresseeR.isEmpty() ) {
2563 addresseeRSync = addresseeR; 2698 addresseeRSync = addresseeR;
2564 remote->removeAddressee(addresseeR ); 2699 remote->removeAddressee(addresseeR );
2565 2700
2566 } else { 2701 } else {
2567 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2702 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2568 addresseeRSync = addresseeLSync ; 2703 addresseeRSync = addresseeLSync ;
2569 } else { 2704 } else {
2705 qDebug("FULLDATE 1");
2570 fullDateRange = true; 2706 fullDateRange = true;
2571 Addressee newAdd; 2707 Addressee newAdd;
2572 addresseeRSync = newAdd; 2708 addresseeRSync = newAdd;
2573 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2709 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2574 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2710 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2575 addresseeRSync.setRevision( mLastAddressbookSync ); 2711 addresseeRSync.setRevision( mLastAddressbookSync );
2576 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2712 addresseeRSync.setCategories( i18n("SyncAddressee") );
2577 } 2713 }
2578 } 2714 }
2579 if ( addresseeLSync.revision() == mLastAddressbookSync ) 2715 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2716 qDebug("FULLDATE 2");
2580 fullDateRange = true; 2717 fullDateRange = true;
2718 }
2581 if ( ! fullDateRange ) { 2719 if ( ! fullDateRange ) {
2582 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2720 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2583 2721
2584 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2722 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2585 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2723 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2586 fullDateRange = true; 2724 fullDateRange = true;
2725 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2587 } 2726 }
2588 } 2727 }
2589 if ( fullDateRange ) 2728 if ( fullDateRange )
2590 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2729 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2591 else 2730 else
2592 mLastAddressbookSync = addresseeLSync.revision(); 2731 mLastAddressbookSync = addresseeLSync.revision();
2593 // for resyncing if own file has changed 2732 // for resyncing if own file has changed
2594 // PENDING fixme later when implemented 2733 // PENDING fixme later when implemented
2595#if 0 2734#if 0
2596 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2735 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2597 mLastAddressbookSync = loadedFileVersion; 2736 mLastAddressbookSync = loadedFileVersion;
2598 qDebug("setting mLastAddressbookSync "); 2737 qDebug("setting mLastAddressbookSync ");
2599 } 2738 }
2600#endif 2739#endif
2601 2740
2602 //qDebug("*************************** "); 2741 //qDebug("*************************** ");
2603 qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2742 qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2604 QStringList er = remote->uidList(); 2743 QStringList er = remote->uidList();
2605 Addressee inR ;//= er.first(); 2744 Addressee inR ;//= er.first();
2606 Addressee inL; 2745 Addressee inL;
2607 QProgressBar bar( er.count(),0 ); 2746 QProgressBar bar( er.count(),0 );
2608 bar.setCaption (i18n("Syncing - close to abort!") ); 2747 bar.setCaption (i18n("Syncing - close to abort!") );
2609 2748
2610 int w = 300; 2749 int w = 300;
2611 if ( QApplication::desktop()->width() < 320 ) 2750 if ( QApplication::desktop()->width() < 320 )
2612 w = 220; 2751 w = 220;
2613 int h = bar.sizeHint().height() ; 2752 int h = bar.sizeHint().height() ;
2614 int dw = QApplication::desktop()->width(); 2753 int dw = QApplication::desktop()->width();
2615 int dh = QApplication::desktop()->height(); 2754 int dh = QApplication::desktop()->height();
2616 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2755 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2617 bar.show(); 2756 bar.show();
2618 int modulo = (er.count()/10)+1; 2757 int modulo = (er.count()/10)+1;
2619 int incCounter = 0; 2758 int incCounter = 0;
2620 while ( incCounter < er.count()) { 2759 while ( incCounter < er.count()) {
2621 if ( ! bar.isVisible() ) 2760 if ( ! bar.isVisible() )
2622 return false; 2761 return false;
2623 if ( incCounter % modulo == 0 ) 2762 if ( incCounter % modulo == 0 )
2624 bar.setProgress( incCounter ); 2763 bar.setProgress( incCounter );
2625 uid = er[ incCounter ]; 2764 uid = er[ incCounter ];
2626 bool skipIncidence = false; 2765 bool skipIncidence = false;
2627 if ( uid.left(20) == QString("last-syncAddressee-") ) 2766 if ( uid.left(20) == QString("last-syncAddressee-") )
2628 skipIncidence = true; 2767 skipIncidence = true;
2629 QString idS; 2768 QString idS;
2630 qApp->processEvents(); 2769 qApp->processEvents();
2631 if ( !skipIncidence ) { 2770 if ( !skipIncidence ) {
2632 inL = local->findByUid( uid ); 2771 inL = local->findByUid( uid );
2633 inR = remote->findByUid( uid ); 2772 inR = remote->findByUid( uid );
2634 //inL.setResource( 0 ); 2773 //inL.setResource( 0 );
2635 //inR.setResource( 0 ); 2774 //inR.setResource( 0 );
2636 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2775 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2637 // pending if ( (take = takeAddressee( inL, inR, mode, fullDateRange )) > 0 ) { 2776 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2638 if ( true ) {
2639 //qDebug("take %d %s ", take, inL.summary().latin1()); 2777 //qDebug("take %d %s ", take, inL.summary().latin1());
2640 if ( take == 3 ) 2778 if ( take == 3 )
2641 return false; 2779 return false;
2642 if ( take == 1 ) {// take local 2780 if ( take == 1 ) {// take local
2643 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2644 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2782 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2645 local->insertAddressee( inL ); 2783 local->insertAddressee( inL, false );
2646 } 2784 }
2647 else 2785 else
2648 idS = inR.IDStr(); 2786 idS = inR.IDStr();
2649 remote->removeAddressee( inR ); 2787 remote->removeAddressee( inR );
2650 inR = inL; 2788 inR = inL;
2651 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2789 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2652 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 2790 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
2653 inR.setIDStr( idS ); 2791 inR.setIDStr( idS );
2654 inR.setResource( 0 ); 2792 inR.setResource( 0 );
2655 remote->insertAddressee( inR ); 2793 remote->insertAddressee( inR , false);
2656 ++changedRemote; 2794 ++changedRemote;
2657 } else { 2795 } else {
2658 idS = inL.IDStr(); 2796 idS = inL.IDStr();
2659 local->removeAddressee( inL ); 2797 local->removeAddressee( inL );
2660 inL = inR; 2798 inL = inR;
2661 inL.setIDStr( idS ); 2799 inL.setIDStr( idS );
2662 inL.setResource( 0 ); 2800 inL.setResource( 0 );
2663 local->insertAddressee( inL ); 2801 local->insertAddressee( inL , false );
2664 ++changedLocal; 2802 ++changedLocal;
2665 } 2803 }
2666 } 2804 }
2667 } else { // no conflict 2805 } else { // no conflict
2668 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2806 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2669 QString des = addresseeLSync.note(); 2807 QString des = addresseeLSync.note();
2670 QString pref = "a"; 2808 QString pref = "a";
2671 if ( des.find(pref+ inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2809 if ( des.find(pref+ inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2672 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2810 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2673 ++deletedAddresseeR; 2811 ++deletedAddresseeR;
2674 } else { 2812 } else {
2675 inR.setRevision( modifiedCalendar ); 2813 inR.setRevision( modifiedCalendar );
2676 remote->insertAddressee( inR ); 2814 remote->insertAddressee( inR, false );
2677 inL = inR; 2815 inL = inR;
2678 inL.setResource( 0 ); 2816 inL.setResource( 0 );
2679 local->insertAddressee( inL ); 2817 local->insertAddressee( inL , false);
2680 ++addedAddressee; 2818 ++addedAddressee;
2681 } 2819 }
2682 } else { 2820 } else {
2683 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2821 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2684 inR.setRevision( modifiedCalendar ); 2822 inR.setRevision( modifiedCalendar );
2685 remote->insertAddressee( inR ); 2823 remote->insertAddressee( inR, false );
2686 inR.setResource( 0 ); 2824 inR.setResource( 0 );
2687 local->insertAddressee( inR ); 2825 local->insertAddressee( inR, false );
2688 ++addedAddressee; 2826 ++addedAddressee;
2689 } else { 2827 } else {
2690 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2828 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2691 remote->removeAddressee( inR ); 2829 remote->removeAddressee( inR );
2692 ++deletedAddresseeR; 2830 ++deletedAddresseeR;
2693 } 2831 }
2694 } 2832 }
2695 } 2833 }
2696 } 2834 }
2697 ++incCounter; 2835 ++incCounter;
2698 } 2836 }
2699 er.clear(); 2837 er.clear();
2700 QStringList el = remote->uidList(); 2838 QStringList el = remote->uidList();
2701 modulo = (el.count()/10)+1; 2839 modulo = (el.count()/10)+1;
2702 bar.setCaption (i18n("Add / remove addressees") ); 2840 bar.setCaption (i18n("Add / remove addressees") );
2703 bar.setTotalSteps ( el.count() ) ; 2841 bar.setTotalSteps ( el.count() ) ;
2704 bar.show(); 2842 bar.show();
2705 incCounter = 0; 2843 incCounter = 0;
2706 while ( incCounter < el.count()) { 2844 while ( incCounter < el.count()) {
2707 2845
2708 qApp->processEvents(); 2846 qApp->processEvents();
2709 if ( ! bar.isVisible() ) 2847 if ( ! bar.isVisible() )
2710 return false; 2848 return false;
2711 if ( incCounter % modulo == 0 ) 2849 if ( incCounter % modulo == 0 )
2712 bar.setProgress( incCounter ); 2850 bar.setProgress( incCounter );
2713 uid = el[ incCounter ]; 2851 uid = el[ incCounter ];
2714 bool skipIncidence = false; 2852 bool skipIncidence = false;
2715 if ( uid.left(20) == QString("last-syncAddressee-") ) 2853 if ( uid.left(20) == QString("last-syncAddressee-") )
2716 skipIncidence = true; 2854 skipIncidence = true;
2717 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2855 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2718 skipIncidence = true; 2856 skipIncidence = true;
2719 if ( !skipIncidence ) { 2857 if ( !skipIncidence ) {
2720 inL = local->findByUid( uid ); 2858 inL = local->findByUid( uid );
2721 inR = remote->findByUid( uid ); 2859 inR = remote->findByUid( uid );
2722 if ( inR.isEmpty() ) { 2860 if ( inR.isEmpty() ) {
2723 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2861 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2724 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2862 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2725 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2863 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2726 local->removeAddressee( inL ); 2864 local->removeAddressee( inL );
2727 ++deletedAddresseeL; 2865 ++deletedAddresseeL;
2728 } else { 2866 } else {
2729 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2867 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2730 inL.removeID(mCurrentSyncDevice ); 2868 inL.removeID(mCurrentSyncDevice );
2731 ++addedAddresseeR; 2869 ++addedAddresseeR;
2732 //qDebug("remote added Incidence %s ", inL.summary().latin1()); 2870 //qDebug("remote added Incidence %s ", inL.summary().latin1());
2733 inL.setRevision( modifiedCalendar ); 2871 inL.setRevision( modifiedCalendar );
2734 local->insertAddressee( inL ); 2872 local->insertAddressee( inL, false );
2735 inR = inL; 2873 inR = inL;
2736 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2874 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2737 inR.setResource( 0 ); 2875 inR.setResource( 0 );
2738 remote->insertAddressee( inR ); 2876 remote->insertAddressee( inR, false );
2739 } 2877 }
2740 } 2878 }
2741 } else { 2879 } else {
2742 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2743 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2744 local->removeAddressee( inL ); 2882 local->removeAddressee( inL );
2745 ++deletedAddresseeL; 2883 ++deletedAddresseeL;
2746 } else { 2884 } else {
2747 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2748 ++addedAddresseeR; 2886 ++addedAddresseeR;
2749 inL.setRevision( modifiedCalendar ); 2887 inL.setRevision( modifiedCalendar );
2750 local->insertAddressee( inL ); 2888 local->insertAddressee( inL, false );
2751 inR = inL; 2889 inR = inL;
2752 inR.setResource( 0 ); 2890 inR.setResource( 0 );
2753 remote->insertAddressee( inR ); 2891 remote->insertAddressee( inR, false );
2754 } 2892 }
2755 } 2893 }
2756 } 2894 }
2757 } 2895 }
2758 } 2896 }
2759 ++incCounter; 2897 ++incCounter;
2760 } 2898 }
2761 el.clear(); 2899 el.clear();
2762 int delFut = 0;
2763 2900
2764 #if 0 2901
2765 2902
2766 bar.hide(); 2903 bar.hide();
2767 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2904 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2768 addresseeLSync.setRevision( mLastAddressbookSync ); 2905 addresseeLSync.setRevision( mLastAddressbookSync );
2769 addresseeRSync.setRevision( mLastAddressbookSync ); 2906 addresseeRSync.setRevision( mLastAddressbookSync );
2770 addresseeRSync.setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 2907 addresseeRSync.setGivenName( i18n("Remote from: ")+mCurrentSyncName ) ;
2771 addresseeLSync.setLocation(i18n("Local from: ") + mCurrentSyncName ); 2908 addresseeLSync.setGivenName(i18n("Local from: ") + mCurrentSyncName );
2772 addresseeLSync.setReadOnly( true );
2773 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2909 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2774 remote->addAddressee( addresseeRSync ); 2910 remote->insertAddressee( addresseeRSync, false );
2911 local->insertAddressee( addresseeLSync, false );
2775 QString mes; 2912 QString mes;
2776 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2913 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2777 QString delmess; 2914 if ( KABPrefs::instance()->mShowSyncSummary ) {
2778 if ( delFut ) {
2779 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture );
2780 mes += delmess;
2781 }
2782 if ( KOPrefs::instance()->mShowSyncSummary ) {
2783 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 2915 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
2784 } 2916 }
2785 qDebug( mes ); 2917 qDebug( mes );
2786 mCalendar->checkAlarmForIncidence( 0, true );
2787 return syncOK; 2918 return syncOK;
2788#endif
2789 return false;
2790} 2919}
2920
2791bool KABCore::syncAB(QString filename, int mode) 2921bool KABCore::syncAB(QString filename, int mode)
2792{ 2922{
2793 2923
2794 //pending prepare addresseeview for output 2924 //pending prepare addresseeview for output
2795 //pending detect, if remote file has REV field. if not switch to external sync 2925 //pending detect, if remote file has REV field. if not switch to external sync
2796 mGlobalSyncMode = SYNC_MODE_NORMAL; 2926 mGlobalSyncMode = SYNC_MODE_NORMAL;
2797 AddressBook abLocal(filename,"syncContact"); 2927 AddressBook abLocal(filename,"syncContact");
2798 bool syncOK = false; 2928 bool syncOK = false;
2799 if ( abLocal.load() ) { 2929 if ( abLocal.load() ) {
2800 qDebug("AB loaded %s mode %d",filename.latin1(), mode ); 2930 qDebug("AB loaded %s mode %d",filename.latin1(), mode );
2801 AddressBook::Iterator it; 2931 AddressBook::Iterator it;
2802 QStringList vcards; 2932 //QStringList vcards;
2803 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2933 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2804 qDebug("Name %s ", (*it).familyName().latin1()); 2934 // qDebug("Name %s ", (*it).familyName().latin1());
2805 } 2935 //}
2806 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2936 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2807 if ( syncOK ) { 2937 if ( syncOK ) {
2808 if ( KABPrefs::instance()->mWriteBackFile ) 2938 if ( KABPrefs::instance()->mWriteBackFile )
2809 { 2939 {
2810 qDebug("saving remote AB "); 2940 qDebug("saving remote AB ");
2811 abLocal.saveAB(); 2941 abLocal.saveAB();
2812 } 2942 }
2813 } 2943 }
2814 setModified(); 2944 setModified();
2815 2945
2816 } 2946 }
2817 if ( syncOK ) 2947 if ( syncOK )
2818 mViewManager->refreshView(); 2948 mViewManager->refreshView();
2819 return syncOK; 2949 return syncOK;
2820#if 0 2950#if 0
2821 2951
2822 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2952 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2823 getEventViewerDialog()->setSyncMode( true ); 2953 getEventViewerDialog()->setSyncMode( true );
2824 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2954 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
2825 getEventViewerDialog()->setSyncMode( false ); 2955 getEventViewerDialog()->setSyncMode( false );
2826 if ( syncOK ) { 2956 if ( syncOK ) {
2827 if ( KOPrefs::instance()->mWriteBackFile ) 2957 if ( KOPrefs::instance()->mWriteBackFile )
2828 { 2958 {
2829 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2959 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2830 storage->save(); 2960 storage->save();
2831 } 2961 }
2832 } 2962 }
2833 setModified(); 2963 setModified();
2834 } 2964 }
2835 2965
2836#endif 2966#endif
2837} 2967}
2838 2968
2839 2969
2840void KABCore::confSync() 2970void KABCore::confSync()
2841{ 2971{
2842 static KSyncPrefsDialog* sp = 0; 2972 static KSyncPrefsDialog* sp = 0;
2843 if ( ! sp ) { 2973 if ( ! sp ) {
2844 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 2974 sp = new KSyncPrefsDialog( this, "syncprefs", true );
2845 } 2975 }
2846 sp->usrReadConfig(); 2976 sp->usrReadConfig();
2847#ifndef DESKTOP_VERSION 2977#ifndef DESKTOP_VERSION
2848 sp->showMaximized(); 2978 sp->showMaximized();
2849#else 2979#else
2850 sp->show(); 2980 sp->show();
2851#endif 2981#endif
2852 sp->exec(); 2982 sp->exec();
2853 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 2983 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
2854 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 2984 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
2855 fillSyncMenu(); 2985 fillSyncMenu();
2856} 2986}
2857void KABCore::syncSharp() 2987void KABCore::syncSharp()
2858{ 2988{
2859 if ( mModified ) 2989 if ( mModified )
2860 save(); 2990 save();
2861 qDebug("pending syncSharp() "); 2991 qDebug("pending syncSharp() ");
2862 //mView->syncSharp(); 2992 //mView->syncSharp();
2863 setModified(); 2993 setModified();
2864 2994
2865} 2995}
2866void KABCore::syncPhone() 2996void KABCore::syncPhone()
2867{ 2997{
2868 if ( mModified ) 2998 if ( mModified )
2869 save(); 2999 save();
2870 qDebug("pending syncPhone(); "); 3000 qDebug("pending syncPhone(); ");
2871 //mView->syncPhone(); 3001 //mView->syncPhone();
2872 setModified(); 3002 setModified();
2873 3003
2874} 3004}
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index c67cee6..f01f306 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -93,391 +93,392 @@ class KABCore : public QWidget
93 /** 93 /**
94 Saves the global settings. 94 Saves the global settings.
95 */ 95 */
96 void saveSettings(); 96 void saveSettings();
97 97
98 /** 98 /**
99 Returns a pointer to the StdAddressBook of the application. 99 Returns a pointer to the StdAddressBook of the application.
100 */ 100 */
101 KABC::AddressBook *addressBook() const; 101 KABC::AddressBook *addressBook() const;
102 102
103 /** 103 /**
104 Returns a pointer to the KConfig object of the application. 104 Returns a pointer to the KConfig object of the application.
105 */ 105 */
106 static KConfig *config(); 106 static KConfig *config();
107 107
108 /** 108 /**
109 Returns a pointer to the global KActionCollection object. So 109 Returns a pointer to the global KActionCollection object. So
110 other classes can register their actions easily. 110 other classes can register their actions easily.
111 */ 111 */
112 KActionCollection *actionCollection() const; 112 KActionCollection *actionCollection() const;
113 113
114 /** 114 /**
115 Returns the current search field of the Incremental Search Widget. 115 Returns the current search field of the Incremental Search Widget.
116 */ 116 */
117 KABC::Field *currentSearchField() const; 117 KABC::Field *currentSearchField() const;
118 118
119 /** 119 /**
120 Returns the uid list of the currently selected contacts. 120 Returns the uid list of the currently selected contacts.
121 */ 121 */
122 QStringList selectedUIDs() const; 122 QStringList selectedUIDs() const;
123 123
124 /** 124 /**
125 Displays the ResourceSelectDialog and returns the selected 125 Displays the ResourceSelectDialog and returns the selected
126 resource or a null pointer if no resource was selected by 126 resource or a null pointer if no resource was selected by
127 the user. 127 the user.
128 */ 128 */
129 KABC::Resource *requestResource( QWidget *parent ); 129 KABC::Resource *requestResource( QWidget *parent );
130 130
131#ifndef KAB_EMBEDDED 131#ifndef KAB_EMBEDDED
132 static KAboutData *createAboutData(); 132 static KAboutData *createAboutData();
133#endif //KAB_EMBEDDED 133#endif //KAB_EMBEDDED
134 134
135#ifdef KAB_EMBEDDED 135#ifdef KAB_EMBEDDED
136 inline QPopupMenu* getImportMenu() { return ImportMenu;} 136 inline QPopupMenu* getImportMenu() { return ImportMenu;}
137 inline QPopupMenu* getExportMenu() { return ExportMenu;} 137 inline QPopupMenu* getExportMenu() { return ExportMenu;}
138#endif //KAB_EMBEDDED 138#endif //KAB_EMBEDDED
139 139
140 public slots: 140 public slots:
141#ifdef KAB_EMBEDDED 141#ifdef KAB_EMBEDDED
142 void createAboutData(); 142 void createAboutData();
143#endif //KAB_EMBEDDED 143#endif //KAB_EMBEDDED
144 144
145 void statusMessage(QString, int time = 0 ); 145 void statusMessage(QString, int time = 0 );
146 void showLicence(); 146 void showLicence();
147 void faq(); 147 void faq();
148 148
149 /** 149 /**
150 Is called whenever a contact is selected in the view. 150 Is called whenever a contact is selected in the view.
151 */ 151 */
152 void setContactSelected( const QString &uid ); 152 void setContactSelected( const QString &uid );
153 153
154 /** 154 /**
155 Opens the preferred mail composer with all selected contacts as 155 Opens the preferred mail composer with all selected contacts as
156 arguments. 156 arguments.
157 */ 157 */
158 void sendMail(); 158 void sendMail();
159 159
160 /** 160 /**
161 Opens the preferred mail composer with the given contacts as 161 Opens the preferred mail composer with the given contacts as
162 arguments. 162 arguments.
163 */ 163 */
164 void sendMail( const QString& email ); 164 void sendMail( const QString& email );
165 165
166 166
167 void mailVCard(); 167 void mailVCard();
168 void mailVCard(const QStringList& uids); 168 void mailVCard(const QStringList& uids);
169 169
170 /** 170 /**
171 Beams the "WhoAmI contact. 171 Beams the "WhoAmI contact.
172 */ 172 */
173 void beamMySelf(); 173 void beamMySelf();
174 174
175 void beamVCard(); 175 void beamVCard();
176 void beamVCard(const QStringList& uids); 176 void beamVCard(const QStringList& uids);
177 void beamDone( Ir *ir ); 177 void beamDone( Ir *ir );
178 178
179 179
180 /** 180 /**
181 Starts the preferred web browser with the given URL as argument. 181 Starts the preferred web browser with the given URL as argument.
182 */ 182 */
183 void browse( const QString& url ); 183 void browse( const QString& url );
184 184
185 /** 185 /**
186 Select all contacts in the view. 186 Select all contacts in the view.
187 */ 187 */
188 void selectAllContacts(); 188 void selectAllContacts();
189 189
190 /** 190 /**
191 Deletes all selected contacts from the address book. 191 Deletes all selected contacts from the address book.
192 */ 192 */
193 void deleteContacts(); 193 void deleteContacts();
194 194
195 /** 195 /**
196 Deletes given contacts from the address book. 196 Deletes given contacts from the address book.
197 197
198 @param uids The uids of the contacts, which shall be deleted. 198 @param uids The uids of the contacts, which shall be deleted.
199 */ 199 */
200 void deleteContacts( const QStringList &uids ); 200 void deleteContacts( const QStringList &uids );
201 201
202 /** 202 /**
203 Copys the selected contacts into clipboard for later pasting. 203 Copys the selected contacts into clipboard for later pasting.
204 */ 204 */
205 void copyContacts(); 205 void copyContacts();
206 206
207 /** 207 /**
208 Cuts the selected contacts and stores them for later pasting. 208 Cuts the selected contacts and stores them for later pasting.
209 */ 209 */
210 void cutContacts(); 210 void cutContacts();
211 211
212 /** 212 /**
213 Paste contacts from clipboard into the address book. 213 Paste contacts from clipboard into the address book.
214 */ 214 */
215 void pasteContacts(); 215 void pasteContacts();
216 216
217 /** 217 /**
218 Paste given contacts into the address book. 218 Paste given contacts into the address book.
219 219
220 @param list The list of addressee, which shall be pasted. 220 @param list The list of addressee, which shall be pasted.
221 */ 221 */
222 void pasteContacts( KABC::Addressee::List &list ); 222 void pasteContacts( KABC::Addressee::List &list );
223 223
224 /** 224 /**
225 Sets the whoAmI contact, that is used by many other programs to 225 Sets the whoAmI contact, that is used by many other programs to
226 get personal information about the current user. 226 get personal information about the current user.
227 */ 227 */
228 void setWhoAmI(); 228 void setWhoAmI();
229 229
230 /** 230 /**
231 Displays the category dialog and applies the result to all 231 Displays the category dialog and applies the result to all
232 selected contacts. 232 selected contacts.
233 */ 233 */
234 void setCategories(); 234 void setCategories();
235 235
236 /** 236 /**
237 Sets the field list of the Incremental Search Widget. 237 Sets the field list of the Incremental Search Widget.
238 */ 238 */
239 void setSearchFields( const KABC::Field::List &fields ); 239 void setSearchFields( const KABC::Field::List &fields );
240 240
241 /** 241 /**
242 Search with the current search field for a contact, that matches 242 Search with the current search field for a contact, that matches
243 the given text, and selects it in the view. 243 the given text, and selects it in the view.
244 */ 244 */
245 void incrementalSearch( const QString& text ); 245 void incrementalSearch( const QString& text );
246 246
247 /** 247 /**
248 Marks the address book as modified. 248 Marks the address book as modified.
249 */ 249 */
250 void setModified(); 250 void setModified();
251 /** 251 /**
252 Marks the address book as modified without refreshing the view. 252 Marks the address book as modified without refreshing the view.
253 */ 253 */
254 void setModifiedWOrefresh(); 254 void setModifiedWOrefresh();
255 255
256 /** 256 /**
257 Marks the address book as modified concerning the argument. 257 Marks the address book as modified concerning the argument.
258 */ 258 */
259 void setModified( bool modified ); 259 void setModified( bool modified );
260 260
261 /** 261 /**
262 Returns whether the address book is modified. 262 Returns whether the address book is modified.
263 */ 263 */
264 bool modified() const; 264 bool modified() const;
265 265
266 /** 266 /**
267 Called whenever an contact is modified in the contact editor 267 Called whenever an contact is modified in the contact editor
268 dialog or the quick edit. 268 dialog or the quick edit.
269 */ 269 */
270 void contactModified( const KABC::Addressee &addr ); 270 void contactModified( const KABC::Addressee &addr );
271 271
272 /** 272 /**
273 DCOP METHODS. 273 DCOP METHODS.
274 */ 274 */
275 void addEmail( QString addr ); 275 void addEmail( QString addr );
276 void importVCard( const KURL& url, bool showPreview ); 276 void importVCard( const KURL& url, bool showPreview );
277 void importVCard( const QString& vCard, bool showPreview ); 277 void importVCard( const QString& vCard, bool showPreview );
278 void newContact(); 278 void newContact();
279 QString getNameByPhone( const QString& phone ); 279 QString getNameByPhone( const QString& phone );
280 /** 280 /**
281 END DCOP METHODS 281 END DCOP METHODS
282 */ 282 */
283 283
284 /** 284 /**
285 Saves the contents of the AddressBook back to disk. 285 Saves the contents of the AddressBook back to disk.
286 */ 286 */
287 void save(); 287 void save();
288 288
289 /** 289 /**
290 Undos the last command using the undo stack. 290 Undos the last command using the undo stack.
291 */ 291 */
292 void undo(); 292 void undo();
293 293
294 /** 294 /**
295 Redos the last command that was undone, using the redo stack. 295 Redos the last command that was undone, using the redo stack.
296 */ 296 */
297 void redo(); 297 void redo();
298 298
299 /** 299 /**
300 Shows the edit dialog for the given uid. If the uid is QString::null, 300 Shows the edit dialog for the given uid. If the uid is QString::null,
301 the method will try to find a selected addressee in the view. 301 the method will try to find a selected addressee in the view.
302 */ 302 */
303 void editContact( const QString &uid /*US = QString::null*/ ); 303 void editContact( const QString &uid /*US = QString::null*/ );
304//US added a second method without defaultparameter 304//US added a second method without defaultparameter
305 void editContact2(); 305 void editContact2();
306 306
307 /** 307 /**
308 Shows or edits the detail view for the given uid. If the uid is QString::null, 308 Shows or edits the detail view for the given uid. If the uid is QString::null,
309 the method will try to find a selected addressee in the view. 309 the method will try to find a selected addressee in the view.
310 */ 310 */
311 void executeContact( const QString &uid /*US = QString::null*/ ); 311 void executeContact( const QString &uid /*US = QString::null*/ );
312 312
313 /** 313 /**
314 Launches the configuration dialog. 314 Launches the configuration dialog.
315 */ 315 */
316 void openConfigDialog(); 316 void openConfigDialog();
317 317
318 /** 318 /**
319 Launches the ldap search dialog. 319 Launches the ldap search dialog.
320 */ 320 */
321 void openLDAPDialog(); 321 void openLDAPDialog();
322 322
323 /** 323 /**
324 Creates a KAddressBookPrinter, which will display the print 324 Creates a KAddressBookPrinter, which will display the print
325 dialog and do the printing. 325 dialog and do the printing.
326 */ 326 */
327 void print(); 327 void print();
328 328
329 /** 329 /**
330 Registers a new GUI client, so plugins can register its actions. 330 Registers a new GUI client, so plugins can register its actions.
331 */ 331 */
332 void addGUIClient( KXMLGUIClient *client ); 332 void addGUIClient( KXMLGUIClient *client );
333 333
334 void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid); 334 void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid);
335 void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid); 335 void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid);
336 336
337 337
338 signals: 338 signals:
339 void contactSelected( const QString &name ); 339 void contactSelected( const QString &name );
340 void contactSelected( const QPixmap &pixmap ); 340 void contactSelected( const QPixmap &pixmap );
341 public slots: 341 public slots:
342 void setDetailsVisible( bool visible ); 342 void setDetailsVisible( bool visible );
343 void setDetailsToState(); 343 void setDetailsToState();
344 void slotSyncMenu( int ); 344 void slotSyncMenu( int );
345 private slots: 345 private slots:
346 void setJumpButtonBarVisible( bool visible ); 346 void setJumpButtonBarVisible( bool visible );
347 void importFromOL(); 347 void importFromOL();
348 void extensionModified( const KABC::Addressee::List &list ); 348 void extensionModified( const KABC::Addressee::List &list );
349 void extensionChanged( int id ); 349 void extensionChanged( int id );
350 void clipboardDataChanged(); 350 void clipboardDataChanged();
351 void updateActionMenu(); 351 void updateActionMenu();
352 void configureKeyBindings(); 352 void configureKeyBindings();
353 void removeVoice(); 353 void removeVoice();
354#ifdef KAB_EMBEDDED 354#ifdef KAB_EMBEDDED
355 void configureResources(); 355 void configureResources();
356#endif //KAB_EMBEDDED 356#endif //KAB_EMBEDDED
357 357
358 void slotEditorDestroyed( const QString &uid ); 358 void slotEditorDestroyed( const QString &uid );
359 void configurationChanged(); 359 void configurationChanged();
360 void addressBookChanged(); 360 void addressBookChanged();
361 361
362 private: 362 private:
363 void initGUI(); 363 void initGUI();
364 void initActions(); 364 void initActions();
365 365
366 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent, 366 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent,
367 const char *name = 0 ); 367 const char *name = 0 );
368 368
369 KXMLGUIClient *mGUIClient; 369 KXMLGUIClient *mGUIClient;
370 370
371 KABC::AddressBook *mAddressBook; 371 KABC::AddressBook *mAddressBook;
372 372
373 ViewManager *mViewManager; 373 ViewManager *mViewManager;
374 // QSplitter *mDetailsSplitter; 374 // QSplitter *mDetailsSplitter;
375 KDGanttMinimizeSplitter *mExtensionBarSplitter; 375 KDGanttMinimizeSplitter *mExtensionBarSplitter;
376 ViewContainer *mDetails; 376 ViewContainer *mDetails;
377 KDGanttMinimizeSplitter* mMiniSplitter; 377 KDGanttMinimizeSplitter* mMiniSplitter;
378 XXPortManager *mXXPortManager; 378 XXPortManager *mXXPortManager;
379 JumpButtonBar *mJumpButtonBar; 379 JumpButtonBar *mJumpButtonBar;
380 IncSearchWidget *mIncSearchWidget; 380 IncSearchWidget *mIncSearchWidget;
381 ExtensionManager *mExtensionManager; 381 ExtensionManager *mExtensionManager;
382 382
383 KCMultiDialog *mConfigureDialog; 383 KCMultiDialog *mConfigureDialog;
384 384
385#ifndef KAB_EMBEDDED 385#ifndef KAB_EMBEDDED
386 LDAPSearchDialog *mLdapSearchDialog; 386 LDAPSearchDialog *mLdapSearchDialog;
387#endif //KAB_EMBEDDED 387#endif //KAB_EMBEDDED
388 // QDict<AddresseeEditorDialog> mEditorDict; 388 // QDict<AddresseeEditorDialog> mEditorDict;
389 AddresseeEditorDialog *mEditorDialog; 389 AddresseeEditorDialog *mEditorDialog;
390 bool mReadWrite; 390 bool mReadWrite;
391 bool mModified; 391 bool mModified;
392 bool mIsPart; 392 bool mIsPart;
393 bool mMultipleViewsAtOnce; 393 bool mMultipleViewsAtOnce;
394 394
395 395
396 //US file menu 396 //US file menu
397 KAction *mActionMail; 397 KAction *mActionMail;
398 KAction *mActionBeam; 398 KAction *mActionBeam;
399 KAction* mActionPrint; 399 KAction* mActionPrint;
400 KAction* mActionNewContact; 400 KAction* mActionNewContact;
401 KAction *mActionSave; 401 KAction *mActionSave;
402 KAction *mActionEditAddressee; 402 KAction *mActionEditAddressee;
403 KAction *mActionMailVCard; 403 KAction *mActionMailVCard;
404 KAction *mActionBeamVCard; 404 KAction *mActionBeamVCard;
405 405
406 KAction *mActionQuit; 406 KAction *mActionQuit;
407 407
408 //US edit menu 408 //US edit menu
409 KAction *mActionCopy; 409 KAction *mActionCopy;
410 KAction *mActionCut; 410 KAction *mActionCut;
411 KAction *mActionPaste; 411 KAction *mActionPaste;
412 KAction *mActionSelectAll; 412 KAction *mActionSelectAll;
413 KAction *mActionUndo; 413 KAction *mActionUndo;
414 KAction *mActionRedo; 414 KAction *mActionRedo;
415 KAction *mActionDelete; 415 KAction *mActionDelete;
416 416
417 //US settings menu 417 //US settings menu
418 KAction *mActionConfigResources; 418 KAction *mActionConfigResources;
419 KAction *mActionConfigKAddressbook; 419 KAction *mActionConfigKAddressbook;
420 KAction *mActionConfigShortcuts; 420 KAction *mActionConfigShortcuts;
421 KAction *mActionConfigureToolbars; 421 KAction *mActionConfigureToolbars;
422 KAction *mActionKeyBindings; 422 KAction *mActionKeyBindings;
423 KToggleAction *mActionJumpBar; 423 KToggleAction *mActionJumpBar;
424 KToggleAction *mActionDetails; 424 KToggleAction *mActionDetails;
425 KAction *mActionWhoAmI; 425 KAction *mActionWhoAmI;
426 KAction *mActionCategories; 426 KAction *mActionCategories;
427 KAction *mActionAboutKAddressbook; 427 KAction *mActionAboutKAddressbook;
428 KAction *mActionLicence; 428 KAction *mActionLicence;
429 KAction *mActionFaq; 429 KAction *mActionFaq;
430 430
431 KAction *mActionDeleteView; 431 KAction *mActionDeleteView;
432 432
433 QPopupMenu *viewMenu; 433 QPopupMenu *viewMenu;
434 QPopupMenu *filterMenu; 434 QPopupMenu *filterMenu;
435 QPopupMenu *settingsMenu; 435 QPopupMenu *settingsMenu;
436 QPopupMenu *changeMenu; 436 QPopupMenu *changeMenu;
437//US QAction *mActionSave; 437//US QAction *mActionSave;
438 QPopupMenu *ImportMenu; 438 QPopupMenu *ImportMenu;
439 QPopupMenu *ExportMenu; 439 QPopupMenu *ExportMenu;
440 //LR additional methods 440 //LR additional methods
441 KAction *mActionRemoveVoice; 441 KAction *mActionRemoveVoice;
442 KAction * mActionImportOL; 442 KAction * mActionImportOL;
443 443
444#ifndef KAB_EMBEDDED 444#ifndef KAB_EMBEDDED
445 KAddressBookService *mAddressBookService; 445 KAddressBookService *mAddressBookService;
446#endif //KAB_EMBEDDED 446#endif //KAB_EMBEDDED
447 447
448 class KABCorePrivate; 448 class KABCorePrivate;
449 KABCorePrivate *d; 449 KABCorePrivate *d;
450 bool mBlockSaveFlag; 450 bool mBlockSaveFlag;
451 451
452#ifdef KAB_EMBEDDED 452#ifdef KAB_EMBEDDED
453 KAddressBookMain *mMainWindow; // should be the same like mGUIClient 453 KAddressBookMain *mMainWindow; // should be the same like mGUIClient
454#endif //KAB_EMBEDDED 454#endif //KAB_EMBEDDED
455 // LR ******************************* 455 // LR *******************************
456 // sync stuff! 456 // sync stuff!
457 QPopupMenu *syncMenu; 457 QPopupMenu *syncMenu;
458 void fillSyncMenu(); 458 void fillSyncMenu();
459 QString mCurrentSyncDevice; 459 QString mCurrentSyncDevice;
460 QString mCurrentSyncName; 460 QString mCurrentSyncName;
461 void quickSyncLocalFile(); 461 void quickSyncLocalFile();
462 bool syncWithFile( QString fn , bool quick ); 462 bool syncWithFile( QString fn , bool quick );
463 void KABCore::syncLocalFile(); 463 void KABCore::syncLocalFile();
464 void KABCore::syncPhone(); 464 void KABCore::syncPhone();
465 void KABCore::syncSharp(); 465 void KABCore::syncSharp();
466 void multiSync( bool askforPrefs ); 466 void multiSync( bool askforPrefs );
467 int mCurrentSyncProfile ; 467 int mCurrentSyncProfile ;
468 void syncRemote( KSyncProfile* prof, bool ask = true); 468 void syncRemote( KSyncProfile* prof, bool ask = true);
469 void edit_sync_options(); 469 void edit_sync_options();
470 bool syncAB(QString filename, int mode); 470 bool syncAB(QString filename, int mode);
471 int ringSync(); 471 int ringSync();
472 QString getPassword( ); 472 QString getPassword( );
473 int mGlobalSyncMode; 473 int mGlobalSyncMode;
474 bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode); 474 bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
475 KABC::Addressee getLastSyncAddressee(); 475 KABC::Addressee getLastSyncAddressee();
476 QDateTime mLastAddressbookSync; 476 QDateTime mLastAddressbookSync;
477 int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
477 public slots: 478 public slots:
478 void confSync(); 479 void confSync();
479 // ********************* 480 // *********************
480 481
481}; 482};
482 483
483#endif 484#endif