diff options
Diffstat (limited to 'libkdepim/distributionlist.cpp')
-rw-r--r-- | libkdepim/distributionlist.cpp | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/libkdepim/distributionlist.cpp b/libkdepim/distributionlist.cpp deleted file mode 100644 index 4cf079c76..000000000 --- a/libkdepim/distributionlist.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include "distributionlist.h" -#include <kabc/addressbook.h> - -static const char* s_customFieldName = "DistributionList"; - -KPIM::DistributionList::DistributionList() - : KABC::Addressee() -{ - // can't insert the custom entry here, we need to remain a null addressee -} - -KPIM::DistributionList::DistributionList( const KABC::Addressee& addr ) - : KABC::Addressee( addr ) -{ -} - -void KPIM::DistributionList::setName( const TQString &name ) -{ - // We can't use Addressee::setName, the name isn't saved/loaded in the vcard (fixed in 3.4) - Addressee::setFormattedName( name ); - // Also set family name, just in case this entry appears in the normal contacts list (e.g. old kaddressbook) - Addressee::setFamilyName( name ); - // We're not an empty addressee anymore - // Set the custom field to non-empty, so that isDistributionList works - if ( custom( "KADDRESSBOOK", s_customFieldName ).isEmpty() ) - insertCustom( "KADDRESSBOOK", s_customFieldName, ";" ); -} - -// Helper function, to parse the contents of the custom field -// Returns a list of { uid, email } -typedef TQValueList<TQPair<TQString, TQString> > ParseList; -static ParseList parseCustom( const TQString& str ) -{ - ParseList res; - const TQStringList lst = TQStringList::split( ';', str ); - for( TQStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it ) { - if ( (*it).isEmpty() ) - continue; - // parse "uid,email" - TQStringList helpList = TQStringList::split( ',', (*it), true ); - Q_ASSERT( !helpList.isEmpty() ); - if ( helpList.isEmpty() ) - continue; - Q_ASSERT( helpList.count() < 3 ); // 1 or 2 items, but not more - const TQString uid = helpList.first(); - const TQString email = helpList.last(); - res.append( tqMakePair( uid, email ) ); - } - return res; -} - -void KPIM::DistributionList::insertEntry( const Addressee& addr, const TQString& email ) -{ - // insertEntry will removeEntry(uid), but not with formattedName - removeEntry( addr.formattedName(), email ); - insertEntry( addr.uid(), email ); -} - -void KPIM::DistributionList::insertEntry( const TQString& uid, const TQString& email ) -{ - Q_ASSERT( !email.isEmpty() || email.isNull() ); // hopefully never called with "", would lead to confusion - removeEntry( uid, email ); // avoid duplicates - TQString str = custom( "KADDRESSBOOK", s_customFieldName ); - // Assumption: UIDs don't contain ; nor , - str += ";" + uid + "," + email; - insertCustom( "KADDRESSBOOK", s_customFieldName, str ); // replace old value -} - -void KPIM::DistributionList::removeEntry( const Addressee& addr, const TQString& email ) -{ - removeEntry( addr.uid(), email ); - // Also remove entries with the full name as uid (for the kolab thing) - removeEntry( addr.formattedName(), email ); -} - -void KPIM::DistributionList::removeEntry( const TQString& uid, const TQString& email ) -{ - Q_ASSERT( !email.isEmpty() || email.isNull() ); // hopefully never called with "", would lead to confusion - ParseList parseList = parseCustom( custom( "KADDRESSBOOK", s_customFieldName ) ); - TQString str; - for( ParseList::ConstIterator it = parseList.begin(); it != parseList.end(); ++it ) { - const TQString thisUid = (*it).first; - const TQString thisEmail = (*it).second; - if ( thisUid == uid && thisEmail == email ) { - continue; // remove that one - } - str += ";" + thisUid + "," + thisEmail; - } - if ( str.isEmpty() ) - str = ";"; // keep something, for isDistributionList to work - insertCustom( "KADDRESSBOOK", s_customFieldName, str ); // replace old value -} - -bool KPIM::DistributionList::isDistributionList( const KABC::Addressee& addr ) -{ - const TQString str = addr.custom( "KADDRESSBOOK", s_customFieldName ); - return !str.isEmpty(); -} - -// ###### KDE4: add findByFormattedName to KABC::AddressBook -static KABC::Addressee::List findByFormattedName( KABC::AddressBook* book, - const TQString& name, - bool caseSensitive = true ) -{ - KABC::Addressee::List res; - KABC::AddressBook::Iterator abIt; - for ( abIt = book->begin(); abIt != book->end(); ++abIt ) - { - if ( caseSensitive && (*abIt).formattedName() == name ) - res.append( *abIt ); - if ( !caseSensitive && (*abIt).formattedName().lower() == name.lower() ) - res.append( *abIt ); - } - return res; -} - -KPIM::DistributionList KPIM::DistributionList::findByName( KABC::AddressBook* book, - const TQString& name, - bool caseSensitive ) -{ - KABC::AddressBook::Iterator abIt; - for ( abIt = book->begin(); abIt != book->end(); ++abIt ) - { - if ( isDistributionList( *abIt ) ) { - if ( caseSensitive && (*abIt).formattedName() == name ) - return *abIt; - if ( !caseSensitive && (*abIt).formattedName().lower() == name.lower() ) - return *abIt; - } - } - return DistributionList(); -} - -static KABC::Addressee findByUidOrName( KABC::AddressBook* book, const TQString& uidOrName, const TQString& email ) -{ - KABC::Addressee a = book->findByUid( uidOrName ); - if ( a.isEmpty() ) { - // UID not found, maybe it is a name instead. - // If we have an email, let's use that for the lookup. - // [This is used by e.g. the Kolab resource] - if ( !email.isEmpty() ) { - KABC::Addressee::List lst = book->findByEmail( email ); - KABC::Addressee::List::ConstIterator listit = lst.begin(); - for ( ; listit != lst.end(); ++listit ) - if ( (*listit).formattedName() == uidOrName ) { - a = *listit; - break; - } - if ( !lst.isEmpty() && a.isEmpty() ) { // found that email, but no match on the fullname - a = lst.first(); // probably the last name changed - } - } - // If we don't have an email, or if we didn't find any match for it, look up by full name - if ( a.isEmpty() ) { - // (But this has to be done here, since when loading we might not have the entries yet) - KABC::Addressee::List lst = findByFormattedName( book, uidOrName ); - if ( !lst.isEmpty() ) - a = lst.first(); - } - } - return a; -} - -KPIM::DistributionList::Entry::List KPIM::DistributionList::entries( KABC::AddressBook* book ) const -{ - Entry::List res; - const TQString str = custom( "KADDRESSBOOK", s_customFieldName ); - const ParseList parseList = parseCustom( str ); - for( ParseList::ConstIterator it = parseList.begin(); it != parseList.end(); ++it ) { - const TQString uid = (*it).first; - const TQString email = (*it).second; - // look up contact - KABC::Addressee a = findByUidOrName( book, uid, email ); - if ( a.isEmpty() ) { - // ## The old DistributionListManager had a "missing entries" list... - kdWarning() << "Addressee not found: " << uid << endl; - } else { - res.append( Entry( a, email ) ); - } - } - return res; -} - -TQStringList KPIM::DistributionList::emails( KABC::AddressBook* book ) const -{ - TQStringList emails; - - const TQString str = custom( "KADDRESSBOOK", s_customFieldName ); - ParseList parseList = parseCustom( str ); - for( ParseList::ConstIterator it = parseList.begin(); it != parseList.end(); ++it ) { - const TQString thisUid = (*it).first; - const TQString thisEmail = (*it).second; - - // look up contact - KABC::Addressee a = findByUidOrName( book, thisUid, thisEmail ); - if ( a.isEmpty() ) { - // ## The old DistributionListManager had a "missing entries" list... - continue; - } - - const TQString email = thisEmail.isEmpty() ? a.fullEmail() : - a.fullEmail( thisEmail ); - if ( !email.isEmpty() ) { - emails.append( email ); - } - } - - return emails; -} - -TQValueList<KPIM::DistributionList> - KPIM::DistributionList::allDistributionLists( KABC::AddressBook* book ) -{ - TQValueList<KPIM::DistributionList> lst; - KABC::AddressBook::Iterator abIt; - for ( abIt = book->begin(); abIt != book->end(); ++abIt ) - { - if ( isDistributionList( *abIt ) ) { - lst.append( KPIM::DistributionList( *abIt ) ); - } - } - return lst; -} |