// -*- mode: C++; c-file-style: "gnu" -*- // kaddrbook.cpp // Author: Stefan Taferner // This code is under GPL #include #include "kaddrbook.h" #ifdef KDEPIM_NEW_DISTRLISTS #include "distributionlist.h" #else #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- void KAddrBookExternal::openEmail( const TQString &addr, TQWidget *tqparent ) { TQString email; TQString name; KABC::Addressee::parseEmailAddress( addr, name, email ); KABC::AddressBook *ab = KABC::StdAddressBook::self( true ); // force a reload of the address book file so that changes that were made // by other programs are loaded ab->asyncLoad(); // if we have to reload the address book then we should also wait until // it's completely reloaded #if KDE_IS_VERSION(3,4,89) // This ugly hack will be removed in 4.0 while ( !ab->loadingHasFinished() ) { TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); // use sleep here to reduce cpu usage usleep( 100 ); } #endif KABC::Addressee::List addressees = ab->findByEmail( email ); if ( addressees.count() > 0 ) { if ( kapp->dcopClient()->isApplicationRegistered( "kaddressbook" ) ){ //make sure kaddressbook is loaded, otherwise showContactEditor //won't work as desired, see bug #87233 DCOPRef call ( "kaddressbook", "kaddressbook" ); call.send( "newInstance()" ); } else { kapp->startServiceByDesktopName( "kaddressbook" ); } DCOPRef call( "kaddressbook", "KAddressBookIface" ); call.send( "showContactEditor(TQString)", addressees.first().uid() ); } else { //TODO: Enable the better message at the next string unfreeze #if 0 TQString text = i18n("The email address %1 cannot be " "found in your addressbook.").arg( email ); #else TQString text = email + " " + i18n( "is not in address book" ); #endif KMessageBox::information( tqparent, text, TQString(), "notInAddressBook" ); } } //----------------------------------------------------------------------------- void KAddrBookExternal::addEmail( const TQString& addr, TQWidget *tqparent) { TQString email; TQString name; KABC::Addressee::parseEmailAddress( addr, name, email ); KABC::AddressBook *ab = KABC::StdAddressBook::self( true ); ab->setErrorHandler( new KABC::GuiErrorHandler( tqparent ) ); // force a reload of the address book file so that changes that were made // by other programs are loaded ab->asyncLoad(); // if we have to reload the address book then we should also wait until // it's completely reloaded #if KDE_IS_VERSION(3,4,89) // This ugly hack will be removed in 4.0 while ( !ab->loadingHasFinished() ) { TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); // use sleep here to reduce cpu usage usleep( 100 ); } #endif KABC::Addressee::List addressees = ab->findByEmail( email ); if ( addressees.isEmpty() ) { KABC::Addressee a; a.setNameFromString( name ); a.insertEmail( email, true ); { KConfig config( "kaddressbookrc" ); config.setGroup( "General" ); int type = config.readNumEntry( "FormattedNameType", 1 ); TQString name; switch ( type ) { case 1: name = a.givenName() + " " + a.familyName(); break; case 2: name = a.assembledName(); break; case 3: name = a.familyName() + ", " + a.givenName(); break; case 4: name = a.familyName() + " " + a.givenName(); break; case 5: name = a.organization(); break; default: name = ""; break; } name.simplifyWhiteSpace(); a.setFormattedName( name ); } if ( KAddrBookExternal::addAddressee( a ) ) { TQString text = i18n("The email address %1 was added to your " "addressbook; you can add more information to this " "entry by opening the addressbook.").arg( addr ); KMessageBox::information( tqparent, text, TQString(), "addedtokabc" ); } } else { TQString text = i18n("The email address %1 is already in your " "addressbook.").arg( addr ); KMessageBox::information( tqparent, text, TQString(), "alreadyInAddressBook" ); } ab->setErrorHandler( 0 ); } void KAddrBookExternal::openAddressBook(TQWidget *) { kapp->startServiceByDesktopName( "kaddressbook" ); } void KAddrBookExternal::addNewAddressee( TQWidget* ) { kapp->startServiceByDesktopName("kaddressbook"); DCOPRef call("kaddressbook", "KAddressBookIface"); call.send("newContact()"); } bool KAddrBookExternal::addVCard( const KABC::Addressee& addressee, TQWidget *tqparent ) { KABC::AddressBook *ab = KABC::StdAddressBook::self( true ); bool inserted = false; ab->setErrorHandler( new KABC::GuiErrorHandler( tqparent ) ); KABC::Addressee::List addressees = ab->findByEmail( addressee.preferredEmail() ); if ( addressees.isEmpty() ) { if ( KAddrBookExternal::addAddressee( addressee ) ) { TQString text = i18n("The VCard was added to your addressbook; " "you can add more information to this " "entry by opening the addressbook."); KMessageBox::information( tqparent, text, TQString(), "addedtokabc" ); inserted = true; } } else { TQString text = i18n("The VCard's primary email address is already in " "your addressbook; however, you may save the VCard " "into a file and import it into the addressbook " "manually."); KMessageBox::information( tqparent, text ); inserted = true; } ab->setErrorHandler( 0 ); return inserted; } bool KAddrBookExternal::addAddressee( const KABC::Addressee& addr ) { KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true ); KABC::Resource *kabcResource = selectResourceForSaving( addressBook ); if( !kabcResource ) return false; KABC::Ticket *ticket = addressBook->requestSaveTicket( kabcResource ); bool saved = false; if ( ticket ) { KABC::Addressee addressee( addr ); addressee.setResource( kabcResource ); addressBook->insertAddressee( addressee ); saved = addressBook->save( ticket ); if ( !saved ) addressBook->releaseSaveTicket( ticket ); } addressBook->emitAddressBookChanged(); return saved; } TQString KAddrBookExternal::expandDistributionList( const TQString& listName ) { if ( listName.isEmpty() ) return TQString(); const TQString lowerListName = listName.lower(); KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true ); #ifdef KDEPIM_NEW_DISTRLISTS KPIM::DistributionList distrList = KPIM::DistributionList::findByName( addressBook, lowerListName, false ); if ( !distrList.isEmpty() ) { return distrList.emails( addressBook ).join( ", " ); } #else KABC::DistributionListManager manager( addressBook ); manager.load(); const TQStringList listNames = manager.listNames(); for ( TQStringList::ConstIterator it = listNames.begin(); it != listNames.end(); ++it) { if ( (*it).lower() == lowerListName ) { const TQStringList addressList = manager.list( *it )->emails(); return addressList.join( ", " ); } } #endif return TQString(); } KABC::Resource* KAddrBookExternal::selectResourceForSaving( KABC::AddressBook *addressBook ) { #if KDE_IS_VERSION(3,4,89) // This ugly hack will be removed in 4.0 while ( !addressBook->loadingHasFinished() ) { TQApplication::eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); // use sleep here to reduce cpu usage usleep( 100 ); } #endif // Select a resource TQPtrList kabcResources = addressBook->resources(); TQPtrList kresResources; TQPtrListIterator resIt( kabcResources ); KABC::Resource *kabcResource; while ( ( kabcResource = resIt.current() ) != 0 ) { ++resIt; if ( !kabcResource->readOnly() ) { KRES::Resource *res = static_cast( kabcResource ); if ( res ) kresResources.append( res ); } } return static_cast( KRES::SelectDialog::getResource( kresResources, 0 ) ); }