summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp35
-rw-r--r--kabc/addressbook.h2
-rw-r--r--kaddressbook/kabcore.cpp146
-rw-r--r--microkde/kresources/configdialog.cpp5
-rw-r--r--microkde/kresources/configdialog.h1
-rw-r--r--microkde/kresources/resource.cpp14
-rw-r--r--microkde/kresources/resource.h2
7 files changed, 119 insertions, 86 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 8882259..592d78d 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -375,8 +375,9 @@ bool AddressBook::save( Ticket *ticket )
375 } 375 }
376 376
377 return false; 377 return false;
378} 378}
379// exports all Addressees, which are syncable
379void AddressBook::export2File( QString fileName ) 380void AddressBook::export2File( QString fileName )
380{ 381{
381 382
382 QFile outFile( fileName ); 383 QFile outFile( fileName );
@@ -389,17 +390,19 @@ void AddressBook::export2File( QString fileName )
389 t.setEncoding( QTextStream::UnicodeUTF8 ); 390 t.setEncoding( QTextStream::UnicodeUTF8 );
390 Iterator it; 391 Iterator it;
391 KABC::VCardConverter::Version version; 392 KABC::VCardConverter::Version version;
392 version = KABC::VCardConverter::v3_0; 393 version = KABC::VCardConverter::v3_0;
393 for ( it = begin(); it != end(); ++it ) { 394 for ( it = begin(); it != end(); ++it ) {
394 if ( !(*it).IDStr().isEmpty() ) { 395 if ( (*it).resource() && (*it).resource()->includeInSync() ) {
395 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() ); 396 if ( !(*it).IDStr().isEmpty() ) {
397 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() );
398 }
399 KABC::VCardConverter converter;
400 QString vcard;
401 //Resource *resource() const;
402 converter.addresseeToVCard( *it, vcard, version );
403 t << vcard << "\r\n";
396 } 404 }
397 KABC::VCardConverter converter;
398 QString vcard;
399 //Resource *resource() const;
400 converter.addresseeToVCard( *it, vcard, version );
401 t << vcard << "\r\n";
402 } 405 }
403 t << "\r\n\r\n"; 406 t << "\r\n\r\n";
404 outFile.close(); 407 outFile.close();
405} 408}
@@ -414,12 +417,14 @@ bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName )
414 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 417 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
415 if ( ! all ) { 418 if ( ! all ) {
416 if ( ! ( uids.contains((*it).uid() ) )) 419 if ( ! ( uids.contains((*it).uid() ) ))
417 continue; 420 continue;
418 } 421 }
419 KABC::Addressee a = ( *it ); 422 KABC::Addressee a = ( *it );
420 if ( a.isEmpty() ) 423 if ( a.isEmpty() )
421 continue; 424 continue;
425 if ( all && a.resource() && !a.resource()->includeInSync() )
426 continue;
422 a.simplifyEmails(); 427 a.simplifyEmails();
423 a.simplifyPhoneNumbers(); 428 a.simplifyPhoneNumbers();
424 a.simplifyPhoneNumberTypes(); 429 a.simplifyPhoneNumberTypes();
425 a.simplifyAddresses(); 430 a.simplifyAddresses();
@@ -475,9 +480,9 @@ bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName )
475void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld ) 480void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld )
476{ 481{
477 482
478 if ( removeOld ) 483 if ( removeOld )
479 setUntagged(); 484 setUntagged( true );
480 KABC::Addressee::List list; 485 KABC::Addressee::List list;
481 QFile file( fileName ); 486 QFile file( fileName );
482 file.open( IO_ReadOnly ); 487 file.open( IO_ReadOnly );
483 QByteArray rawData = file.readAll(); 488 QByteArray rawData = file.readAll();
@@ -505,13 +510,19 @@ void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool rem
505 } 510 }
506 if ( removeOld ) 511 if ( removeOld )
507 removeUntagged(); 512 removeUntagged();
508} 513}
509void AddressBook::setUntagged() 514void AddressBook::setUntagged(bool setNonSyncTagged) // = false)
510{ 515{
511 Iterator ait; 516 Iterator ait;
512 for ( ait = begin(); ait != end(); ++ait ) { 517 for ( ait = begin(); ait != end(); ++ait ) {
513 (*ait).setTagged( false ); 518 if ( setNonSyncTagged ) {
519 if ( (*ait).resource() && ! (*ait).resource()->includeInSync() ) {
520 (*ait).setTagged( true );
521 } else
522 (*ait).setTagged( false );
523 } else
524 (*ait).setTagged( false );
514 } 525 }
515} 526}
516void AddressBook::removeUntagged() 527void AddressBook::removeUntagged()
517{ 528{
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index a6bf451..23bba02 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -147,9 +147,9 @@ class AddressBook : public QObject
147 void preparePhoneSync( QString currentSyncDevice, bool isPreSync ); 147 void preparePhoneSync( QString currentSyncDevice, bool isPreSync );
148 void export2File( QString fileName ); 148 void export2File( QString fileName );
149 bool export2PhoneFormat( QStringList uids ,QString fileName ); 149 bool export2PhoneFormat( QStringList uids ,QString fileName );
150 void importFromFile( QString fileName, bool replaceLabel = false, bool removeOld = false ); 150 void importFromFile( QString fileName, bool replaceLabel = false, bool removeOld = false );
151 void setUntagged(); 151 void setUntagged( bool setNonSyncTagged = false );
152 void removeUntagged(); 152 void removeUntagged();
153 void findNewExtIds( QString fileName, QString currentSyncDevice ); 153 void findNewExtIds( QString fileName, QString currentSyncDevice );
154 /** 154 /**
155 Returns a iterator for first entry of address book. 155 Returns a iterator for first entry of address book.
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index ea34be2..47ed858 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2550,50 +2550,52 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2550 inR = remote->findByUid( uid ); 2550 inR = remote->findByUid( uid );
2551 //inL.setResource( 0 ); 2551 //inL.setResource( 0 );
2552 //inR.setResource( 0 ); 2552 //inR.setResource( 0 );
2553 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2553 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2554 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2554 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2555 //qDebug("take %d %s ", take, inL.summary().latin1()); 2555 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2556 if ( take == 3 ) 2556 //qDebug("take %d %s ", take, inL.summary().latin1());
2557 return false; 2557 if ( take == 3 )
2558 if ( take == 1 ) {// take local 2558 return false;
2559 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2559 if ( take == 1 ) {// take local
2560 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2560 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2561 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2561 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2562 local->insertAddressee( inL, false ); 2562 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2563 idS = inR.externalUID(); 2563 local->insertAddressee( inL, false );
2564 OidS = inR.originalExternalUID(); 2564 idS = inR.externalUID();
2565 } 2565 OidS = inR.originalExternalUID();
2566 else 2566 }
2567 idS = inR.IDStr(); 2567 else
2568 remote->removeAddressee( inR ); 2568 idS = inR.IDStr();
2569 inR = inL; 2569 remote->removeAddressee( inR );
2570 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2570 inR = inL;
2571 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2571 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2572 inR.setOriginalExternalUID( OidS ); 2572 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2573 inR.setExternalUID( idS ); 2573 inR.setOriginalExternalUID( OidS );
2574 } else { 2574 inR.setExternalUID( idS );
2575 inR.setIDStr( idS ); 2575 } else {
2576 } 2576 inR.setIDStr( idS );
2577 inR.setResource( 0 ); 2577 }
2578 remote->insertAddressee( inR , false); 2578 inR.setResource( 0 );
2579 ++changedRemote; 2579 remote->insertAddressee( inR , false);
2580 } else { // take == 2 take remote 2580 ++changedRemote;
2581 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2581 } else { // take == 2 take remote
2582 if ( inR.revision().date().year() < 2004 ) 2582 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2583 inR.setRevision( modifiedCalendar ); 2583 if ( inR.revision().date().year() < 2004 )
2584 } 2584 inR.setRevision( modifiedCalendar );
2585 idS = inL.IDStr(); 2585 }
2586 local->removeAddressee( inL ); 2586 idS = inL.IDStr();
2587 inL = inR; 2587 local->removeAddressee( inL );
2588 inL.setIDStr( idS ); 2588 inL = inR;
2589 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2589 inL.setIDStr( idS );
2590 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2590 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2591 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2591 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2592 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2593 }
2594 inL.setResource( 0 );
2595 local->insertAddressee( inL , false );
2596 ++changedLocal;
2592 } 2597 }
2593 inL.setResource( 0 );
2594 local->insertAddressee( inL , false );
2595 ++changedLocal;
2596 } 2598 }
2597 } 2599 }
2598 } else { // no conflict 2600 } else { // no conflict
2599 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2601 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
@@ -2644,40 +2646,42 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2644 if ( uid.left(19) == QString("last-syncAddressee-") ) 2646 if ( uid.left(19) == QString("last-syncAddressee-") )
2645 skipIncidence = true; 2647 skipIncidence = true;
2646 if ( !skipIncidence ) { 2648 if ( !skipIncidence ) {
2647 inL = local->findByUid( uid ); 2649 inL = local->findByUid( uid );
2648 inR = remote->findByUid( uid ); 2650 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2649 if ( inR.isEmpty() ) { 2651 inR = remote->findByUid( uid );
2650 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2652 if ( inR.isEmpty() ) {
2651 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2653 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2652 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2654 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2653 local->removeAddressee( inL ); 2655 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2654 ++deletedAddresseeL; 2656 local->removeAddressee( inL );
2655 } else { 2657 ++deletedAddresseeL;
2656 if ( ! syncManager->mWriteBackExistingOnly ) { 2658 } else {
2657 inL.removeID(mCurrentSyncDevice ); 2659 if ( ! syncManager->mWriteBackExistingOnly ) {
2658 ++addedAddresseeR; 2660 inL.removeID(mCurrentSyncDevice );
2659 inL.setRevision( modifiedCalendar ); 2661 ++addedAddresseeR;
2660 local->insertAddressee( inL, false ); 2662 inL.setRevision( modifiedCalendar );
2661 inR = inL; 2663 local->insertAddressee( inL, false );
2662 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2664 inR = inL;
2663 inR.setResource( 0 ); 2665 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2664 remote->insertAddressee( inR, false ); 2666 inR.setResource( 0 );
2667 remote->insertAddressee( inR, false );
2668 }
2665 } 2669 }
2666 }
2667 } else {
2668 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2669 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2670 local->removeAddressee( inL );
2671 ++deletedAddresseeL;
2672 } else { 2670 } else {
2673 if ( ! syncManager->mWriteBackExistingOnly ) { 2671 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2674 ++addedAddresseeR; 2672 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2675 inL.setRevision( modifiedCalendar ); 2673 local->removeAddressee( inL );
2676 local->insertAddressee( inL, false ); 2674 ++deletedAddresseeL;
2677 inR = inL; 2675 } else {
2678 inR.setResource( 0 ); 2676 if ( ! syncManager->mWriteBackExistingOnly ) {
2679 remote->insertAddressee( inR, false ); 2677 ++addedAddresseeR;
2678 inL.setRevision( modifiedCalendar );
2679 local->insertAddressee( inL, false );
2680 inR = inL;
2681 inR.setResource( 0 );
2682 remote->insertAddressee( inR, false );
2683 }
2680 } 2684 }
2681 } 2685 }
2682 } 2686 }
2683 } 2687 }
diff --git a/microkde/kresources/configdialog.cpp b/microkde/kresources/configdialog.cpp
index f8240f9..030b547 100644
--- a/microkde/kresources/configdialog.cpp
+++ b/microkde/kresources/configdialog.cpp
@@ -74,10 +74,14 @@ ConfigDialog::ConfigDialog( QWidget *parent, const QString& resourceFamily,
74 74
75 mName = new KLineEdit( generalGroupBox ); 75 mName = new KLineEdit( generalGroupBox );
76 76
77 if (!mResource->isSyncable()) { 77 if (!mResource->isSyncable()) {
78 new QLabel("", generalGroupBox );
78 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox ); 79 mReadOnly = new QCheckBox( i18n( "Read-only" ), generalGroupBox );
79 mReadOnly->setChecked( mResource->readOnly() ); 80 mReadOnly->setChecked( mResource->readOnly() );
81 new QLabel("", generalGroupBox );
82 mIncludeInSync = new QCheckBox( i18n( "Include in sync" ), generalGroupBox );
83 mIncludeInSync->setChecked( mResource->includeInSync() );
80 } 84 }
81 85
82 mName->setText( mResource->resourceName() ); 86 mName->setText( mResource->resourceName() );
83 87
@@ -219,8 +223,9 @@ void ConfigDialog::accept()
219 223
220 mResource->setResourceName( mName->text() ); 224 mResource->setResourceName( mName->text() );
221 if (!mResource->isSyncable()) 225 if (!mResource->isSyncable())
222 mResource->setReadOnly( mReadOnly->isChecked() ); 226 mResource->setReadOnly( mReadOnly->isChecked() );
227 mResource->setIncludeInSync( mIncludeInSync->isChecked() );
223 228
224 if ( mConfigWidget ) { 229 if ( mConfigWidget ) {
225 // First save generic information 230 // First save generic information
226 // Also save setting of specific resource type 231 // Also save setting of specific resource type
diff --git a/microkde/kresources/configdialog.h b/microkde/kresources/configdialog.h
index 63cd4e9..ed3ecab 100644
--- a/microkde/kresources/configdialog.h
+++ b/microkde/kresources/configdialog.h
@@ -57,8 +57,9 @@ class ConfigDialog : public KDialogBase
57 Resource* mResource; 57 Resource* mResource;
58 58
59 KLineEdit *mName; 59 KLineEdit *mName;
60 QCheckBox *mReadOnly; 60 QCheckBox *mReadOnly;
61 QCheckBox *mIncludeInSync;
61//US add a persistent readonly flag. We need that for opie and qtopia addressbooks. 62//US add a persistent readonly flag. We need that for opie and qtopia addressbooks.
62 bool mPersistentReadOnly; 63 bool mPersistentReadOnly;
63}; 64};
64 65
diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp
index 4f69540..f79bcd0 100644
--- a/microkde/kresources/resource.cpp
+++ b/microkde/kresources/resource.cpp
@@ -38,8 +38,9 @@ class Resource::ResourcePrivate
38 int mOpenCount; 38 int mOpenCount;
39 QString mType; 39 QString mType;
40 QString mIdentifier; 40 QString mIdentifier;
41 bool mReadOnly; 41 bool mReadOnly;
42 bool mIncludeInSync;
42 QString mName; 43 QString mName;
43 bool mActive; 44 bool mActive;
44 bool mIsOpen; 45 bool mIsOpen;
45}; 46};
@@ -62,14 +63,16 @@ Resource::Resource( const KConfig* config )
62#endif 63#endif
63 d->mType = cfg->readEntry( "ResourceType" ); 64 d->mType = cfg->readEntry( "ResourceType" );
64 d->mName = cfg->readEntry( "ResourceName" ); 65 d->mName = cfg->readEntry( "ResourceName" );
65 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false ); 66 d->mReadOnly = cfg->readBoolEntry( "ResourceIsReadOnly", false );
67 d->mIncludeInSync = cfg->readBoolEntry( "ResourceIncludeInSync", true );;
66 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true ); 68 d->mActive = cfg->readBoolEntry( "ResourceIsActive", true );
67 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" ); 69 d->mIdentifier = cfg->readEntry( "ResourceIdentifier" );
68 } else { 70 } else {
69 d->mType = "type"; 71 d->mType = "type";
70 d->mName = "resource-name"; 72 d->mName = "resource-name";
71 d->mReadOnly = false; 73 d->mReadOnly = false;
74 d->mIncludeInSync = true;
72 d->mActive = true; 75 d->mActive = true;
73 d->mIdentifier = KApplication::randomString( 10 ); 76 d->mIdentifier = KApplication::randomString( 10 );
74 } 77 }
75} 78}
@@ -81,13 +84,12 @@ Resource::~Resource()
81} 84}
82 85
83void Resource::writeConfig( KConfig* config ) 86void Resource::writeConfig( KConfig* config )
84{ 87{
85
86
87 config->writeEntry( "ResourceType", d->mType ); 88 config->writeEntry( "ResourceType", d->mType );
88 config->writeEntry( "ResourceName", d->mName ); 89 config->writeEntry( "ResourceName", d->mName );
89 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly ); 90 config->writeEntry( "ResourceIsReadOnly", d->mReadOnly );
91 config->writeEntry( "ResourceIncludeInSync", d->mIncludeInSync );
90 config->writeEntry( "ResourceIsActive", d->mActive ); 92 config->writeEntry( "ResourceIsActive", d->mActive );
91 config->writeEntry( "ResourceIdentifier", d->mIdentifier ); 93 config->writeEntry( "ResourceIdentifier", d->mIdentifier );
92} 94}
93 95
@@ -148,8 +150,16 @@ QString Resource::type() const
148{ 150{
149 return d->mType; 151 return d->mType;
150} 152}
151 153
154void Resource::setIncludeInSync( bool value )
155{
156 d->mIncludeInSync = value;
157}
158bool Resource::includeInSync() const
159{
160 return d->mIncludeInSync;
161}
152void Resource::setReadOnly( bool value ) 162void Resource::setReadOnly( bool value )
153{ 163{
154 d->mReadOnly = value; 164 d->mReadOnly = value;
155} 165}
diff --git a/microkde/kresources/resource.h b/microkde/kresources/resource.h
index 580b5d1..70b5613 100644
--- a/microkde/kresources/resource.h
+++ b/microkde/kresources/resource.h
@@ -309,8 +309,10 @@ class Resource : public QObject
309 * Returns, if the resource is read-only. 309 * Returns, if the resource is read-only.
310 */ 310 */
311 virtual bool readOnly() const; 311 virtual bool readOnly() const;
312 312
313 void setIncludeInSync( bool value );
314 bool includeInSync() const;
313 /** 315 /**
314 * Set the name of resource.You can override this method, 316 * Set the name of resource.You can override this method,
315 * but also remember to call Resource::setResourceName(). 317 * but also remember to call Resource::setResourceName().
316 */ 318 */