void GMXXXPort::doExport( QFile *fp, const KABC::AddresseeList &list ) { if (!fp || !list.count()) return; QTextStream t( fp ); t.setEncoding( QTextStream::Latin1 ); KABC::AddresseeList::ConstIterator it; typedef QMap<int, const KABC::Addressee *> AddressMap; AddressMap addrMap; const KABC::Addressee *addr; t << "AB_ADDRESSES:\n"; t << "Address_id,Nickname,Firstname,Lastname,Title,Birthday,Comments," "Change_date,Status,Address_link_id,Categories\n"; int no = 0; const QChar DELIM('#'); for ( it = list.begin(); it != list.end(); ++it ) { addr = &(*it); if (addr->isEmpty()) continue; addrMap[++no] = addr; t << no << DELIM // Address_id << addr->nickName() << DELIM // Nickname << addr->givenName() << DELIM // Firstname << addr->familyName() << DELIM // Lastname << addr->title() << DELIM // Title << dateString(addr->birthday()) << DELIM // Birthday << addr->note() /*.replace('\n',"\r\n")*/ << DELIM // Comments << dateString(addr->revision()) << DELIM // Change_date << "1##0\n"; // Status, Address_link_id, Categories } t << "####\n"; t << "AB_ADDRESS_RECORDS:\n"; t << "Address_id,Record_id,Street,Country,Zipcode,City,Phone,Fax,Mobile," "Mobile_type,Email,Homepage,Position,Comments,Record_type_id,Record_type," "Company,Department,Change_date,Preferred,Status\n"; no = 1; while ( (addr = addrMap[no]) != NULL ) { for (unsigned int record_id=0; record_id<3; record_id++) { KABC::Address address; KABC::PhoneNumber phone, fax, cell; if (record_id == 0) { address = addr->address(KABC::Address::Work); phone = addr->phoneNumber(KABC::PhoneNumber::Work); fax = addr->phoneNumber(KABC::PhoneNumber::Fax); cell = addr->phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell); } else { address = addr->address(KABC::Address::Home); phone = addr->phoneNumber(KABC::PhoneNumber::Home); cell = addr->phoneNumber(KABC::PhoneNumber::Cell); } const QStringList emails = addr->emails(); QString email; if (emails.count()>record_id) email = emails[record_id]; t << no << DELIM // Address_id << record_id << DELIM // Record_id << address.street() << DELIM // Street << address.country() << DELIM // Country << address.postalCode() << DELIM // Zipcode << address.locality() << DELIM // City << phone.number() << DELIM // Phone << fax.number() << DELIM // Fax << cell.number() << DELIM // Mobile << ((cell.type()&KABC::PhoneNumber::Pref)?-1:0) << DELIM // Mobile_type << email << DELIM // Email << ((record_id==0)?addr->url().url():QString::null) << DELIM // Homepage << ((record_id==0)?addr->role():QString::null) << DELIM // Position << DELIM // Comments << record_id << DELIM // Record_type_id (0,1,2) - see above << DELIM // Record_type (name of this additional record entry) << ((record_id==0)?addr->organization():QString::null) << DELIM // Company << ((record_id==0)?addr->custom("KADDRESSBOOK", "X-Department"):QString::null) << DELIM // Department << dateString(addr->revision()) << DELIM // Change_date << 5 << DELIM // Preferred << 1 << endl; // Status (should always be "1") } ++no; }; t << "####"; }
bool VCardXXPort::exportContacts( const KABC::AddresseeList &addrList, const QString &data ) { KABC::VCardConverter converter; KURL url; KABC::AddresseeList list; list = filterContacts( addrList ); bool ok = true; if ( list.isEmpty() ) { return ok; } else if ( list.count() == 1 ) { url = KFileDialog::getSaveURL( list[ 0 ].givenName() + "_" + list[ 0 ].familyName() + ".vcf" ); if ( url.isEmpty() ) return true; if ( data == "v21" ) ok = doExport( url, converter.createVCards( list, KABC::VCardConverter::v2_1 ) ); else ok = doExport( url, converter.createVCards( list, KABC::VCardConverter::v3_0 ) ); } else { QString msg = i18n( "You have selected a list of contacts, shall they be " "exported to several files?" ); switch ( KMessageBox::questionYesNo( parentWidget(), msg, QString::null, i18n("Export to Several Files"), i18n("Export to One File") ) ) { case KMessageBox::Yes: { KURL baseUrl = KFileDialog::getExistingURL(); if ( baseUrl.isEmpty() ) return true; KABC::AddresseeList::ConstIterator it; uint counter = 0; for ( it = list.begin(); it != list.end(); ++it ) { QString testUrl; if ( (*it).givenName().isEmpty() && (*it).familyName().isEmpty() ) testUrl = baseUrl.url() + "/" + (*it).organization(); else testUrl = baseUrl.url() + "/" + (*it).givenName() + "_" + (*it).familyName(); if ( KIO::NetAccess::exists( testUrl + (counter == 0 ? "" : QString::number( counter )) + ".vcf", false, parentWidget() ) ) { counter++; url = testUrl + QString::number( counter ) + ".vcf"; } else url = testUrl + ".vcf"; bool tmpOk; KABC::AddresseeList tmpList; tmpList.append( *it ); if ( data == "v21" ) tmpOk = doExport( url, converter.createVCards( tmpList, KABC::VCardConverter::v2_1 ) ); else tmpOk = doExport( url, converter.createVCards( tmpList, KABC::VCardConverter::v3_0 ) ); ok = ok && tmpOk; } break; } case KMessageBox::No: default: { url = KFileDialog::getSaveURL( "addressbook.vcf" ); if ( url.isEmpty() ) return true; if ( data == "v21" ) ok = doExport( url, converter.createVCards( list, KABC::VCardConverter::v2_1 ) ); else ok = doExport( url, converter.createVCards( list, KABC::VCardConverter::v3_0 ) ); } } } return ok; }