summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
Unidiff
Diffstat (limited to 'libopie2/opiepim/backend/ocontactaccessbackend_xml.h') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_xml.h24
1 files changed, 15 insertions, 9 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
index ae6ec9e..c765ff5 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
@@ -8,24 +8,27 @@
8 *modify it under the terms of the GNU Library General Public 8 *modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * ===================================================================== 11 * =====================================================================
12 * ToDo: XML-Backend: Automatic reload if something was changed... 12 * ToDo: XML-Backend: Automatic reload if something was changed...
13 * 13 *
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.9 2002/12/08 12:48:57 eilers
21 * Moved journal-enum from ocontact into i the xml-backend..
22 *
20 * Revision 1.8 2002/11/14 17:04:24 eilers 23 * Revision 1.8 2002/11/14 17:04:24 eilers
21 * Sorting will now work if fullname is identical on some entries 24 * Sorting will now work if fullname is identical on some entries
22 * 25 *
23 * Revision 1.7 2002/11/13 15:02:46 eilers 26 * Revision 1.7 2002/11/13 15:02:46 eilers
24 * Small Bug in sorted fixed 27 * Small Bug in sorted fixed
25 * 28 *
26 * Revision 1.6 2002/11/13 14:14:51 eilers 29 * Revision 1.6 2002/11/13 14:14:51 eilers
27 * Added sorted for Contacts.. 30 * Added sorted for Contacts..
28 * 31 *
29 * Revision 1.5 2002/11/01 15:10:42 eilers 32 * Revision 1.5 2002/11/01 15:10:42 eilers
30 * Added regExp-search in database for all fields in a contact. 33 * Added regExp-search in database for all fields in a contact.
31 * 34 *
@@ -333,100 +336,103 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
333 m_currentQuery[i++] = nameToUid[ (*it) ]; 336 m_currentQuery[i++] = nameToUid[ (*it) ];
334 }else{ 337 }else{
335 for ( QStringList::Iterator it = names.end(); it != names.begin(); --it ) 338 for ( QStringList::Iterator it = names.end(); it != names.begin(); --it )
336 m_currentQuery[i++] = nameToUid[ (*it) ]; 339 m_currentQuery[i++] = nameToUid[ (*it) ];
337 } 340 }
338 341
339 return m_currentQuery; 342 return m_currentQuery;
340 343
341 } 344 }
342 bool add ( const OContact &newcontact ) 345 bool add ( const OContact &newcontact )
343 { 346 {
344 //qWarning("odefaultbackend: ACTION::ADD"); 347 //qWarning("odefaultbackend: ACTION::ADD");
345 updateJournal (newcontact, OContact::ACTION_ADD); 348 updateJournal (newcontact, ACTION_ADD);
346 addContact_p( newcontact ); 349 addContact_p( newcontact );
347 350
348 m_changed = true; 351 m_changed = true;
349 352
350 return true; 353 return true;
351 } 354 }
352 355
353 bool replace ( const OContact &contact ) 356 bool replace ( const OContact &contact )
354 { 357 {
355 m_changed = true; 358 m_changed = true;
356 359
357 bool found = false; 360 bool found = false;
358 361
359 QValueListIterator<OContact> it; 362 QValueListIterator<OContact> it;
360 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ 363 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){
361 if ( (*it).uid() == contact.uid() ){ 364 if ( (*it).uid() == contact.uid() ){
362 found = true; 365 found = true;
363 break; 366 break;
364 } 367 }
365 } 368 }
366 if (found) { 369 if (found) {
367 updateJournal (contact, OContact::ACTION_REPLACE); 370 updateJournal (contact, ACTION_REPLACE);
368 m_contactList.remove (it); 371 m_contactList.remove (it);
369 m_contactList.append (contact); 372 m_contactList.append (contact);
370 return true; 373 return true;
371 } else 374 } else
372 return false; 375 return false;
373 } 376 }
374 377
375 bool remove ( int uid ) 378 bool remove ( int uid )
376 { 379 {
377 m_changed = true; 380 m_changed = true;
378 381
379 bool found = false; 382 bool found = false;
380 QValueListIterator<OContact> it; 383 QValueListIterator<OContact> it;
381 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){ 384 for( it = m_contactList.begin(); it != m_contactList.end(); ++it ){
382 if ((*it).uid() == uid){ 385 if ((*it).uid() == uid){
383 found = true; 386 found = true;
384 break; 387 break;
385 } 388 }
386 } 389 }
387 if (found) { 390 if (found) {
388 updateJournal ( *it, OContact::ACTION_REMOVE); 391 updateJournal ( *it, ACTION_REMOVE);
389 m_contactList.remove (it); 392 m_contactList.remove (it);
390 return true; 393 return true;
391 } else 394 } else
392 return false; 395 return false;
393 } 396 }
394 397
395 bool reload(){ 398 bool reload(){
396 /* Reload is the same as load in this implementation */ 399 /* Reload is the same as load in this implementation */
397 return ( load() ); 400 return ( load() );
398 } 401 }
399 402
400 private: 403 private:
404
405 enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
406
401 void addContact_p( const OContact &newcontact ){ 407 void addContact_p( const OContact &newcontact ){
402 m_contactList.append (newcontact); 408 m_contactList.append (newcontact);
403 } 409 }
404 410
405 /* This function loads the xml-database and the journalfile */ 411 /* This function loads the xml-database and the journalfile */
406 bool load( const QString filename, bool isJournal ) { 412 bool load( const QString filename, bool isJournal ) {
407 413
408 /* We use the time of the last read to check if the file was 414 /* We use the time of the last read to check if the file was
409 * changed externally. 415 * changed externally.
410 */ 416 */
411 if ( !isJournal ){ 417 if ( !isJournal ){
412 QFileInfo fi( filename ); 418 QFileInfo fi( filename );
413 m_readtime = fi.lastModified (); 419 m_readtime = fi.lastModified ();
414 } 420 }
415 421
416 const int JOURNALACTION = Qtopia::Notes + 1; 422 const int JOURNALACTION = Qtopia::Notes + 1;
417 const int JOURNALROW = JOURNALACTION + 1; 423 const int JOURNALROW = JOURNALACTION + 1;
418 424
419 bool foundAction = false; 425 bool foundAction = false;
420 OContact::journal_action action = OContact::ACTION_ADD; 426 journal_action action = ACTION_ADD;
421 int journalKey = 0; 427 int journalKey = 0;
422 QMap<int, QString> contactMap; 428 QMap<int, QString> contactMap;
423 QMap<QString, QString> customMap; 429 QMap<QString, QString> customMap;
424 QMap<QString, QString>::Iterator customIt; 430 QMap<QString, QString>::Iterator customIt;
425 QAsciiDict<int> dict( 47 ); 431 QAsciiDict<int> dict( 47 );
426 432
427 dict.setAutoDelete( TRUE ); 433 dict.setAutoDelete( TRUE );
428 dict.insert( "Uid", new int(Qtopia::AddressUid) ); 434 dict.insert( "Uid", new int(Qtopia::AddressUid) );
429 dict.insert( "Title", new int(Qtopia::Title) ); 435 dict.insert( "Title", new int(Qtopia::Title) );
430 dict.insert( "FirstName", new int(Qtopia::FirstName) ); 436 dict.insert( "FirstName", new int(Qtopia::FirstName) );
431 dict.insert( "MiddleName", new int(Qtopia::MiddleName) ); 437 dict.insert( "MiddleName", new int(Qtopia::MiddleName) );
432 dict.insert( "LastName", new int(Qtopia::LastName) ); 438 dict.insert( "LastName", new int(Qtopia::LastName) );
@@ -529,55 +535,55 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
529 * into Contact class 535 * into Contact class
530 */ 536 */
531 switch( *find ) { 537 switch( *find ) {
532 /* 538 /*
533 case Qtopia::AddressUid: 539 case Qtopia::AddressUid:
534 contact.setUid( it.data().toInt() ); 540 contact.setUid( it.data().toInt() );
535 break; 541 break;
536 case Qtopia::AddressCategory: 542 case Qtopia::AddressCategory:
537 contact.setCategories( Qtopia::Record::idsFromString( it.data( ))); 543 contact.setCategories( Qtopia::Record::idsFromString( it.data( )));
538 break; 544 break;
539 */ 545 */
540 case JOURNALACTION: 546 case JOURNALACTION:
541 action = OContact::journal_action(it.data().toInt()); 547 action = journal_action(it.data().toInt());
542 foundAction = true; 548 foundAction = true;
543 qWarning ("ODefBack(journal)::ACTION found: %d", action); 549 qWarning ("ODefBack(journal)::ACTION found: %d", action);
544 break; 550 break;
545 case JOURNALROW: 551 case JOURNALROW:
546 journalKey = it.data().toInt(); 552 journalKey = it.data().toInt();
547 break; 553 break;
548 default: // no conversion needed add them to the map 554 default: // no conversion needed add them to the map
549 contactMap.insert( *find, it.data() ); 555 contactMap.insert( *find, it.data() );
550 break; 556 break;
551 } 557 }
552 } 558 }
553 /* now generate the Contact contact */ 559 /* now generate the Contact contact */
554 OContact contact( contactMap ); 560 OContact contact( contactMap );
555 561
556 for (customIt = customMap.begin(); customIt != customMap.end(); ++customIt ) { 562 for (customIt = customMap.begin(); customIt != customMap.end(); ++customIt ) {
557 contact.setCustomField( customIt.key(), customIt.data() ); 563 contact.setCustomField( customIt.key(), customIt.data() );
558 } 564 }
559 565
560 if (foundAction){ 566 if (foundAction){
561 foundAction = false; 567 foundAction = false;
562 switch ( action ) { 568 switch ( action ) {
563 case OContact::ACTION_ADD: 569 case ACTION_ADD:
564 addContact_p (contact); 570 addContact_p (contact);
565 break; 571 break;
566 case OContact::ACTION_REMOVE: 572 case ACTION_REMOVE:
567 if ( !remove (contact.uid()) ) 573 if ( !remove (contact.uid()) )
568 qWarning ("ODefBack(journal)::Unable to remove uid: %d", 574 qWarning ("ODefBack(journal)::Unable to remove uid: %d",
569 contact.uid() ); 575 contact.uid() );
570 break; 576 break;
571 case OContact::ACTION_REPLACE: 577 case ACTION_REPLACE:
572 if ( !replace ( contact ) ) 578 if ( !replace ( contact ) )
573 qWarning ("ODefBack(journal)::Unable to replace uid: %d", 579 qWarning ("ODefBack(journal)::Unable to replace uid: %d",
574 contact.uid() ); 580 contact.uid() );
575 break; 581 break;
576 default: 582 default:
577 qWarning ("Unknown action: ignored !"); 583 qWarning ("Unknown action: ignored !");
578 break; 584 break;
579 } 585 }
580 }else{ 586 }else{
581 /* Add contact to list */ 587 /* Add contact to list */
582 addContact_p (contact); 588 addContact_p (contact);
583 } 589 }
@@ -586,25 +592,25 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
586 element = element->nextChild(); 592 element = element->nextChild();
587 } 593 }
588 }else { 594 }else {
589 qWarning("ODefBack::could not load"); 595 qWarning("ODefBack::could not load");
590 } 596 }
591 delete root; 597 delete root;
592 qWarning("returning from loading" ); 598 qWarning("returning from loading" );
593 return true; 599 return true;
594 } 600 }
595 601
596 602
597 void updateJournal( const OContact& cnt, 603 void updateJournal( const OContact& cnt,
598 OContact::journal_action action ) { 604 journal_action action ) {
599 QFile f( m_journalName ); 605 QFile f( m_journalName );
600 bool created = !f.exists(); 606 bool created = !f.exists();
601 if ( !f.open(IO_WriteOnly|IO_Append) ) 607 if ( !f.open(IO_WriteOnly|IO_Append) )
602 return; 608 return;
603 609
604 QString buf; 610 QString buf;
605 QCString str; 611 QCString str;
606 612
607 // if the file was created, we have to set the Tag "<CONTACTS>" to 613 // if the file was created, we have to set the Tag "<CONTACTS>" to
608 // get a XML-File which is readable by our parser. 614 // get a XML-File which is readable by our parser.
609 // This is just a cheat, but better than rewrite the parser. 615 // This is just a cheat, but better than rewrite the parser.
610 if ( created ){ 616 if ( created ){