-rw-r--r-- | kabc/addressbook.cpp | 26 | ||||
-rw-r--r-- | kabc/addressbook.h | 4 | ||||
-rw-r--r-- | kabc/addressee.cpp | 12 | ||||
-rw-r--r-- | kabc/addressee.h | 3 |
4 files changed, 41 insertions, 4 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp index 1050f55..ff05f7e 100644 --- a/kabc/addressbook.cpp +++ b/kabc/addressbook.cpp @@ -400,18 +400,19 @@ void AddressBook::export2File( QString fileName ) converter.addresseeToVCard( *it, vcard, version ); t << vcard << "\r\n"; } t << "\r\n\r\n"; outFile.close(); } -void AddressBook::importFromFile( QString fileName, bool replaceLabel ) +void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld ) { + if ( removeOld ) + setUntagged(); KABC::Addressee::List list; QFile file( fileName ); - file.open( IO_ReadOnly ); QByteArray rawData = file.readAll(); file.close(); QString data; if ( replaceLabel ) { data = QString::fromLatin1( rawData.data(), rawData.size() + 1 ); @@ -423,17 +424,36 @@ void AddressBook::importFromFile( QString fileName, bool replaceLabel ) list = tool.parseVCards( data ); KABC::Addressee::List::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { (*it).setResource( 0 ); if ( replaceLabel ) (*it).removeVoice(); + if ( removeOld ) + (*it).setTagged( true ); insertAddressee( (*it), false, true ); } - + if ( removeOld ) + removeUntagged(); +} +void AddressBook::setUntagged() +{ + Iterator ait; + for ( ait = begin(); ait != end(); ++ait ) { + (*ait).setTagged( false ); + } +} +void AddressBook::removeUntagged() +{ + Iterator ait; + for ( ait = begin(); ait != end(); ++ait ) { + if (!(*ait).tagged()) + removeAddressee( ait ); } + deleteRemovedAddressees(); +} bool AddressBook::saveAB() { bool ok = true; deleteRemovedAddressees(); Iterator ait; diff --git a/kabc/addressbook.h b/kabc/addressbook.h index cea1b03..532e05d 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h @@ -140,13 +140,15 @@ class AddressBook : public QObject @param ticket a ticket object returned by @ref requestSaveTicket() */ bool save( Ticket *ticket ); bool saveAB( ); void export2File( QString fileName ); - void importFromFile( QString fileName, bool replaceLabel = false ); + void importFromFile( QString fileName, bool replaceLabel = false, bool removeOld = false ); + void setUntagged(); + void removeUntagged(); /** Returns a iterator for first entry of address book. */ Iterator begin(); /** diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index 3f3d5c0..607ae26 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp @@ -85,12 +85,13 @@ struct Addressee::AddresseeData : public KShared QStringList custom; int mTempSyncStat; Resource *resource; bool empty :1; bool changed :1; + bool tagged :1; }; Addressee::Addressee() { mData = new AddresseeData; mData->empty = true; @@ -1818,12 +1819,23 @@ void Addressee::setChanged( bool value ) bool Addressee::changed() const { return mData->changed; } +void Addressee::setTagged( bool value ) +{ + detach(); + mData->tagged = value; +} + +bool Addressee::tagged() const +{ + return mData->tagged; +} + QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) { if (!a.mData) return s; s << a.uid(); diff --git a/kabc/addressee.h b/kabc/addressee.h index 9336edc..0aa2c51 100644 --- a/kabc/addressee.h +++ b/kabc/addressee.h @@ -830,12 +830,15 @@ class Addressee /** Return whether the addressee is changed. */ bool changed() const; + void setTagged( bool value ); + bool tagged() const; + private: Addressee copy(); void detach(); struct AddresseeData; mutable KSharedPtr<AddresseeData> mData; |