summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp9
-rw-r--r--kaddressbook/kabcore.cpp3
2 files changed, 10 insertions, 2 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 3ec0795..d03dea3 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -79,700 +79,705 @@ AddressBook::Iterator::Iterator( const AddressBook::Iterator &i )
79{ 79{
80 d = new IteratorData; 80 d = new IteratorData;
81 d->mIt = i.d->mIt; 81 d->mIt = i.d->mIt;
82} 82}
83 83
84AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i ) 84AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i )
85{ 85{
86 if( this == &i ) return *this; // guard against self assignment 86 if( this == &i ) return *this; // guard against self assignment
87 delete d; // delete the old data the Iterator was completely constructed before 87 delete d; // delete the old data the Iterator was completely constructed before
88 d = new IteratorData; 88 d = new IteratorData;
89 d->mIt = i.d->mIt; 89 d->mIt = i.d->mIt;
90 return *this; 90 return *this;
91} 91}
92 92
93AddressBook::Iterator::~Iterator() 93AddressBook::Iterator::~Iterator()
94{ 94{
95 delete d; 95 delete d;
96} 96}
97 97
98const Addressee &AddressBook::Iterator::operator*() const 98const Addressee &AddressBook::Iterator::operator*() const
99{ 99{
100 return *(d->mIt); 100 return *(d->mIt);
101} 101}
102 102
103Addressee &AddressBook::Iterator::operator*() 103Addressee &AddressBook::Iterator::operator*()
104{ 104{
105 return *(d->mIt); 105 return *(d->mIt);
106} 106}
107 107
108Addressee *AddressBook::Iterator::operator->() 108Addressee *AddressBook::Iterator::operator->()
109{ 109{
110 return &(*(d->mIt)); 110 return &(*(d->mIt));
111} 111}
112 112
113AddressBook::Iterator &AddressBook::Iterator::operator++() 113AddressBook::Iterator &AddressBook::Iterator::operator++()
114{ 114{
115 (d->mIt)++; 115 (d->mIt)++;
116 return *this; 116 return *this;
117} 117}
118 118
119AddressBook::Iterator &AddressBook::Iterator::operator++(int) 119AddressBook::Iterator &AddressBook::Iterator::operator++(int)
120{ 120{
121 (d->mIt)++; 121 (d->mIt)++;
122 return *this; 122 return *this;
123} 123}
124 124
125AddressBook::Iterator &AddressBook::Iterator::operator--() 125AddressBook::Iterator &AddressBook::Iterator::operator--()
126{ 126{
127 (d->mIt)--; 127 (d->mIt)--;
128 return *this; 128 return *this;
129} 129}
130 130
131AddressBook::Iterator &AddressBook::Iterator::operator--(int) 131AddressBook::Iterator &AddressBook::Iterator::operator--(int)
132{ 132{
133 (d->mIt)--; 133 (d->mIt)--;
134 return *this; 134 return *this;
135} 135}
136 136
137bool AddressBook::Iterator::operator==( const Iterator &it ) 137bool AddressBook::Iterator::operator==( const Iterator &it )
138{ 138{
139 return ( d->mIt == it.d->mIt ); 139 return ( d->mIt == it.d->mIt );
140} 140}
141 141
142bool AddressBook::Iterator::operator!=( const Iterator &it ) 142bool AddressBook::Iterator::operator!=( const Iterator &it )
143{ 143{
144 return ( d->mIt != it.d->mIt ); 144 return ( d->mIt != it.d->mIt );
145} 145}
146 146
147 147
148AddressBook::ConstIterator::ConstIterator() 148AddressBook::ConstIterator::ConstIterator()
149{ 149{
150 d = new ConstIteratorData; 150 d = new ConstIteratorData;
151} 151}
152 152
153AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i ) 153AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i )
154{ 154{
155 d = new ConstIteratorData; 155 d = new ConstIteratorData;
156 d->mIt = i.d->mIt; 156 d->mIt = i.d->mIt;
157} 157}
158 158
159AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i ) 159AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i )
160{ 160{
161 if( this == &i ) return *this; // guard for self assignment 161 if( this == &i ) return *this; // guard for self assignment
162 delete d; // delete the old data because the Iterator was really constructed before 162 delete d; // delete the old data because the Iterator was really constructed before
163 d = new ConstIteratorData; 163 d = new ConstIteratorData;
164 d->mIt = i.d->mIt; 164 d->mIt = i.d->mIt;
165 return *this; 165 return *this;
166} 166}
167 167
168AddressBook::ConstIterator::~ConstIterator() 168AddressBook::ConstIterator::~ConstIterator()
169{ 169{
170 delete d; 170 delete d;
171} 171}
172 172
173const Addressee &AddressBook::ConstIterator::operator*() const 173const Addressee &AddressBook::ConstIterator::operator*() const
174{ 174{
175 return *(d->mIt); 175 return *(d->mIt);
176} 176}
177 177
178const Addressee* AddressBook::ConstIterator::operator->() const 178const Addressee* AddressBook::ConstIterator::operator->() const
179{ 179{
180 return &(*(d->mIt)); 180 return &(*(d->mIt));
181} 181}
182 182
183AddressBook::ConstIterator &AddressBook::ConstIterator::operator++() 183AddressBook::ConstIterator &AddressBook::ConstIterator::operator++()
184{ 184{
185 (d->mIt)++; 185 (d->mIt)++;
186 return *this; 186 return *this;
187} 187}
188 188
189AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int) 189AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int)
190{ 190{
191 (d->mIt)++; 191 (d->mIt)++;
192 return *this; 192 return *this;
193} 193}
194 194
195AddressBook::ConstIterator &AddressBook::ConstIterator::operator--() 195AddressBook::ConstIterator &AddressBook::ConstIterator::operator--()
196{ 196{
197 (d->mIt)--; 197 (d->mIt)--;
198 return *this; 198 return *this;
199} 199}
200 200
201AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int) 201AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int)
202{ 202{
203 (d->mIt)--; 203 (d->mIt)--;
204 return *this; 204 return *this;
205} 205}
206 206
207bool AddressBook::ConstIterator::operator==( const ConstIterator &it ) 207bool AddressBook::ConstIterator::operator==( const ConstIterator &it )
208{ 208{
209 return ( d->mIt == it.d->mIt ); 209 return ( d->mIt == it.d->mIt );
210} 210}
211 211
212bool AddressBook::ConstIterator::operator!=( const ConstIterator &it ) 212bool AddressBook::ConstIterator::operator!=( const ConstIterator &it )
213{ 213{
214 return ( d->mIt != it.d->mIt ); 214 return ( d->mIt != it.d->mIt );
215} 215}
216 216
217 217
218AddressBook::AddressBook() 218AddressBook::AddressBook()
219{ 219{
220 init(0, "contact"); 220 init(0, "contact");
221} 221}
222 222
223AddressBook::AddressBook( const QString &config ) 223AddressBook::AddressBook( const QString &config )
224{ 224{
225 init(config, "contact"); 225 init(config, "contact");
226} 226}
227 227
228AddressBook::AddressBook( const QString &config, const QString &family ) 228AddressBook::AddressBook( const QString &config, const QString &family )
229{ 229{
230 init(config, family); 230 init(config, family);
231 231
232} 232}
233 233
234// the default family is "contact" 234// the default family is "contact"
235void AddressBook::init(const QString &config, const QString &family ) 235void AddressBook::init(const QString &config, const QString &family )
236{ 236{
237 d = new AddressBookData; 237 d = new AddressBookData;
238 QString fami = family; 238 QString fami = family;
239 qDebug("new ab "); 239 qDebug("new ab ");
240 if (config != 0) { 240 if (config != 0) {
241 qDebug("config != 0 "); 241 qDebug("config != 0 ");
242 if ( family == "syncContact" ) { 242 if ( family == "syncContact" ) {
243 qDebug("creating sync config "); 243 qDebug("creating sync config ");
244 fami = "contact"; 244 fami = "contact";
245 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") ); 245 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") );
246 con->setGroup( "General" ); 246 con->setGroup( "General" );
247 con->writeEntry( "ResourceKeys", QString("sync") ); 247 con->writeEntry( "ResourceKeys", QString("sync") );
248 con->writeEntry( "Standard", QString("sync") ); 248 con->writeEntry( "Standard", QString("sync") );
249 con->setGroup( "Resource_sync" ); 249 con->setGroup( "Resource_sync" );
250 con->writeEntry( "FileFormat", QString("vcard") ); 250 con->writeEntry( "FileFormat", QString("vcard") );
251 con->writeEntry( "FileName", config ); 251 con->writeEntry( "FileName", config );
252 con->writeEntry( "ResourceIdentifier", QString("sync") ); 252 con->writeEntry( "ResourceIdentifier", QString("sync") );
253 con->writeEntry( "ResourceName", QString("sync_res") ); 253 con->writeEntry( "ResourceName", QString("sync_res") );
254 con->writeEntry( "ResourceType", QString("file") ); 254 con->writeEntry( "ResourceType", QString("file") );
255 //con->sync(); 255 //con->sync();
256 d->mConfig = con; 256 d->mConfig = con;
257 } 257 }
258 else 258 else
259 d->mConfig = new KConfig( locateLocal("config", config) ); 259 d->mConfig = new KConfig( locateLocal("config", config) );
260// qDebug("AddressBook::init 1 config=%s",config.latin1() ); 260// qDebug("AddressBook::init 1 config=%s",config.latin1() );
261 } 261 }
262 else { 262 else {
263 d->mConfig = 0; 263 d->mConfig = 0;
264// qDebug("AddressBook::init 1 config=0"); 264// qDebug("AddressBook::init 1 config=0");
265 } 265 }
266 266
267//US d->mErrorHandler = 0; 267//US d->mErrorHandler = 0;
268 d->mManager = new KRES::Manager<Resource>( fami, false ); 268 d->mManager = new KRES::Manager<Resource>( fami, false );
269 d->mManager->readConfig( d->mConfig ); 269 d->mManager->readConfig( d->mConfig );
270 if ( family == "syncContact" ) { 270 if ( family == "syncContact" ) {
271 KRES::Manager<Resource> *manager = d->mManager; 271 KRES::Manager<Resource> *manager = d->mManager;
272 KRES::Manager<Resource>::ActiveIterator it; 272 KRES::Manager<Resource>::ActiveIterator it;
273 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 273 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
274 (*it)->setAddressBook( this ); 274 (*it)->setAddressBook( this );
275 if ( !(*it)->open() ) 275 if ( !(*it)->open() )
276 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); 276 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
277 } 277 }
278 Resource *res = standardResource(); 278 Resource *res = standardResource();
279 if ( !res ) { 279 if ( !res ) {
280 qDebug("ERROR: no standard resource"); 280 qDebug("ERROR: no standard resource");
281 res = manager->createResource( "file" ); 281 res = manager->createResource( "file" );
282 if ( res ) 282 if ( res )
283 { 283 {
284 addResource( res ); 284 addResource( res );
285 } 285 }
286 else 286 else
287 qDebug(" No resource available!!!"); 287 qDebug(" No resource available!!!");
288 } 288 }
289 setStandardResource( res ); 289 setStandardResource( res );
290 manager->writeConfig(); 290 manager->writeConfig();
291 } 291 }
292 addCustomField( i18n( "Department" ), KABC::Field::Organization, 292 addCustomField( i18n( "Department" ), KABC::Field::Organization,
293 "X-Department", "KADDRESSBOOK" ); 293 "X-Department", "KADDRESSBOOK" );
294 addCustomField( i18n( "Profession" ), KABC::Field::Organization, 294 addCustomField( i18n( "Profession" ), KABC::Field::Organization,
295 "X-Profession", "KADDRESSBOOK" ); 295 "X-Profession", "KADDRESSBOOK" );
296 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 296 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
297 "X-AssistantsName", "KADDRESSBOOK" ); 297 "X-AssistantsName", "KADDRESSBOOK" );
298 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 298 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
299 "X-ManagersName", "KADDRESSBOOK" ); 299 "X-ManagersName", "KADDRESSBOOK" );
300 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 300 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
301 "X-SpousesName", "KADDRESSBOOK" ); 301 "X-SpousesName", "KADDRESSBOOK" );
302 addCustomField( i18n( "Office" ), KABC::Field::Personal, 302 addCustomField( i18n( "Office" ), KABC::Field::Personal,
303 "X-Office", "KADDRESSBOOK" ); 303 "X-Office", "KADDRESSBOOK" );
304 addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 304 addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
305 "X-IMAddress", "KADDRESSBOOK" ); 305 "X-IMAddress", "KADDRESSBOOK" );
306 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 306 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
307 "X-Anniversary", "KADDRESSBOOK" ); 307 "X-Anniversary", "KADDRESSBOOK" );
308 308
309 //US added this field to become compatible with Opie/qtopia addressbook 309 //US added this field to become compatible with Opie/qtopia addressbook
310 // values can be "female" or "male" or "". An empty field represents undefined. 310 // values can be "female" or "male" or "". An empty field represents undefined.
311 addCustomField( i18n( "Gender" ), KABC::Field::Personal, 311 addCustomField( i18n( "Gender" ), KABC::Field::Personal,
312 "X-Gender", "KADDRESSBOOK" ); 312 "X-Gender", "KADDRESSBOOK" );
313 addCustomField( i18n( "Children" ), KABC::Field::Personal, 313 addCustomField( i18n( "Children" ), KABC::Field::Personal,
314 "X-Children", "KADDRESSBOOK" ); 314 "X-Children", "KADDRESSBOOK" );
315 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 315 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
316 "X-FreeBusyUrl", "KADDRESSBOOK" ); 316 "X-FreeBusyUrl", "KADDRESSBOOK" );
317 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal, 317 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal,
318 "X-ExternalID", "KADDRESSBOOK" ); 318 "X-ExternalID", "KADDRESSBOOK" );
319} 319}
320 320
321AddressBook::~AddressBook() 321AddressBook::~AddressBook()
322{ 322{
323 delete d->mConfig; d->mConfig = 0; 323 delete d->mConfig; d->mConfig = 0;
324 delete d->mManager; d->mManager = 0; 324 delete d->mManager; d->mManager = 0;
325//US delete d->mErrorHandler; d->mErrorHandler = 0; 325//US delete d->mErrorHandler; d->mErrorHandler = 0;
326 delete d; d = 0; 326 delete d; d = 0;
327} 327}
328 328
329bool AddressBook::load() 329bool AddressBook::load()
330{ 330{
331 331
332 332
333 clear(); 333 clear();
334 334
335 KRES::Manager<Resource>::ActiveIterator it; 335 KRES::Manager<Resource>::ActiveIterator it;
336 bool ok = true; 336 bool ok = true;
337 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 337 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
338 if ( !(*it)->load() ) { 338 if ( !(*it)->load() ) {
339 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) ); 339 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) );
340 ok = false; 340 ok = false;
341 } 341 }
342 342
343 // mark all addressees as unchanged 343 // mark all addressees as unchanged
344 Addressee::List::Iterator addrIt; 344 Addressee::List::Iterator addrIt;
345 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) 345 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt )
346 (*addrIt).setChanged( false ); 346 (*addrIt).setChanged( false );
347 347
348 return ok; 348 return ok;
349} 349}
350 350
351bool AddressBook::save( Ticket *ticket ) 351bool AddressBook::save( Ticket *ticket )
352{ 352{
353 kdDebug(5700) << "AddressBook::save()"<< endl; 353 kdDebug(5700) << "AddressBook::save()"<< endl;
354 354
355 if ( ticket->resource() ) { 355 if ( ticket->resource() ) {
356 deleteRemovedAddressees(); 356 deleteRemovedAddressees();
357 return ticket->resource()->save( ticket ); 357 return ticket->resource()->save( ticket );
358 } 358 }
359 359
360 return false; 360 return false;
361} 361}
362bool AddressBook::saveAB() 362bool AddressBook::saveAB()
363{ 363{
364 bool ok = true; 364 bool ok = true;
365 365
366 deleteRemovedAddressees(); 366 deleteRemovedAddressees();
367 367
368 KRES::Manager<Resource>::ActiveIterator it; 368 KRES::Manager<Resource>::ActiveIterator it;
369 KRES::Manager<Resource> *manager = d->mManager; 369 KRES::Manager<Resource> *manager = d->mManager;
370 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 370 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
371 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 371 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
372 Ticket *ticket = requestSaveTicket( *it ); 372 Ticket *ticket = requestSaveTicket( *it );
373// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 373// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
374 if ( !ticket ) { 374 if ( !ticket ) {
375 error( i18n( "Unable to save to resource '%1'. It is locked." ) 375 error( i18n( "Unable to save to resource '%1'. It is locked." )
376 .arg( (*it)->resourceName() ) ); 376 .arg( (*it)->resourceName() ) );
377 return false; 377 return false;
378 } 378 }
379 379
380 //if ( !save( ticket ) ) 380 //if ( !save( ticket ) )
381 if ( ticket->resource() ) { 381 if ( ticket->resource() ) {
382 if ( ! ticket->resource()->save( ticket ) ) 382 if ( ! ticket->resource()->save( ticket ) )
383 ok = false; 383 ok = false;
384 } else 384 } else
385 ok = false; 385 ok = false;
386 386
387 } 387 }
388 } 388 }
389 return ok; 389 return ok;
390} 390}
391 391
392AddressBook::Iterator AddressBook::begin() 392AddressBook::Iterator AddressBook::begin()
393{ 393{
394 Iterator it = Iterator(); 394 Iterator it = Iterator();
395 it.d->mIt = d->mAddressees.begin(); 395 it.d->mIt = d->mAddressees.begin();
396 return it; 396 return it;
397} 397}
398 398
399AddressBook::ConstIterator AddressBook::begin() const 399AddressBook::ConstIterator AddressBook::begin() const
400{ 400{
401 ConstIterator it = ConstIterator(); 401 ConstIterator it = ConstIterator();
402 it.d->mIt = d->mAddressees.begin(); 402 it.d->mIt = d->mAddressees.begin();
403 return it; 403 return it;
404} 404}
405 405
406AddressBook::Iterator AddressBook::end() 406AddressBook::Iterator AddressBook::end()
407{ 407{
408 Iterator it = Iterator(); 408 Iterator it = Iterator();
409 it.d->mIt = d->mAddressees.end(); 409 it.d->mIt = d->mAddressees.end();
410 return it; 410 return it;
411} 411}
412 412
413AddressBook::ConstIterator AddressBook::end() const 413AddressBook::ConstIterator AddressBook::end() const
414{ 414{
415 ConstIterator it = ConstIterator(); 415 ConstIterator it = ConstIterator();
416 it.d->mIt = d->mAddressees.end(); 416 it.d->mIt = d->mAddressees.end();
417 return it; 417 return it;
418} 418}
419 419
420void AddressBook::clear() 420void AddressBook::clear()
421{ 421{
422 d->mAddressees.clear(); 422 d->mAddressees.clear();
423} 423}
424 424
425Ticket *AddressBook::requestSaveTicket( Resource *resource ) 425Ticket *AddressBook::requestSaveTicket( Resource *resource )
426{ 426{
427 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; 427 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl;
428 428
429 if ( !resource ) 429 if ( !resource )
430 { 430 {
431 qDebug("AddressBook::requestSaveTicket no resource" ); 431 qDebug("AddressBook::requestSaveTicket no resource" );
432 resource = standardResource(); 432 resource = standardResource();
433 } 433 }
434 434
435 KRES::Manager<Resource>::ActiveIterator it; 435 KRES::Manager<Resource>::ActiveIterator it;
436 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 436 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
437 if ( (*it) == resource ) { 437 if ( (*it) == resource ) {
438 if ( (*it)->readOnly() || !(*it)->isOpen() ) 438 if ( (*it)->readOnly() || !(*it)->isOpen() )
439 return 0; 439 return 0;
440 else 440 else
441 return (*it)->requestSaveTicket(); 441 return (*it)->requestSaveTicket();
442 } 442 }
443 } 443 }
444 444
445 return 0; 445 return 0;
446} 446}
447 447
448void AddressBook::insertAddressee( const Addressee &a, bool setRev ) 448void AddressBook::insertAddressee( const Addressee &a, bool setRev )
449{ 449{
450 Addressee::List::Iterator it; 450 Addressee::List::Iterator it;
451 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { 451 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
452 if ( a.uid() == (*it).uid() ) { 452 if ( a.uid() == (*it).uid() ) {
453 bool changed = false; 453 bool changed = false;
454 Addressee addr = a; 454 Addressee addr = a;
455 if ( addr != (*it) ) 455 if ( addr != (*it) )
456 changed = true; 456 changed = true;
457 457
458 (*it) = a; 458 (*it) = a;
459 if ( (*it).resource() == 0 ) 459 if ( (*it).resource() == 0 )
460 (*it).setResource( standardResource() ); 460 (*it).setResource( standardResource() );
461 461
462 if ( changed ) { 462 if ( changed ) {
463 if ( setRev ) 463 if ( setRev ) {
464 (*it).setRevision( QDateTime::currentDateTime() ); 464 // get rid of micro seconds
465 QDateTime dt = QDateTime::currentDateTime();
466 QTime t = dt.time();
467 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
468 (*it).setRevision( dt );
469 }
465 (*it).setChanged( true ); 470 (*it).setChanged( true );
466 } 471 }
467 472
468 return; 473 return;
469 } 474 }
470 } 475 }
471 d->mAddressees.append( a ); 476 d->mAddressees.append( a );
472 Addressee& addr = d->mAddressees.last(); 477 Addressee& addr = d->mAddressees.last();
473 if ( addr.resource() == 0 ) 478 if ( addr.resource() == 0 )
474 addr.setResource( standardResource() ); 479 addr.setResource( standardResource() );
475 480
476 addr.setChanged( true ); 481 addr.setChanged( true );
477} 482}
478 483
479void AddressBook::removeAddressee( const Addressee &a ) 484void AddressBook::removeAddressee( const Addressee &a )
480{ 485{
481 Iterator it; 486 Iterator it;
482 for ( it = begin(); it != end(); ++it ) { 487 for ( it = begin(); it != end(); ++it ) {
483 if ( a.uid() == (*it).uid() ) { 488 if ( a.uid() == (*it).uid() ) {
484 removeAddressee( it ); 489 removeAddressee( it );
485 return; 490 return;
486 } 491 }
487 } 492 }
488} 493}
489 494
490void AddressBook::removeAddressee( const Iterator &it ) 495void AddressBook::removeAddressee( const Iterator &it )
491{ 496{
492 d->mRemovedAddressees.append( (*it) ); 497 d->mRemovedAddressees.append( (*it) );
493 d->mAddressees.remove( it.d->mIt ); 498 d->mAddressees.remove( it.d->mIt );
494} 499}
495 500
496AddressBook::Iterator AddressBook::find( const Addressee &a ) 501AddressBook::Iterator AddressBook::find( const Addressee &a )
497{ 502{
498 Iterator it; 503 Iterator it;
499 for ( it = begin(); it != end(); ++it ) { 504 for ( it = begin(); it != end(); ++it ) {
500 if ( a.uid() == (*it).uid() ) { 505 if ( a.uid() == (*it).uid() ) {
501 return it; 506 return it;
502 } 507 }
503 } 508 }
504 return end(); 509 return end();
505} 510}
506 511
507Addressee AddressBook::findByUid( const QString &uid ) 512Addressee AddressBook::findByUid( const QString &uid )
508{ 513{
509 Iterator it; 514 Iterator it;
510 for ( it = begin(); it != end(); ++it ) { 515 for ( it = begin(); it != end(); ++it ) {
511 if ( uid == (*it).uid() ) { 516 if ( uid == (*it).uid() ) {
512 return *it; 517 return *it;
513 } 518 }
514 } 519 }
515 return Addressee(); 520 return Addressee();
516} 521}
517Addressee::List AddressBook::getExternLastSyncAddressees() 522Addressee::List AddressBook::getExternLastSyncAddressees()
518{ 523{
519 Addressee::List results; 524 Addressee::List results;
520 525
521 Iterator it; 526 Iterator it;
522 for ( it = begin(); it != end(); ++it ) { 527 for ( it = begin(); it != end(); ++it ) {
523 if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) { 528 if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) {
524 if ( (*it).familyName().left(3) == "E: " ) 529 if ( (*it).familyName().left(3) == "E: " )
525 results.append( *it ); 530 results.append( *it );
526 } 531 }
527 } 532 }
528 533
529 return results; 534 return results;
530} 535}
531void AddressBook::resetTempSyncStat() 536void AddressBook::resetTempSyncStat()
532{ 537{
533 Iterator it; 538 Iterator it;
534 for ( it = begin(); it != end(); ++it ) { 539 for ( it = begin(); it != end(); ++it ) {
535 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 540 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
536 } 541 }
537 542
538} 543}
539 544
540QStringList AddressBook:: uidList() 545QStringList AddressBook:: uidList()
541{ 546{
542 QStringList results; 547 QStringList results;
543 Iterator it; 548 Iterator it;
544 for ( it = begin(); it != end(); ++it ) { 549 for ( it = begin(); it != end(); ++it ) {
545 results.append( (*it).uid() ); 550 results.append( (*it).uid() );
546 } 551 }
547 return results; 552 return results;
548} 553}
549 554
550 555
551Addressee::List AddressBook::allAddressees() 556Addressee::List AddressBook::allAddressees()
552{ 557{
553 return d->mAddressees; 558 return d->mAddressees;
554} 559}
555 560
556Addressee::List AddressBook::findByName( const QString &name ) 561Addressee::List AddressBook::findByName( const QString &name )
557{ 562{
558 Addressee::List results; 563 Addressee::List results;
559 564
560 Iterator it; 565 Iterator it;
561 for ( it = begin(); it != end(); ++it ) { 566 for ( it = begin(); it != end(); ++it ) {
562 if ( name == (*it).realName() ) { 567 if ( name == (*it).realName() ) {
563 results.append( *it ); 568 results.append( *it );
564 } 569 }
565 } 570 }
566 571
567 return results; 572 return results;
568} 573}
569 574
570Addressee::List AddressBook::findByEmail( const QString &email ) 575Addressee::List AddressBook::findByEmail( const QString &email )
571{ 576{
572 Addressee::List results; 577 Addressee::List results;
573 QStringList mailList; 578 QStringList mailList;
574 579
575 Iterator it; 580 Iterator it;
576 for ( it = begin(); it != end(); ++it ) { 581 for ( it = begin(); it != end(); ++it ) {
577 mailList = (*it).emails(); 582 mailList = (*it).emails();
578 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 583 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
579 if ( email == (*ite) ) { 584 if ( email == (*ite) ) {
580 results.append( *it ); 585 results.append( *it );
581 } 586 }
582 } 587 }
583 } 588 }
584 589
585 return results; 590 return results;
586} 591}
587 592
588Addressee::List AddressBook::findByCategory( const QString &category ) 593Addressee::List AddressBook::findByCategory( const QString &category )
589{ 594{
590 Addressee::List results; 595 Addressee::List results;
591 596
592 Iterator it; 597 Iterator it;
593 for ( it = begin(); it != end(); ++it ) { 598 for ( it = begin(); it != end(); ++it ) {
594 if ( (*it).hasCategory( category) ) { 599 if ( (*it).hasCategory( category) ) {
595 results.append( *it ); 600 results.append( *it );
596 } 601 }
597 } 602 }
598 603
599 return results; 604 return results;
600} 605}
601 606
602void AddressBook::dump() const 607void AddressBook::dump() const
603{ 608{
604 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 609 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
605 610
606 ConstIterator it; 611 ConstIterator it;
607 for( it = begin(); it != end(); ++it ) { 612 for( it = begin(); it != end(); ++it ) {
608 (*it).dump(); 613 (*it).dump();
609 } 614 }
610 615
611 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 616 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
612} 617}
613 618
614QString AddressBook::identifier() 619QString AddressBook::identifier()
615{ 620{
616 QStringList identifier; 621 QStringList identifier;
617 622
618 623
619 KRES::Manager<Resource>::ActiveIterator it; 624 KRES::Manager<Resource>::ActiveIterator it;
620 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 625 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
621 if ( !(*it)->identifier().isEmpty() ) 626 if ( !(*it)->identifier().isEmpty() )
622 identifier.append( (*it)->identifier() ); 627 identifier.append( (*it)->identifier() );
623 } 628 }
624 629
625 return identifier.join( ":" ); 630 return identifier.join( ":" );
626} 631}
627 632
628Field::List AddressBook::fields( int category ) 633Field::List AddressBook::fields( int category )
629{ 634{
630 if ( d->mAllFields.isEmpty() ) { 635 if ( d->mAllFields.isEmpty() ) {
631 d->mAllFields = Field::allFields(); 636 d->mAllFields = Field::allFields();
632 } 637 }
633 638
634 if ( category == Field::All ) return d->mAllFields; 639 if ( category == Field::All ) return d->mAllFields;
635 640
636 Field::List result; 641 Field::List result;
637 Field::List::ConstIterator it; 642 Field::List::ConstIterator it;
638 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 643 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
639 if ( (*it)->category() & category ) result.append( *it ); 644 if ( (*it)->category() & category ) result.append( *it );
640 } 645 }
641 646
642 return result; 647 return result;
643} 648}
644 649
645bool AddressBook::addCustomField( const QString &label, int category, 650bool AddressBook::addCustomField( const QString &label, int category,
646 const QString &key, const QString &app ) 651 const QString &key, const QString &app )
647{ 652{
648 if ( d->mAllFields.isEmpty() ) { 653 if ( d->mAllFields.isEmpty() ) {
649 d->mAllFields = Field::allFields(); 654 d->mAllFields = Field::allFields();
650 } 655 }
651//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 656//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
652 QString a = app.isNull() ? KGlobal::getAppName() : app; 657 QString a = app.isNull() ? KGlobal::getAppName() : app;
653 658
654 QString k = key.isNull() ? label : key; 659 QString k = key.isNull() ? label : key;
655 660
656 Field *field = Field::createCustomField( label, category, k, a ); 661 Field *field = Field::createCustomField( label, category, k, a );
657 662
658 if ( !field ) return false; 663 if ( !field ) return false;
659 664
660 d->mAllFields.append( field ); 665 d->mAllFields.append( field );
661 666
662 return true; 667 return true;
663} 668}
664 669
665QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 670QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
666{ 671{
667 if (!ab.d) return s; 672 if (!ab.d) return s;
668 673
669 return s << ab.d->mAddressees; 674 return s << ab.d->mAddressees;
670} 675}
671 676
672QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 677QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
673{ 678{
674 if (!ab.d) return s; 679 if (!ab.d) return s;
675 680
676 s >> ab.d->mAddressees; 681 s >> ab.d->mAddressees;
677 682
678 return s; 683 return s;
679} 684}
680 685
681bool AddressBook::addResource( Resource *resource ) 686bool AddressBook::addResource( Resource *resource )
682{ 687{
683 if ( !resource->open() ) { 688 if ( !resource->open() ) {
684 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 689 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
685 return false; 690 return false;
686 } 691 }
687 692
688 resource->setAddressBook( this ); 693 resource->setAddressBook( this );
689 694
690 d->mManager->add( resource ); 695 d->mManager->add( resource );
691 return true; 696 return true;
692} 697}
693 698
694bool AddressBook::removeResource( Resource *resource ) 699bool AddressBook::removeResource( Resource *resource )
695{ 700{
696 resource->close(); 701 resource->close();
697 702
698 if ( resource == standardResource() ) 703 if ( resource == standardResource() )
699 d->mManager->setStandardResource( 0 ); 704 d->mManager->setStandardResource( 0 );
700 705
701 resource->setAddressBook( 0 ); 706 resource->setAddressBook( 0 );
702 707
703 d->mManager->remove( resource ); 708 d->mManager->remove( resource );
704 return true; 709 return true;
705} 710}
706 711
707QPtrList<Resource> AddressBook::resources() 712QPtrList<Resource> AddressBook::resources()
708{ 713{
709 QPtrList<Resource> list; 714 QPtrList<Resource> list;
710 715
711// qDebug("AddressBook::resources() 1"); 716// qDebug("AddressBook::resources() 1");
712 717
713 KRES::Manager<Resource>::ActiveIterator it; 718 KRES::Manager<Resource>::ActiveIterator it;
714 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 719 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
715 list.append( *it ); 720 list.append( *it );
716 721
717 return list; 722 return list;
718} 723}
719 724
720/*US 725/*US
721void AddressBook::setErrorHandler( ErrorHandler *handler ) 726void AddressBook::setErrorHandler( ErrorHandler *handler )
722{ 727{
723 delete d->mErrorHandler; 728 delete d->mErrorHandler;
724 d->mErrorHandler = handler; 729 d->mErrorHandler = handler;
725} 730}
726*/ 731*/
727 732
728void AddressBook::error( const QString& msg ) 733void AddressBook::error( const QString& msg )
729{ 734{
730/*US 735/*US
731 if ( !d->mErrorHandler ) // create default error handler 736 if ( !d->mErrorHandler ) // create default error handler
732 d->mErrorHandler = new ConsoleErrorHandler; 737 d->mErrorHandler = new ConsoleErrorHandler;
733 738
734 if ( d->mErrorHandler ) 739 if ( d->mErrorHandler )
735 d->mErrorHandler->error( msg ); 740 d->mErrorHandler->error( msg );
736 else 741 else
737 kdError(5700) << "no error handler defined" << endl; 742 kdError(5700) << "no error handler defined" << endl;
738*/ 743*/
739 kdDebug(5700) << "msg" << endl; 744 kdDebug(5700) << "msg" << endl;
740 qDebug(msg); 745 qDebug(msg);
741} 746}
742 747
743void AddressBook::deleteRemovedAddressees() 748void AddressBook::deleteRemovedAddressees()
744{ 749{
745 Addressee::List::Iterator it; 750 Addressee::List::Iterator it;
746 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 751 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
747 Resource *resource = (*it).resource(); 752 Resource *resource = (*it).resource();
748 if ( resource && !resource->readOnly() && resource->isOpen() ) 753 if ( resource && !resource->readOnly() && resource->isOpen() )
749 resource->removeAddressee( *it ); 754 resource->removeAddressee( *it );
750 } 755 }
751 756
752 d->mRemovedAddressees.clear(); 757 d->mRemovedAddressees.clear();
753} 758}
754 759
755void AddressBook::setStandardResource( Resource *resource ) 760void AddressBook::setStandardResource( Resource *resource )
756{ 761{
757// qDebug("AddressBook::setStandardResource 1"); 762// qDebug("AddressBook::setStandardResource 1");
758 d->mManager->setStandardResource( resource ); 763 d->mManager->setStandardResource( resource );
759} 764}
760 765
761Resource *AddressBook::standardResource() 766Resource *AddressBook::standardResource()
762{ 767{
763 return d->mManager->standardResource(); 768 return d->mManager->standardResource();
764} 769}
765 770
766KRES::Manager<Resource> *AddressBook::resourceManager() 771KRES::Manager<Resource> *AddressBook::resourceManager()
767{ 772{
768 return d->mManager; 773 return d->mManager;
769} 774}
770 775
771void AddressBook::cleanUp() 776void AddressBook::cleanUp()
772{ 777{
773 KRES::Manager<Resource>::ActiveIterator it; 778 KRES::Manager<Resource>::ActiveIterator it;
774 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 779 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
775 if ( !(*it)->readOnly() && (*it)->isOpen() ) 780 if ( !(*it)->readOnly() && (*it)->isOpen() )
776 (*it)->cleanUp(); 781 (*it)->cleanUp();
777 } 782 }
778} 783}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 226d5e4..215ce83 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2521,484 +2521,487 @@ KABC::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 qDebug("Creating new last-syncAddressee "); 2526 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2528 QString sum = ""; 2528 QString sum = "";
2529 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 2529 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
2530 sum = "E: "; 2530 sum = "E: ";
2531 lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event")); 2531 lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event"));
2532 lse.setRevision( mLastAddressbookSync ); 2532 lse.setRevision( mLastAddressbookSync );
2533 lse.setCategories( i18n("SyncEvent") ); 2533 lse.setCategories( i18n("SyncEvent") );
2534 mAddressBook->insertAddressee( lse ); 2534 mAddressBook->insertAddressee( lse );
2535 } 2535 }
2536 return lse; 2536 return lse;
2537} 2537}
2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{ 2539{
2540 2540
2541 //void setZaurusId(int id); 2541 //void setZaurusId(int id);
2542 // int zaurusId() const; 2542 // int zaurusId() const;
2543 // void setZaurusUid(int id); 2543 // void setZaurusUid(int id);
2544 // int zaurusUid() const; 2544 // int zaurusUid() const;
2545 // void setZaurusStat(int id); 2545 // void setZaurusStat(int id);
2546 // int zaurusStat() const; 2546 // int zaurusStat() const;
2547 // 0 equal 2547 // 0 equal
2548 // 1 take local 2548 // 1 take local
2549 // 2 take remote 2549 // 2 take remote
2550 // 3 cancel 2550 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync; 2551 QDateTime lastSync = mLastAddressbookSync;
2552 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2552 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2553 bool remCh, locCh; 2553 bool remCh, locCh;
2554 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2554 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2555 //if ( remCh ) 2555 //if ( remCh )
2556 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2556 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2557 locCh = ( local->revision() > mLastAddressbookSync ); 2557 locCh = ( local->revision() > mLastAddressbookSync );
2558 if ( !remCh && ! locCh ) { 2558 if ( !remCh && ! locCh ) {
2559 //qDebug("both not changed "); 2559 //qDebug("both not changed ");
2560 lastSync = local->revision().addDays(1); 2560 lastSync = local->revision().addDays(1);
2561 } else { 2561 } else {
2562 if ( locCh ) { 2562 if ( locCh ) {
2563 //qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1()); 2563 //qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1());
2564 lastSync = local->revision().addDays( -1 ); 2564 lastSync = local->revision().addDays( -1 );
2565 if ( !remCh ) 2565 if ( !remCh )
2566 remote->setRevision( lastSync.addDays( -1 ) ); 2566 remote->setRevision( lastSync.addDays( -1 ) );
2567 } else { 2567 } else {
2568 //qDebug(" not loc changed "); 2568 //qDebug(" not loc changed ");
2569 lastSync = local->revision().addDays( 1 ); 2569 lastSync = local->revision().addDays( 1 );
2570 if ( remCh ) 2570 if ( remCh )
2571 remote->setRevision( lastSync.addDays( 1 ) ); 2571 remote->setRevision( lastSync.addDays( 1 ) );
2572 2572
2573 } 2573 }
2574 } 2574 }
2575 full = true; 2575 full = true;
2576 if ( mode < SYNC_PREF_ASK ) 2576 if ( mode < SYNC_PREF_ASK )
2577 mode = SYNC_PREF_ASK; 2577 mode = SYNC_PREF_ASK;
2578 } else { 2578 } else {
2579 if ( local->revision() == remote->revision() ) 2579 if ( local->revision() == remote->revision() )
2580 return 0; 2580 return 0;
2581 2581
2582 } 2582 }
2583 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2583 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2584 2584
2585 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); 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() ); 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 2587 //full = true; //debug only
2588 if ( full ) { 2588 if ( full ) {
2589 bool equ = ( (*local) == (*remote) ); 2589 bool equ = ( (*local) == (*remote) );
2590 if ( equ ) { 2590 if ( equ ) {
2591 //qDebug("equal "); 2591 //qDebug("equal ");
2592 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2592 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2593 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2593 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2594 } 2594 }
2595 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2595 if ( mode < SYNC_PREF_FORCE_LOCAL )
2596 return 0; 2596 return 0;
2597 2597
2598 }//else //debug only 2598 }//else //debug only
2599 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2599 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2600 } 2600 }
2601 int result; 2601 int result;
2602 bool localIsNew; 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() ); 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 2604
2605 if ( full && mode < SYNC_PREF_NEWEST ) 2605 if ( full && mode < SYNC_PREF_NEWEST )
2606 mode = SYNC_PREF_ASK; 2606 mode = SYNC_PREF_ASK;
2607 2607
2608 switch( mode ) { 2608 switch( mode ) {
2609 case SYNC_PREF_LOCAL: 2609 case SYNC_PREF_LOCAL:
2610 if ( lastSync > remote->revision() ) 2610 if ( lastSync > remote->revision() )
2611 return 1; 2611 return 1;
2612 if ( lastSync > local->revision() ) 2612 if ( lastSync > local->revision() )
2613 return 2; 2613 return 2;
2614 return 1; 2614 return 1;
2615 break; 2615 break;
2616 case SYNC_PREF_REMOTE: 2616 case SYNC_PREF_REMOTE:
2617 if ( lastSync > remote->revision() ) 2617 if ( lastSync > remote->revision() )
2618 return 1; 2618 return 1;
2619 if ( lastSync > local->revision() ) 2619 if ( lastSync > local->revision() )
2620 return 2; 2620 return 2;
2621 return 2; 2621 return 2;
2622 break; 2622 break;
2623 case SYNC_PREF_NEWEST: 2623 case SYNC_PREF_NEWEST:
2624 if ( local->revision() > remote->revision() ) 2624 if ( local->revision() > remote->revision() )
2625 return 1; 2625 return 1;
2626 else 2626 else
2627 return 2; 2627 return 2;
2628 break; 2628 break;
2629 case SYNC_PREF_ASK: 2629 case SYNC_PREF_ASK:
2630 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() ); 2630 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() );
2631 if ( lastSync > remote->revision() ) 2631 if ( lastSync > remote->revision() )
2632 return 1; 2632 return 1;
2633 if ( lastSync > local->revision() ) 2633 if ( lastSync > local->revision() )
2634 return 2; 2634 return 2;
2635 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() ); 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(); 2636 localIsNew = local->revision() >= remote->revision();
2637#if 0 2637#if 0
2638 if ( localIsNew ) 2638 if ( localIsNew )
2639 getEventViewerDialog()->setColorMode( 1 ); 2639 getEventViewerDialog()->setColorMode( 1 );
2640 else 2640 else
2641 getEventViewerDialog()->setColorMode( 2 ); 2641 getEventViewerDialog()->setColorMode( 2 );
2642 getEventViewerDialog()->setIncidence(local); 2642 getEventViewerDialog()->setIncidence(local);
2643 if ( localIsNew ) 2643 if ( localIsNew )
2644 getEventViewerDialog()->setColorMode( 2 ); 2644 getEventViewerDialog()->setColorMode( 2 );
2645 else 2645 else
2646 getEventViewerDialog()->setColorMode( 1 ); 2646 getEventViewerDialog()->setColorMode( 1 );
2647 getEventViewerDialog()->addIncidence(remote); 2647 getEventViewerDialog()->addIncidence(remote);
2648 getEventViewerDialog()->setColorMode( 0 ); 2648 getEventViewerDialog()->setColorMode( 0 );
2649 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 2649 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
2650 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 2650 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
2651 getEventViewerDialog()->showMe(); 2651 getEventViewerDialog()->showMe();
2652 result = getEventViewerDialog()->executeS( localIsNew ); 2652 result = getEventViewerDialog()->executeS( localIsNew );
2653#endif 2653#endif
2654 qDebug("conflict! ************************************** "); 2654 qDebug("conflict! ************************************** ");
2655 result = 1; 2655 result = 1;
2656 return result; 2656 return result;
2657 2657
2658 break; 2658 break;
2659 case SYNC_PREF_FORCE_LOCAL: 2659 case SYNC_PREF_FORCE_LOCAL:
2660 return 1; 2660 return 1;
2661 break; 2661 break;
2662 case SYNC_PREF_FORCE_REMOTE: 2662 case SYNC_PREF_FORCE_REMOTE:
2663 return 2; 2663 return 2;
2664 break; 2664 break;
2665 2665
2666 default: 2666 default:
2667 // SYNC_PREF_TAKE_BOTH not implemented 2667 // SYNC_PREF_TAKE_BOTH not implemented
2668 break; 2668 break;
2669 } 2669 }
2670 return 0; 2670 return 0;
2671} 2671}
2672bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2672bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2673{ 2673{
2674 bool syncOK = true; 2674 bool syncOK = true;
2675 int addedAddressee = 0; 2675 int addedAddressee = 0;
2676 int addedAddresseeR = 0; 2676 int addedAddresseeR = 0;
2677 int deletedAddresseeR = 0; 2677 int deletedAddresseeR = 0;
2678 int deletedAddresseeL = 0; 2678 int deletedAddresseeL = 0;
2679 int changedLocal = 0; 2679 int changedLocal = 0;
2680 int changedRemote = 0; 2680 int changedRemote = 0;
2681 //QPtrList<Addressee> el = local->rawAddressees(); 2681 //QPtrList<Addressee> el = local->rawAddressees();
2682 Addressee addresseeR; 2682 Addressee addresseeR;
2683 QString uid; 2683 QString uid;
2684 int take; 2684 int take;
2685 Addressee addresseeL; 2685 Addressee addresseeL;
2686 Addressee addresseeRSync; 2686 Addressee addresseeRSync;
2687 Addressee addresseeLSync; 2687 Addressee addresseeLSync;
2688 KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2688 KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2689 KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2689 KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2690 bool fullDateRange = false; 2690 bool fullDateRange = false;
2691 local->resetTempSyncStat(); 2691 local->resetTempSyncStat();
2692 mLastAddressbookSync = QDateTime::currentDateTime(); 2692 mLastAddressbookSync = QDateTime::currentDateTime();
2693 QDateTime modifiedCalendar = mLastAddressbookSync;; 2693 QDateTime modifiedCalendar = mLastAddressbookSync;;
2694 addresseeLSync = getLastSyncAddressee(); 2694 addresseeLSync = getLastSyncAddressee();
2695 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2695 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2696 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2696 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2697 if ( !addresseeR.isEmpty() ) { 2697 if ( !addresseeR.isEmpty() ) {
2698 addresseeRSync = addresseeR; 2698 addresseeRSync = addresseeR;
2699 remote->removeAddressee(addresseeR ); 2699 remote->removeAddressee(addresseeR );
2700 2700
2701 } else { 2701 } else {
2702 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2702 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2703 addresseeRSync = addresseeLSync ; 2703 addresseeRSync = addresseeLSync ;
2704 } else { 2704 } else {
2705 qDebug("FULLDATE 1"); 2705 qDebug("FULLDATE 1");
2706 fullDateRange = true; 2706 fullDateRange = true;
2707 Addressee newAdd; 2707 Addressee newAdd;
2708 addresseeRSync = newAdd; 2708 addresseeRSync = newAdd;
2709 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2709 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2710 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2710 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2711 addresseeRSync.setRevision( mLastAddressbookSync ); 2711 addresseeRSync.setRevision( mLastAddressbookSync );
2712 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2712 addresseeRSync.setCategories( i18n("SyncAddressee") );
2713 } 2713 }
2714 } 2714 }
2715 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2715 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2716 qDebug("FULLDATE 2"); 2716 qDebug("FULLDATE 2");
2717 fullDateRange = true; 2717 fullDateRange = true;
2718 } 2718 }
2719 if ( ! fullDateRange ) { 2719 if ( ! fullDateRange ) {
2720 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2720 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2721 2721
2722 // 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() );
2723 //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());
2724 fullDateRange = true; 2724 fullDateRange = true;
2725 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2725 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2726 } 2726 }
2727 } 2727 }
2728 if ( fullDateRange ) 2728 if ( fullDateRange )
2729 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2729 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2730 else 2730 else
2731 mLastAddressbookSync = addresseeLSync.revision(); 2731 mLastAddressbookSync = addresseeLSync.revision();
2732 // for resyncing if own file has changed 2732 // for resyncing if own file has changed
2733 // PENDING fixme later when implemented 2733 // PENDING fixme later when implemented
2734#if 0 2734#if 0
2735 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2735 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2736 mLastAddressbookSync = loadedFileVersion; 2736 mLastAddressbookSync = loadedFileVersion;
2737 qDebug("setting mLastAddressbookSync "); 2737 qDebug("setting mLastAddressbookSync ");
2738 } 2738 }
2739#endif 2739#endif
2740 2740
2741 //qDebug("*************************** "); 2741 //qDebug("*************************** ");
2742 qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2742 qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2743 QStringList er = remote->uidList(); 2743 QStringList er = remote->uidList();
2744 Addressee inR ;//= er.first(); 2744 Addressee inR ;//= er.first();
2745 Addressee inL; 2745 Addressee inL;
2746 QProgressBar bar( er.count(),0 ); 2746 QProgressBar bar( er.count(),0 );
2747 bar.setCaption (i18n("Syncing - close to abort!") ); 2747 bar.setCaption (i18n("Syncing - close to abort!") );
2748 2748
2749 int w = 300; 2749 int w = 300;
2750 if ( QApplication::desktop()->width() < 320 ) 2750 if ( QApplication::desktop()->width() < 320 )
2751 w = 220; 2751 w = 220;
2752 int h = bar.sizeHint().height() ; 2752 int h = bar.sizeHint().height() ;
2753 int dw = QApplication::desktop()->width(); 2753 int dw = QApplication::desktop()->width();
2754 int dh = QApplication::desktop()->height(); 2754 int dh = QApplication::desktop()->height();
2755 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2755 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2756 bar.show(); 2756 bar.show();
2757 int modulo = (er.count()/10)+1; 2757 int modulo = (er.count()/10)+1;
2758 int incCounter = 0; 2758 int incCounter = 0;
2759 while ( incCounter < er.count()) { 2759 while ( incCounter < er.count()) {
2760 if ( ! bar.isVisible() ) 2760 if ( ! bar.isVisible() )
2761 return false; 2761 return false;
2762 if ( incCounter % modulo == 0 ) 2762 if ( incCounter % modulo == 0 )
2763 bar.setProgress( incCounter ); 2763 bar.setProgress( incCounter );
2764 uid = er[ incCounter ]; 2764 uid = er[ incCounter ];
2765 bool skipIncidence = false; 2765 bool skipIncidence = false;
2766 if ( uid.left(20) == QString("last-syncAddressee-") ) 2766 if ( uid.left(20) == QString("last-syncAddressee-") )
2767 skipIncidence = true; 2767 skipIncidence = true;
2768 QString idS; 2768 QString idS;
2769 qApp->processEvents(); 2769 qApp->processEvents();
2770 if ( !skipIncidence ) { 2770 if ( !skipIncidence ) {
2771 inL = local->findByUid( uid ); 2771 inL = local->findByUid( uid );
2772 inR = remote->findByUid( uid ); 2772 inR = remote->findByUid( uid );
2773 //inL.setResource( 0 ); 2773 //inL.setResource( 0 );
2774 //inR.setResource( 0 ); 2774 //inR.setResource( 0 );
2775 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2775 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2776 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2776 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2777 //qDebug("take %d %s ", take, inL.summary().latin1()); 2777 //qDebug("take %d %s ", take, inL.summary().latin1());
2778 if ( take == 3 ) 2778 if ( take == 3 )
2779 return false; 2779 return false;
2780 if ( take == 1 ) {// take local 2780 if ( take == 1 ) {// take local
2781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2782 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2782 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2783 local->insertAddressee( inL, false ); 2783 local->insertAddressee( inL, false );
2784 } 2784 }
2785 else 2785 else
2786 idS = inR.IDStr(); 2786 idS = inR.IDStr();
2787 remote->removeAddressee( inR ); 2787 remote->removeAddressee( inR );
2788 inR = inL; 2788 inR = inL;
2789 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2789 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2790 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 2790 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
2791 inR.setIDStr( idS ); 2791 inR.setIDStr( idS );
2792 inR.setResource( 0 ); 2792 inR.setResource( 0 );
2793 remote->insertAddressee( inR , false); 2793 remote->insertAddressee( inR , false);
2794 ++changedRemote; 2794 ++changedRemote;
2795 } else { 2795 } else {
2796 idS = inL.IDStr(); 2796 idS = inL.IDStr();
2797 local->removeAddressee( inL ); 2797 local->removeAddressee( inL );
2798 inL = inR; 2798 inL = inR;
2799 inL.setIDStr( idS ); 2799 inL.setIDStr( idS );
2800 inL.setResource( 0 ); 2800 inL.setResource( 0 );
2801 local->insertAddressee( inL , false ); 2801 local->insertAddressee( inL , false );
2802 ++changedLocal; 2802 ++changedLocal;
2803 } 2803 }
2804 } 2804 }
2805 } else { // no conflict 2805 } else { // no conflict
2806 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2806 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2807 QString des = addresseeLSync.note(); 2807 QString des = addresseeLSync.note();
2808 QString pref = "a"; 2808 QString pref = "a";
2809 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
2810 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2810 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2811 ++deletedAddresseeR; 2811 ++deletedAddresseeR;
2812 } else { 2812 } else {
2813 inR.setRevision( modifiedCalendar ); 2813 inR.setRevision( modifiedCalendar );
2814 remote->insertAddressee( inR, false ); 2814 remote->insertAddressee( inR, false );
2815 inL = inR; 2815 inL = inR;
2816 inL.setResource( 0 ); 2816 inL.setResource( 0 );
2817 local->insertAddressee( inL , false); 2817 local->insertAddressee( inL , false);
2818 ++addedAddressee; 2818 ++addedAddressee;
2819 } 2819 }
2820 } else { 2820 } else {
2821 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2821 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2822 inR.setRevision( modifiedCalendar ); 2822 inR.setRevision( modifiedCalendar );
2823 remote->insertAddressee( inR, false ); 2823 remote->insertAddressee( inR, false );
2824 inR.setResource( 0 ); 2824 inR.setResource( 0 );
2825 local->insertAddressee( inR, false ); 2825 local->insertAddressee( inR, false );
2826 ++addedAddressee; 2826 ++addedAddressee;
2827 } else { 2827 } else {
2828 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2828 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2829 remote->removeAddressee( inR ); 2829 remote->removeAddressee( inR );
2830 ++deletedAddresseeR; 2830 ++deletedAddresseeR;
2831 } 2831 }
2832 } 2832 }
2833 } 2833 }
2834 } 2834 }
2835 ++incCounter; 2835 ++incCounter;
2836 } 2836 }
2837 er.clear(); 2837 er.clear();
2838 QStringList el = remote->uidList(); 2838 QStringList el = remote->uidList();
2839 modulo = (el.count()/10)+1; 2839 modulo = (el.count()/10)+1;
2840 bar.setCaption (i18n("Add / remove addressees") ); 2840 bar.setCaption (i18n("Add / remove addressees") );
2841 bar.setTotalSteps ( el.count() ) ; 2841 bar.setTotalSteps ( el.count() ) ;
2842 bar.show(); 2842 bar.show();
2843 incCounter = 0; 2843 incCounter = 0;
2844 while ( incCounter < el.count()) { 2844 while ( incCounter < el.count()) {
2845 2845
2846 qApp->processEvents(); 2846 qApp->processEvents();
2847 if ( ! bar.isVisible() ) 2847 if ( ! bar.isVisible() )
2848 return false; 2848 return false;
2849 if ( incCounter % modulo == 0 ) 2849 if ( incCounter % modulo == 0 )
2850 bar.setProgress( incCounter ); 2850 bar.setProgress( incCounter );
2851 uid = el[ incCounter ]; 2851 uid = el[ incCounter ];
2852 bool skipIncidence = false; 2852 bool skipIncidence = false;
2853 if ( uid.left(20) == QString("last-syncAddressee-") ) 2853 if ( uid.left(20) == QString("last-syncAddressee-") )
2854 skipIncidence = true; 2854 skipIncidence = true;
2855 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2855 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2856 skipIncidence = true; 2856 skipIncidence = true;
2857 if ( !skipIncidence ) { 2857 if ( !skipIncidence ) {
2858 inL = local->findByUid( uid ); 2858 inL = local->findByUid( uid );
2859 inR = remote->findByUid( uid ); 2859 inR = remote->findByUid( uid );
2860 if ( inR.isEmpty() ) { 2860 if ( inR.isEmpty() ) {
2861 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2861 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2862 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2862 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2863 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2863 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2864 local->removeAddressee( inL ); 2864 local->removeAddressee( inL );
2865 ++deletedAddresseeL; 2865 ++deletedAddresseeL;
2866 } else { 2866 } else {
2867 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2867 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2868 inL.removeID(mCurrentSyncDevice ); 2868 inL.removeID(mCurrentSyncDevice );
2869 ++addedAddresseeR; 2869 ++addedAddresseeR;
2870 //qDebug("remote added Incidence %s ", inL.summary().latin1()); 2870 //qDebug("remote added Incidence %s ", inL.summary().latin1());
2871 inL.setRevision( modifiedCalendar ); 2871 inL.setRevision( modifiedCalendar );
2872 local->insertAddressee( inL, false ); 2872 local->insertAddressee( inL, false );
2873 inR = inL; 2873 inR = inL;
2874 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2874 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2875 inR.setResource( 0 ); 2875 inR.setResource( 0 );
2876 remote->insertAddressee( inR, false ); 2876 remote->insertAddressee( inR, false );
2877 } 2877 }
2878 } 2878 }
2879 } else { 2879 } else {
2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2882 local->removeAddressee( inL ); 2882 local->removeAddressee( inL );
2883 ++deletedAddresseeL; 2883 ++deletedAddresseeL;
2884 } else { 2884 } else {
2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2886 ++addedAddresseeR; 2886 ++addedAddresseeR;
2887 inL.setRevision( modifiedCalendar ); 2887 inL.setRevision( modifiedCalendar );
2888 local->insertAddressee( inL, false ); 2888 local->insertAddressee( inL, false );
2889 inR = inL; 2889 inR = inL;
2890 inR.setResource( 0 ); 2890 inR.setResource( 0 );
2891 remote->insertAddressee( inR, false ); 2891 remote->insertAddressee( inR, false );
2892 } 2892 }
2893 } 2893 }
2894 } 2894 }
2895 } 2895 }
2896 } 2896 }
2897 ++incCounter; 2897 ++incCounter;
2898 } 2898 }
2899 el.clear(); 2899 el.clear();
2900 2900
2901 2901
2902 2902
2903 bar.hide(); 2903 bar.hide();
2904 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2904 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2905 // get rid of micro seconds
2906 QTime t = mLastAddressbookSync.time();
2907 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2905 addresseeLSync.setRevision( mLastAddressbookSync ); 2908 addresseeLSync.setRevision( mLastAddressbookSync );
2906 addresseeRSync.setRevision( mLastAddressbookSync ); 2909 addresseeRSync.setRevision( mLastAddressbookSync );
2907 addresseeRSync.setGivenName( i18n("Remote from: ")+mCurrentSyncName ) ; 2910 addresseeRSync.setGivenName( i18n("Remote from: ")+mCurrentSyncName ) ;
2908 addresseeLSync.setGivenName(i18n("Local from: ") + mCurrentSyncName ); 2911 addresseeLSync.setGivenName(i18n("Local from: ") + mCurrentSyncName );
2909 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2912 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2910 remote->insertAddressee( addresseeRSync, false ); 2913 remote->insertAddressee( addresseeRSync, false );
2911 local->insertAddressee( addresseeLSync, false ); 2914 local->insertAddressee( addresseeLSync, false );
2912 QString mes; 2915 QString mes;
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 ); 2916 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 );
2914 if ( KABPrefs::instance()->mShowSyncSummary ) { 2917 if ( KABPrefs::instance()->mShowSyncSummary ) {
2915 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 2918 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
2916 } 2919 }
2917 qDebug( mes ); 2920 qDebug( mes );
2918 return syncOK; 2921 return syncOK;
2919} 2922}
2920 2923
2921bool KABCore::syncAB(QString filename, int mode) 2924bool KABCore::syncAB(QString filename, int mode)
2922{ 2925{
2923 2926
2924 //pending prepare addresseeview for output 2927 //pending prepare addresseeview for output
2925 //pending detect, if remote file has REV field. if not switch to external sync 2928 //pending detect, if remote file has REV field. if not switch to external sync
2926 mGlobalSyncMode = SYNC_MODE_NORMAL; 2929 mGlobalSyncMode = SYNC_MODE_NORMAL;
2927 AddressBook abLocal(filename,"syncContact"); 2930 AddressBook abLocal(filename,"syncContact");
2928 bool syncOK = false; 2931 bool syncOK = false;
2929 if ( abLocal.load() ) { 2932 if ( abLocal.load() ) {
2930 qDebug("AB loaded %s mode %d",filename.latin1(), mode ); 2933 qDebug("AB loaded %s mode %d",filename.latin1(), mode );
2931 AddressBook::Iterator it; 2934 AddressBook::Iterator it;
2932 //QStringList vcards; 2935 //QStringList vcards;
2933 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2936 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2934 // qDebug("Name %s ", (*it).familyName().latin1()); 2937 // qDebug("Name %s ", (*it).familyName().latin1());
2935 //} 2938 //}
2936 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2939 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2937 if ( syncOK ) { 2940 if ( syncOK ) {
2938 if ( KABPrefs::instance()->mWriteBackFile ) 2941 if ( KABPrefs::instance()->mWriteBackFile )
2939 { 2942 {
2940 qDebug("saving remote AB "); 2943 qDebug("saving remote AB ");
2941 abLocal.saveAB(); 2944 abLocal.saveAB();
2942 } 2945 }
2943 } 2946 }
2944 setModified(); 2947 setModified();
2945 2948
2946 } 2949 }
2947 if ( syncOK ) 2950 if ( syncOK )
2948 mViewManager->refreshView(); 2951 mViewManager->refreshView();
2949 return syncOK; 2952 return syncOK;
2950#if 0 2953#if 0
2951 2954
2952 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2955 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2953 getEventViewerDialog()->setSyncMode( true ); 2956 getEventViewerDialog()->setSyncMode( true );
2954 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2957 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
2955 getEventViewerDialog()->setSyncMode( false ); 2958 getEventViewerDialog()->setSyncMode( false );
2956 if ( syncOK ) { 2959 if ( syncOK ) {
2957 if ( KOPrefs::instance()->mWriteBackFile ) 2960 if ( KOPrefs::instance()->mWriteBackFile )
2958 { 2961 {
2959 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2962 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2960 storage->save(); 2963 storage->save();
2961 } 2964 }
2962 } 2965 }
2963 setModified(); 2966 setModified();
2964 } 2967 }
2965 2968
2966#endif 2969#endif
2967} 2970}
2968 2971
2969 2972
2970void KABCore::confSync() 2973void KABCore::confSync()
2971{ 2974{
2972 static KSyncPrefsDialog* sp = 0; 2975 static KSyncPrefsDialog* sp = 0;
2973 if ( ! sp ) { 2976 if ( ! sp ) {
2974 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 2977 sp = new KSyncPrefsDialog( this, "syncprefs", true );
2975 } 2978 }
2976 sp->usrReadConfig(); 2979 sp->usrReadConfig();
2977#ifndef DESKTOP_VERSION 2980#ifndef DESKTOP_VERSION
2978 sp->showMaximized(); 2981 sp->showMaximized();
2979#else 2982#else
2980 sp->show(); 2983 sp->show();
2981#endif 2984#endif
2982 sp->exec(); 2985 sp->exec();
2983 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 2986 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
2984 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 2987 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
2985 fillSyncMenu(); 2988 fillSyncMenu();
2986} 2989}
2987void KABCore::syncSharp() 2990void KABCore::syncSharp()
2988{ 2991{
2989 if ( mModified ) 2992 if ( mModified )
2990 save(); 2993 save();
2991 qDebug("pending syncSharp() "); 2994 qDebug("pending syncSharp() ");
2992 //mView->syncSharp(); 2995 //mView->syncSharp();
2993 setModified(); 2996 setModified();
2994 2997
2995} 2998}
2996void KABCore::syncPhone() 2999void KABCore::syncPhone()
2997{ 3000{
2998 if ( mModified ) 3001 if ( mModified )
2999 save(); 3002 save();
3000 qDebug("pending syncPhone(); "); 3003 qDebug("pending syncPhone(); ");
3001 //mView->syncPhone(); 3004 //mView->syncPhone();
3002 setModified(); 3005 setModified();
3003 3006
3004} 3007}