/* tdeabcexport.cpp - Export Contacts to Address Book Wizard for Kopete Copyright (c) 2005 by Will Stephenson Resource selector taken from KRES::SelectDialog Copyright (c) 2002 Tobias Koenig Copyright (c) 2002 Jan-Pascal van Best Copyright (c) 2003 Cornelius Schumacher Kopete (c) 2002-2005 by the Kopete developers ************************************************************************* * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ************************************************************************* */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "tdeabcpersistence.h" #include "tdeabcexport.h" class ContactLVI : public TQCheckListItem { public: ContactLVI ( Kopete::MetaContact * mc, TQListView * parent, const TQString & text, Type tt = RadioButtonController ) : TQCheckListItem( parent, text, tt ), mc( mc ) { } Kopete::MetaContact * mc; TQString uid; }; // ctor populates the resource list and contact list, and enables the next button on the first page KabcExportWizard::KabcExportWizard( TQWidget *parent, const char *name ) : KabcExportWizard_Base( parent, name ) { connect( m_addrBooks, TQT_SIGNAL( selectionChanged( TQListBoxItem * ) ), TQT_SLOT( slotResourceSelectionChanged( TQListBoxItem * ) ) ); connect( m_btnSelectAll, TQT_SIGNAL( clicked() ), TQT_SLOT( slotSelectAll() ) ); connect( m_btnDeselectAll, TQT_SIGNAL( clicked() ), TQT_SLOT( slotDeselectAll() ) ); // fill resource selector m_addressBook = Kopete::KABCPersistence::self()->addressBook(); TQPtrList tdeabcResources = m_addressBook->resources(); TQPtrListIterator resIt( tdeabcResources ); TDEABC::Resource *resource; uint counter = 0; while ( ( resource = resIt.current() ) != 0 ) { ++resIt; if ( !resource->readOnly() ) { m_resourceMap.insert( counter, resource ); m_addrBooks->insertItem( resource->resourceName() ); counter++; } } setNextEnabled( TQWizard::page( 0 ), false ); setFinishEnabled( TQWizard::page( 1 ), true ); // if there were no writable address books, tell the user if ( counter == 0 ) { m_addrBooks->insertItem( i18n( "No writeable addressbook resource found." ) ); m_addrBooks->insertItem( i18n( "Add or enable one using the TDE Control Center." ) ); m_addrBooks->setEnabled( false ); } if ( m_addrBooks->count() == 1 ) m_addrBooks->setSelected( 0, true ); // fill contact list TQPtrList contacts = Kopete::ContactList::self()->metaContacts(); TQPtrListIterator it( contacts ); counter = 0; TQString alreadyIn = i18n( " (already in address book)" ); for (; it.current(); ++it) { m_contactMap.insert( counter, it.current() ); TQCheckListItem * lvi = new ContactLVI( it.current(), m_contactList, it.current()->displayName(), TQCheckListItem::CheckBox ); lvi->setOn( false ); if ( it.current()->metaContactId().contains(':') ) { lvi->setOn( true ); lvi->setEnabled( true ); } else lvi->setText( 0, lvi->text( 0 ) + alreadyIn ); } } KabcExportWizard::~KabcExportWizard() { } void KabcExportWizard::slotDeselectAll() { TQListViewItemIterator it( m_contactList ); while ( it.current() ) { ContactLVI *item = static_cast( it.current() ); item->setOn( false ); ++it; } } void KabcExportWizard::slotSelectAll() { TQListViewItemIterator it( m_contactList ); while ( it.current() ) { ContactLVI *item = static_cast( it.current() ); ++it; if ( !item->isEnabled() ) continue; item->setOn( true ); } } void KabcExportWizard::slotResourceSelectionChanged( TQListBoxItem * lbi ) { setNextEnabled( TQWizard::page( 0 ), lbi->isSelected() ); } // accept runs the export algorithm void KabcExportWizard::accept() { // first add an addressee to the selected resource // then set the metacontactId of each MC to that of the new addressee TDEABC::Resource * selectedResource = m_resourceMap[ ( m_addrBooks->index( m_addrBooks->selectedItem() ) ) ]; // for each item checked { TQListViewItemIterator it( m_contactList ); while ( it.current() ) { ContactLVI *item = static_cast( it.current() ); // if it is checked and enabled if ( item->isEnabled() && item->isOn() ) { TDEABC::Addressee addr; addr = m_addressBook->findByUid( item->mc->metaContactId() ); if ( addr.isEmpty() ) // unassociated contact { kdDebug( 14000 ) << "creating addressee " << item->mc->displayName() << " in address book " << selectedResource->resourceName() << endl; // create a new addressee in the selected resource addr.setResource( selectedResource ); // set name TQPtrList contacts = item->mc->contacts(); if ( contacts.count() == 1 ) { Kopete::ContactProperty prop; prop = contacts.first()->property( Kopete::Global::Properties::self()->fullName() ); if ( prop.isNull() ) addr.setNameFromString( item->mc->displayName() ); else addr.setNameFromString( prop.value().toString() ); } else addr.setNameFromString( item->mc->displayName() ); // set details exportDetails( item->mc, addr ); m_addressBook->insertAddressee( addr ); // set the metacontact's id to that of the new addressee // - this causes the addressbook to be written by libkopete item->mc->setMetaContactId( addr.uid() ); } else { exportDetails( item->mc, addr ); m_addressBook->insertAddressee( addr ); } } ++it; } } // request a write in case we only changed details on existing linked addressee Kopete::KABCPersistence::self()->writeAddressBook( selectedResource ); TQDialog::accept(); } void KabcExportWizard::exportDetails( Kopete::MetaContact * mc, TDEABC::Addressee & addr ) { // for each contact TQPtrList contacts = mc->contacts(); TQPtrListIterator cit( contacts ); for( ; cit.current(); ++cit ) { Kopete::ContactProperty prop; prop = (*cit)->property( Kopete::Global::Properties::self()->emailAddress() ); if ( !prop.isNull() ) { addr.insertEmail( prop.value().toString() ); } prop = (*cit)->property( Kopete::Global::Properties::self()->privatePhone() ); if ( !prop.isNull() ) { addr.insertPhoneNumber( TDEABC::PhoneNumber( prop.value().toString(), TDEABC::PhoneNumber::Home ) ); } prop = (*cit)->property( Kopete::Global::Properties::self()->workPhone() ); if ( !prop.isNull() ) { addr.insertPhoneNumber( TDEABC::PhoneNumber( prop.value().toString(), TDEABC::PhoneNumber::Work ) ); } prop = (*cit)->property( Kopete::Global::Properties::self()->privateMobilePhone() ); if ( !prop.isNull() ) { addr.insertPhoneNumber( TDEABC::PhoneNumber( prop.value().toString(), TDEABC::PhoneNumber::Cell ) ); } } // metacontact photo TQImage photo = mc->photo(); if ( !photo.isNull() ) addr.setPhoto( TDEABC::Picture( photo ) ); } #include "tdeabcexport.moc"