void TestDistrList::setup() { // We need a std addressbook KABC::AddressBook *ab = KABC::StdAddressBook::self(); KABC::StdAddressBook::setAutomaticSave( false ); // and two contacts KABC::Addressee addr1; addr1.setName( "addr1" ); addr1.setFormattedName( "addr1" ); addr1.insertEmail( "*****@*****.**", true ); addr1.insertEmail( "*****@*****.**" ); ab->insertAddressee( addr1 ); assert( addr1.emails().count() == 2 ); KABC::Addressee addr2; addr2.setName( "addr2" ); addr2.insertEmail( "*****@*****.**", true ); addr2.insertEmail( "*****@*****.**" ); ab->insertAddressee( addr2 ); assert( addr2.emails().count() == 2 ); assert( !ab->findByName( "addr1" ).isEmpty() ); assert( !ab->findByName( "addr2" ).isEmpty() ); }
void TestDistrList::testDuplicate() { kDebug() ; // This is a special test for the case where we have a contact and a distr list with the same name KABC::AddressBook *ab = KABC::StdAddressBook::self(); KABC::Addressee addr; addr.setName( "foo" ); addr.insertEmail( "*****@*****.**", true ); ab->insertAddressee( addr ); #if 0 // we need a findByFormattedName KABC::Addressee::List addrList = ab->findByName( "foo" ); assert( addrList.count() == 2 ); bool a = DistributionList::isDistributionList( addrList.first() ); bool b = DistributionList::isDistributionList( addrList.last() ); // one is a distr list, but not both assert( a || b ); // assert( ! ( a && b ) ); #endif DistributionList dl = DistributionList::findByName( ab, "foo" ); assert( !dl.isEmpty() ); assert( DistributionList::isDistributionList( dl ) ); assert( dl.formattedName() == "foo" ); }
void TestDistrList::testNewList() { kDebug() ; DistributionList dl; dl.setName( "foo" ); assert( !dl.isEmpty() ); check( "name set", dl.formattedName(), "foo" ); assert( DistributionList::isDistributionList( dl ) ); KABC::AddressBook *ab = KABC::StdAddressBook::self(); ab->insertAddressee( dl ); #if 0 // can't do that until we have KABC::AddressBook::findByFormattedName, or we use setName() KABC::Addressee::List addrList = ab->findByName( "foo" ); assert( addrList.count() == 1 ); KABC::Addressee addr = addrList.first(); assert( !addr.isEmpty() ); check( "correct name", addr.name(), "foo" ); assert( DistributionList::isDistributionList( addr ) ); #else KABC::Addressee addr = dl; #endif DistributionList dl2 = DistributionList::findByName( ab, "foo" ); assert( !dl2.isEmpty() ); check( "correct name", dl2.formattedName(), "foo" ); assert( DistributionList::isDistributionList( dl2 ) ); // Test the ctor that takes an addressee DistributionList dl3( addr ); assert( !dl3.isEmpty() ); assert( DistributionList::isDistributionList( dl3 ) ); check( "correct name", dl3.formattedName(), "foo" ); }
bool KAddrBookExternal::addAddressee(const KABC::Addressee &addr) { KABC::AddressBook *addressBook = KABC::StdAddressBook::self(true); #if KDE_IS_VERSION(3,4,89) // This ugly hack will be removed in 4.0 while(!addressBook->loadingHasFinished()) { QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput); // use sleep here to reduce cpu usage usleep(100); } #endif // Select a resource QPtrList<KABC::Resource> kabcResources = addressBook->resources(); QPtrList<KRES::Resource> kresResources; QPtrListIterator<KABC::Resource> resIt(kabcResources); KABC::Resource *kabcResource; while((kabcResource = resIt.current()) != 0) { ++resIt; if(!kabcResource->readOnly()) { KRES::Resource *res = static_cast<KRES::Resource *>(kabcResource); if(res) kresResources.append(res); } } kabcResource = static_cast<KABC::Resource *>(KRES::SelectDialog::getResource(kresResources, 0)); 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; }
void TestDistrList::testInsertEntry() { kDebug() ; KABC::AddressBook *ab = KABC::StdAddressBook::self(); DistributionList dl = DistributionList::findByName( ab, "foo" ); assert( !dl.isEmpty() ); #if 0 // the usual method KABC::Addressee addr1 = ab->findByName( "addr1" ).first(); assert( !addr1.isEmpty() ); dl.insertEntry( addr1 ); #else // the kolab-resource method dl.insertEntry( "addr1" ); #endif KABC::Addressee addr2 = ab->findByName( "addr2" ).first(); assert( !addr2.isEmpty() ); dl.insertEntry( addr2, "*****@*****.**" ); // Try inserting it again, should do nothing dl.insertEntry( addr2, "*****@*****.**" ); // And insert it with another email address dl.insertEntry( addr2, "*****@*****.**" ); // Test entries() DistributionList::Entry::List entries = dl.entries( ab ); check( "entries count", QString::number( entries.count() ), "3" ); check( "first entry", entries[0].addressee.name(), "addr1" ); check( "first entry", entries[0].email, QString() ); check( "second entry", entries[1].addressee.name(), "addr2" ); check( "second entry", entries[1].email, "*****@*****.**" ); check( "third entry", entries[2].addressee.name(), "addr2" ); check( "third entry", entries[2].email, "*****@*****.**" ); // Test emails() QStringList emails = dl.emails( ab ); kDebug() << emails; assert( emails.count() == 3 ); check( "first email", emails[0], "addr1 <*****@*****.**>" ); check( "second email", emails[1], "addr2 <*****@*****.**>" ); check( "third email", emails[2], "addr2 <*****@*****.**>" ); // Commit changes to the addressbook !! ab->insertAddressee( dl ); }
void TestDistrList::testRemoveEntry() { kDebug() ; KABC::AddressBook *ab = KABC::StdAddressBook::self(); DistributionList dl = DistributionList::findByName( ab, "foo" ); assert( !dl.isEmpty() ); DistributionList::Entry::List entries = dl.entries( ab ); check( "entries count before removeEntry", QString::number( entries.count() ), "3" ); // Removing an empty entry shouldn't do anything dl.removeEntry( KABC::Addressee() ); check( "entries count after removing empty entry", QString::number( dl.entries(ab).count() ), "3" ); KABC::Addressee addr1 = ab->findByName( "addr1" ).first(); assert( !addr1.isEmpty() ); // Removing an entry with the wrong email passed, shouldn't do anything dl.removeEntry( addr1, "*****@*****.**" ); check( "entries count after removing entry with invalid email", QString::number( dl.entries(ab).count() ), "3" ); // Now remove entry correctly dl.removeEntry( addr1 ); check( "removeEntry(addr1) worked", QString::number( dl.entries(ab).count() ), "2" ); QStringList emails = dl.emails( ab ); assert( emails.count() == 2 ); check( "first email", emails[0], "addr2 <*****@*****.**>" ); // Now move on to addr2. First remove with no or a wrong email (nothing should happen) KABC::Addressee addr2 = ab->findByName( "addr2" ).first(); assert( !addr2.isEmpty() ); dl.removeEntry( addr2 ); check( "entries count after removing entry with no email", QString::number( dl.entries(ab).count() ), "2" ); // Now remove addr2 correctly dl.removeEntry( addr2, "*****@*****.**" ); check( "entries count after removing addr2", QString::number( dl.entries(ab).count() ), "1" ); dl.removeEntry( addr2, "*****@*****.**" ); check( "entries count after removing alternate addr2", QString::number( dl.entries(ab).count() ), "0" ); assert( dl.entries(ab).isEmpty() ); assert( dl.emails(ab).isEmpty() ); assert( DistributionList::isDistributionList( dl ) ); ab->insertAddressee( dl ); }
void DistributionListDialog::slotUser1() { bool isEmpty = true; KABC::AddressBook *ab = KABC::StdAddressBook::self( true ); for (int i = 0; i < mRecipientsList->topLevelItemCount(); ++i) { DistributionListItem *item = static_cast<DistributionListItem *>( mRecipientsList->topLevelItem( i )); if ( item && item->checkState( 0 ) == Qt::Checked ) { isEmpty = false; break; } } if ( isEmpty ) { KMessageBox::information( this, i18nc("@info", "There are no recipients in your list. " "First select some recipients, " "then try again.") ); return; } QString name = mTitleEdit->text(); if ( name.isEmpty() ) { bool ok = false; name = KInputDialog::getText( i18nc("@title:window","New Distribution List"), i18nc("@label:textbox","Please enter name:"), QString(), &ok, this ); if ( !ok || name.isEmpty() ) return; } if ( ab->findDistributionListByName( name ) ) { KMessageBox::information( this, i18nc( "@info", "<para>Distribution list with the given name <resource>%1</resource> " "already exists. Please select a different name.</para>", name ) ); return; } KABC::DistributionList *dlist = ab->createDistributionList( name ); for (int i = 0; i < mRecipientsList->topLevelItemCount(); ++i) { DistributionListItem *item = static_cast<DistributionListItem *>( mRecipientsList->topLevelItem( i )); if ( item && item->checkState( 0 ) == Qt::Checked ) { kDebug() << item->addressee().fullEmail() << item->addressee().uid(); if ( item->isTransient() ) { ab->insertAddressee( item->addressee() ); } if ( item->email() == item->addressee().preferredEmail() ) { dlist->insertEntry( item->addressee() ); } else { dlist->insertEntry( item->addressee(), item->email() ); } } } // let the resource know that the data has changed KABC::Resource *resource = dlist->resource(); resource->insertDistributionList( dlist ); // save the resource bool saveError = true; KABC::Ticket *ticket = ab->requestSaveTicket( resource ); if ( ticket ) { if ( ab->save( ticket ) ) { saveError = false; } else ab->releaseSaveTicket( ticket ); } if ( saveError ) { kWarning() << "Couldn't save new addresses in the distribution list just created to the address book"; } close(); }
void DistributionListDialog::slotUser1() { bool isEmpty = true; KABC::AddressBook *ab = KABC::StdAddressBook::self( true ); QListViewItem *i = mRecipientsList->firstChild(); while( i ) { DistributionListItem *item = static_cast<DistributionListItem *>( i ); if ( item->isOn() ) { isEmpty = false; break; } i = i->nextSibling(); } if ( isEmpty ) { KMessageBox::information( this, i18n("There are no recipients in your list. " "First select some recipients, " "then try again.") ); return; } #ifndef KDEPIM_NEW_DISTRLISTS KABC::DistributionListManager manager( ab ); manager.load(); #endif QString name = mTitleEdit->text(); if ( name.isEmpty() ) { bool ok = false; name = KInputDialog::getText( i18n("New Distribution List"), i18n("Please enter name:"), QString::null, &ok, this ); if ( !ok || name.isEmpty() ) return; } #ifdef KDEPIM_NEW_DISTRLISTS if ( !KPIM::DistributionList::findByName( ab, name ).isEmpty() ) { #else if ( manager.list( name ) ) { #endif KMessageBox::information( this, i18n( "<qt>Distribution list with the given name <b>%1</b> " "already exists. Please select a different name.</qt>" ).arg( name ) ); return; } #ifdef KDEPIM_NEW_DISTRLISTS KPIM::DistributionList dlist; dlist.setName( name ); i = mRecipientsList->firstChild(); while( i ) { DistributionListItem *item = static_cast<DistributionListItem *>( i ); if ( item->isOn() ) { kdDebug() << " " << item->addressee().fullEmail() << endl; if ( item->isTransient() ) { ab->insertAddressee( item->addressee() ); } if ( item->email() == item->addressee().preferredEmail() ) { dlist.insertEntry( item->addressee() ); } else { dlist.insertEntry( item->addressee(), item->email() ); } } i = i->nextSibling(); } ab->insertAddressee( dlist ); #else KABC::DistributionList *dlist = new KABC::DistributionList( &manager, name ); i = mRecipientsList->firstChild(); while( i ) { DistributionListItem *item = static_cast<DistributionListItem *>( i ); if ( item->isOn() ) { kdDebug() << " " << item->addressee().fullEmail() << endl; if ( item->isTransient() ) { ab->insertAddressee( item->addressee() ); } if ( item->email() == item->addressee().preferredEmail() ) { dlist->insertEntry( item->addressee() ); } else { dlist->insertEntry( item->addressee(), item->email() ); } } i = i->nextSibling(); } #endif // FIXME: Ask the user which resource to save to instead of the default bool saveError = true; KABC::Ticket *ticket = ab->requestSaveTicket( 0 /*default resource */ ); if ( ticket ) if ( ab->save( ticket ) ) saveError = false; else ab->releaseSaveTicket( ticket ); if ( saveError ) kdWarning(5006) << k_funcinfo << " Couldn't save new addresses in the distribution list just created to the address book" << endl; #ifndef KDEPIM_NEW_DISTRLISTS manager.save(); #endif close(); }