void XXPortManager::slotExport( const QString &identifier ) { if ( !mSelectionModel ) { return; } QPointer<ContactSelectionDialog> dlg = new ContactSelectionDialog( mSelectionModel, mParentWidget ); dlg->setMessageText( i18n( "Which contact do you want to export?" ) ); dlg->setDefaultAddressBook( mDefaultAddressBook ); if ( !dlg->exec() || !dlg ) { delete dlg; return; } const KABC::AddresseeList contacts = dlg->selectedContacts(); delete dlg; if ( contacts.isEmpty() ) { KMessageBox::sorry( 0, i18n( "You have not selected any contacts to export." ) ); return; } const XXPort *xxport = mFactory.createXXPort( identifier, mParentWidget ); if ( !xxport ) { return; } xxport->exportContacts( contacts ); delete xxport; }
void XXPortManager::slotImport(const QString &identifier, const QString &data) { KAB::XXPort *obj = mXXPortObjects[ identifier ]; if(!obj) { KMessageBox::error(mCore->widget(), i18n("<qt>No import plugin available for <b>%1</b>.</qt>").arg(identifier)); return; } KABC::Resource *resource = mCore->requestResource(mCore->widget()); if(!resource) return; KABC::AddresseeList list = obj->importContacts(data); KABC::AddresseeList::Iterator it; for(it = list.begin(); it != list.end(); ++it) (*it).setResource(resource); if(!list.isEmpty()) { NewCommand *command = new NewCommand(mCore->addressBook(), list); mCore->commandHistory()->addCommand(command); emit modified(); } }
bool BookmarkXXPort::exportContacts( const KABC::AddresseeList &list, const QString& ) { QString fileName = locateLocal( "data", "kabc/bookmarks.xml" ); KBookmarkManager *mgr = KBookmarkManager::managerForFile( fileName ); KBookmarkDomBuilder *builder = new KBookmarkDomBuilder( mgr->root(), mgr ); builder->connectImporter( this ); KABC::AddresseeList::ConstIterator it; emit newFolder( i18n( "AddressBook" ), false, "" ); for ( it = list.begin(); it != list.end(); ++it ) { if ( !(*it).url().isEmpty() ) { QString name = (*it).givenName() + " " + (*it).familyName(); emit newBookmark( name, (*it).url().url().latin1(), QString( "" ) ); } } emit endFolder(); delete builder; mgr->save(); KBookmarkMenu::DynMenuInfo menu; menu.name = i18n( "Addressbook Bookmarks" ); menu.location = fileName; menu.type = "xbel"; menu.show = true; KBookmarkMenu::setDynamicBookmarks( "kabc", menu ); return true; }
KABC::AddresseeList XXPortSelectDialog::contacts() { const QStringList selection = mCore->selectedUIDs(); KABC::AddresseeList list; if ( mUseSelection->isChecked() ) { QStringList::ConstIterator it; for ( it = selection.constBegin(); it != selection.constEnd(); ++it ) { KABC::Addressee addr = mCore->addressBook()->findByUid( *it ); if ( !addr.isEmpty() ) list.append( addr ); } } else if ( mUseFilters->isChecked() ) { // find contacts that can pass selected filter Filter::List::ConstIterator filterIt; for ( filterIt = mFilters.constBegin(); filterIt != mFilters.constEnd(); ++filterIt ) if ( (*filterIt).name() == mFiltersCombo->currentText() ) break; KABC::AddressBook::Iterator it; for ( it = mCore->addressBook()->begin(); it != mCore->addressBook()->end(); ++it ) { if ( (*filterIt).filterAddressee( *it ) ) list.append( *it ); } } else if ( mUseCategories->isChecked() ) { const QStringList categorieList = categories(); KABC::AddressBook::ConstIterator it; KABC::AddressBook::ConstIterator addressBookEnd( mCore->addressBook()->constEnd() ); for ( it = mCore->addressBook()->constBegin(); it != addressBookEnd; ++it ) { const QStringList tmp( (*it).categories() ); QStringList::ConstIterator tmpIt; for ( tmpIt = tmp.constBegin(); tmpIt != tmp.constEnd(); ++tmpIt ) if ( categorieList.contains( *tmpIt ) ) { list.append( *it ); break; } } } else { // create a string list of all entries: KABC::AddressBook::ConstIterator it; for ( it = mCore->addressBook()->constBegin(); it != mCore->addressBook()->constEnd(); ++it ) list.append( *it ); } if ( mUseSorting ) { list.setReverseSorting( mSortTypeCombo->currentIndex() == 1 ); int pos = mFieldCombo->currentIndex(); if ( pos < mFields.count() ) list.sortByField( mFields[ pos ] ); } return list; }
void CSVXXPort::doExport( QFile *fp, const KABC::AddresseeList &list ) { QTextStream t( fp ); t.setCodec( QTextCodec::codecForLocale() ); KABC::AddresseeList::ConstIterator iter; KABC::Field::List fields = addressBook()->fields(); KABC::Field::List::Iterator fieldIter; bool first = true; // First output the column headings for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { if ( !first ) t << ","; t << "\"" << (*fieldIter)->label() << "\""; first = false; } t << "\n"; // Then all the addressee objects KABC::Addressee addr; for ( iter = list.begin(); iter != list.end(); ++iter ) { addr = *iter; first = true; for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { if ( !first ) t << ","; t << '\"' << (*fieldIter)->value( addr ).replace( '\n', "\\n" ) << '\"'; first = false; } t << "\n"; } }
bool VCard_LDIFCreator::readContents( const QString &path ) { // read file contents QFile file( path ); if ( !file.open( QIODevice::ReadOnly ) ) return false; QString info; text.truncate(0); // read the file QByteArray contents = file.readAll(); file.close(); // convert the file contents to a KABC::Addressee address KABC::Addressee::List addrList; KABC::Addressee addr; KABC::VCardConverter converter; addrList = converter.parseVCards( contents); if ( addrList.count() == 0 ) { KABC::AddresseeList l; // FIXME porting if ( !KABC::LDIFConverter::LDIFToAddressee( contents, l ) ) return false; // FIXME porting KABC::AddresseeList::ConstIterator it( l.constBegin() ); for ( ; it != l.constEnd(); ++ it ) { addrList.append( *it ); } } if ( addrList.count()>1 ) { // create an overview (list of all names) name = i18np("One contact found:", "%1 contacts found:", addrList.count()); int no, linenr; for (linenr=no=0; linenr<30 && no<addrList.count(); ++no) { addr = addrList[no]; info = addr.formattedName().simplified(); if (info.isEmpty()) info = addr.givenName() + ' ' + addr.familyName(); info = info.simplified(); if (info.isEmpty()) continue; text.append(info); text.append("\n"); ++linenr; } return true; } // create card for _one_ contact addr = addrList[ 0 ]; // prepare the text name = addr.formattedName().simplified(); if ( name.isEmpty() ) name = addr.givenName() + ' ' + addr.familyName(); name = name.simplified(); KABC::PhoneNumber::List pnList = addr.phoneNumbers(); QStringList phoneNumbers; for (int no=0; no<pnList.count(); ++no) { QString pn = pnList[no].number().simplified(); if (!pn.isEmpty() && !phoneNumbers.contains(pn)) phoneNumbers.append(pn); } if ( !phoneNumbers.isEmpty() ) text += phoneNumbers.join("\n") + '\n'; info = addr.organization().simplified(); if ( !info.isEmpty() ) text += info + '\n'; // get an address KABC::Address address = addr.address(KABC::Address::Work); if (address.isEmpty()) address = addr.address(KABC::Address::Home); if (address.isEmpty()) address = addr.address(KABC::Address::Pref); info = address.formattedAddress(); if ( !info.isEmpty() ) text += info + '\n'; return true; }
KABC::AddresseeList GMXXXPort::importContacts( const QString& ) const { KABC::AddresseeList addrList; QString fileName = KFileDialog::getOpenFileName( ":xxport_gmx", GMX_FILESELECTION_STRING, 0 ); if ( fileName.isEmpty() ) return addrList; QFile file( fileName ); if ( !file.open( IO_ReadOnly ) ) { QString msg = i18n( "<qt>Unable to open <b>%1</b> for reading.</qt>" ); KMessageBox::error( parentWidget(), msg.arg( fileName ) ); return addrList; } QDateTime dt; QTextStream gmxStream( &file ); gmxStream.setEncoding( QTextStream::Latin1 ); QString line, line2; line = gmxStream.readLine(); line2 = gmxStream.readLine(); if (!line.startsWith("AB_ADDRESSES:") || !line2.startsWith("Address_id")) { KMessageBox::error( parentWidget(), i18n("%1 is not a GMX address book file.").arg(fileName) ); return addrList; } QStringList strList; typedef QMap<QString, KABC::Addressee *> AddressMap; AddressMap addrMap; // "Address_id,Nickname,Firstname,Lastname,Title,Birthday,Comments,Change_date,Status,Address_link_id,Categories" line = gmxStream.readLine(); while (!line.startsWith("####") && !gmxStream.atEnd()) { while (1) { strList = QStringList::split('#', line, true); if (strList.count() >= 11) break; line.append('\n'); line.append(gmxStream.readLine()); }; KABC::Addressee *addr = new KABC::Addressee; addr->setNickName(strList[1]); addr->setGivenName(strList[2]); addr->setFamilyName(strList[3]); addr->setTitle(strList[4]); if (addr->formattedName().isEmpty()) addr->setFormattedName(addr->realName()); if (checkDateTime(strList[5],dt)) addr->setBirthday(dt); addr->setNote(strList[6]); if (checkDateTime(strList[7],dt)) addr->setRevision(dt); // addr->setStatus(strList[8]); Status // addr->xxx(strList[9]); Address_link_id // addr->setCategory(strList[10]); Categories addrMap[strList[0]] = addr; line = gmxStream.readLine(); } // now read the address records line = gmxStream.readLine(); if (!line.startsWith("AB_ADDRESS_RECORDS:")) { kdWarning() << "Could not find address records!\n"; return addrList; } // 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 line = gmxStream.readLine(); line = gmxStream.readLine(); while (!line.startsWith("####") && !gmxStream.atEnd()) { while (1) { strList = QStringList::split('#', line, true); if (strList.count() >= 21) break; line.append('\n'); line.append(gmxStream.readLine()); }; KABC::Addressee *addr = addrMap[strList[0]]; if (addr) { for ( QStringList::Iterator it = strList.begin(); it != strList.end(); ++it ) *it = (*it).simplifyWhiteSpace(); // strList[1] = Record_id (numbered item, ignore here) int id = strList[14].toInt(); // Record_type_id (0=work,1=home,2=other) int type = (id==0) ? KABC::Address::Work : KABC::Address::Home; if (!strList[19].isEmpty() && strList[19].toInt()!=0) type |= KABC::Address::Pref; // Preferred address (seems to be bitfield for telephone Prefs) KABC::Address adr = addr->address(type); adr.setStreet(strList[2]); adr.setCountry(strList[3]); adr.setPostalCode(strList[4]); adr.setLocality(strList[5]); addr->insertPhoneNumber( KABC::PhoneNumber(strList[6], KABC::PhoneNumber::Home) ); addr->insertPhoneNumber( KABC::PhoneNumber(strList[7], KABC::PhoneNumber::Fax) ); int celltype = KABC::PhoneNumber::Cell; // strList[9]=Mobile_type // always 0 or -1(default phone). if (strList[9].toInt()) celltype |= KABC::PhoneNumber::Pref; addr->insertPhoneNumber( KABC::PhoneNumber(strList[8], celltype) ); addr->insertEmail(strList[10]); if (!strList[11].isEmpty()) addr->setUrl(strList[11]); if (!strList[12].isEmpty()) addr->setRole(strList[12]); // strList[13]=Comments // strList[14]=Record_type_id (0,1,2) - see above // strList[15]=Record_type (name of this additional record entry) if (!strList[16].isEmpty()) addr->setOrganization(strList[16]); // Company if (!strList[17].isEmpty()) addr->insertCustom( "KADDRESSBOOK", "X-Department", strList[17]); // Department if (checkDateTime(strList[18],dt)) addr->setRevision(dt); // Change_date // strList[19]=Preferred (see above) // strList[20]=Status (should always be "1") addr->insertAddress(adr); } else { kdWarning() << "unresolved line: " << line << endl; } line = gmxStream.readLine(); } // now add the addresses to to addrList for ( AddressMap::Iterator it = addrMap.begin(); it != addrMap.end(); ++it ) { KABC::Addressee *addr = it.data(); addrList.append(*addr); delete addr; } file.close(); return addrList; }
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 << "####"; }
KABC::AddresseeList OperaXXPort::importContacts(const QString &) const { KABC::AddresseeList addrList; QString fileName = KFileDialog::getOpenFileName(QDir::homeDirPath() + QString::fromLatin1("/.opera/contacts.adr")); if(fileName.isEmpty()) return addrList; QFile file(fileName); if(!file.open(IO_ReadOnly)) { QString msg = i18n("<qt>Unable to open <b>%1</b> for reading.</qt>"); KMessageBox::error(parentWidget(), msg.arg(fileName)); return addrList; } QTextStream stream(&file); stream.setEncoding(QTextStream::UnicodeUTF8); QString line, key, value; bool parseContact = false; KABC::Addressee addr; QRegExp separator("\x02\x02"); while(!stream.atEnd()) { line = stream.readLine(); line = line.stripWhiteSpace(); if(line == QString::fromLatin1("#CONTACT")) { parseContact = true; addr = KABC::Addressee(); continue; } else if(line.isEmpty()) { parseContact = false; if(!addr.isEmpty()) { addrList.append(addr); addr = KABC::Addressee(); } continue; } if(parseContact == true) { int sep = line.find('='); key = line.left(sep).lower(); value = line.mid(sep + 1); if(key == QString::fromLatin1("name")) addr.setNameFromString(value); else if(key == QString::fromLatin1("mail")) { QStringList emails = QStringList::split(separator, value); QStringList::Iterator it = emails.begin(); bool preferred = true; for(; it != emails.end(); ++it) { addr.insertEmail(*it, preferred); preferred = false; } } else if(key == QString::fromLatin1("phone")) addr.insertPhoneNumber(KABC::PhoneNumber(value)); else if(key == QString::fromLatin1("fax")) addr.insertPhoneNumber(KABC::PhoneNumber(value, KABC::PhoneNumber::Fax | KABC::PhoneNumber::Home)); else if(key == QString::fromLatin1("postaladdress")) { KABC::Address address(KABC::Address::Home); address.setLabel(value.replace(separator, "\n")); addr.insertAddress(address); } else if(key == QString::fromLatin1("description")) addr.setNote(value.replace(separator, "\n")); else if(key == QString::fromLatin1("url")) addr.setUrl(KURL(value)); else if(key == QString::fromLatin1("pictureurl")) { KABC::Picture pic(value); addr.setPhoto(pic); } } } file.close(); return addrList; }
bool GeoXXPort::exportContacts( const KABC::AddresseeList &list, const QString& ) { KConfig config( "kworldclockrc" ); // At first we read all exiting flags and compare it with ours to // avoid duplicated flags int flags = config.readNumEntry( "Flags", 0 ); QValueList<FlagInfo> availableFlags; if ( flags != 0 ) { for ( int i = 0; i < flags; ++i ) { FlagInfo info; info.latitude = config.readDoubleNumEntry( QString( "Flag_%1_Latitude" ).arg( i ) ); info.longitude = config.readDoubleNumEntry( QString( "Flag_%1_Longitude" ).arg( i ) ); info.color = config.readColorEntry( QString( "Flag_%1_Color" ).arg( i ) ); availableFlags.append( info ); } } QValueList<FlagInfo> flagList; KABC::AddresseeList::ConstIterator addrIt; for ( addrIt = list.begin(); addrIt != list.end(); ++addrIt ) { KABC::Geo geo( (*addrIt).geo() ); if ( !geo.isValid() ) continue; bool available = false; QValueList<FlagInfo>::Iterator it; for ( it = availableFlags.begin(); it != availableFlags.end(); ++it ) { if ( !( KABS( (*it).latitude - geo.latitude() ) > DBL_EPSILON ) && !( KABS( (*it).longitude - geo.longitude() ) > DBL_EPSILON ) ) { available = true; break; } } if ( !available ) { FlagInfo info; info.latitude = geo.latitude(); info.longitude = geo.longitude(); info.color = QColor( 0, 255, 0 ); flagList.append( info ); } } if ( flagList.count() == 0 ) // nothing to export return true; flagList += availableFlags; int startVal = 0; QValueList<FlagInfo>::Iterator it; for ( it = flagList.begin(); it != flagList.end(); ++it, ++startVal ) { config.writeEntry( QString( "Flag_%1_Color" ).arg( startVal ), (*it).color ); config.writeEntry( QString( "Flag_%1_Latitude" ).arg( startVal ), (*it).latitude ); config.writeEntry( QString( "Flag_%1_Longitude" ).arg( startVal ), (*it).longitude ); } config.writeEntry( "Flags", startVal ); return true; }
KABC::AddresseeList VCardXXPort::filterContacts( const KABC::AddresseeList &addrList ) { KABC::AddresseeList list; if ( addrList.isEmpty() ) return addrList; VCardExportSelectionDialog dlg( parentWidget() ); if ( !dlg.exec() ) return list; KABC::AddresseeList::ConstIterator it; for ( it = addrList.begin(); it != addrList.end(); ++it ) { KABC::Addressee addr; addr.setUid( (*it).uid() ); addr.setFormattedName( (*it).formattedName() ); addr.setPrefix( (*it).prefix() ); addr.setGivenName( (*it).givenName() ); addr.setAdditionalName( (*it).additionalName() ); addr.setFamilyName( (*it).familyName() ); addr.setSuffix( (*it).suffix() ); addr.setNickName( (*it).nickName() ); addr.setMailer( (*it).mailer() ); addr.setTimeZone( (*it).timeZone() ); addr.setGeo( (*it).geo() ); addr.setProductId( (*it).productId() ); addr.setSortString( (*it).sortString() ); addr.setUrl( (*it).url() ); addr.setSecrecy( (*it).secrecy() ); addr.setSound( (*it).sound() ); addr.setEmails( (*it).emails() ); addr.setCategories( (*it).categories() ); if ( dlg.exportPrivateFields() ) { addr.setBirthday( (*it).birthday() ); addr.setNote( (*it).note() ); addr.setPhoto( (*it).photo() ); } if ( dlg.exportBusinessFields() ) { addr.setTitle( (*it).title() ); addr.setRole( (*it).role() ); addr.setOrganization( (*it).organization() ); addr.setLogo( (*it).logo() ); KABC::PhoneNumber::List phones = (*it).phoneNumbers( KABC::PhoneNumber::Work ); KABC::PhoneNumber::List::Iterator phoneIt; for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) addr.insertPhoneNumber( *phoneIt ); KABC::Address::List addresses = (*it).addresses( KABC::Address::Work ); KABC::Address::List::Iterator addrIt; for ( addrIt = addresses.begin(); addrIt != addresses.end(); ++addrIt ) addr.insertAddress( *addrIt ); } KABC::PhoneNumber::List phones = (*it).phoneNumbers(); KABC::PhoneNumber::List::Iterator phoneIt; for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) { int type = (*phoneIt).type(); if ( type & KABC::PhoneNumber::Home && dlg.exportPrivateFields() ) addr.insertPhoneNumber( *phoneIt ); else if ( type & KABC::PhoneNumber::Work && dlg.exportBusinessFields() ) addr.insertPhoneNumber( *phoneIt ); else if ( dlg.exportOtherFields() ) addr.insertPhoneNumber( *phoneIt ); } KABC::Address::List addresses = (*it).addresses(); KABC::Address::List::Iterator addrIt; for ( addrIt = addresses.begin(); addrIt != addresses.end(); ++addrIt ) { int type = (*addrIt).type(); if ( type & KABC::Address::Home && dlg.exportPrivateFields() ) addr.insertAddress( *addrIt ); else if ( type & KABC::Address::Work && dlg.exportBusinessFields() ) addr.insertAddress( *addrIt ); else if ( dlg.exportOtherFields() ) addr.insertAddress( *addrIt ); } if ( dlg.exportOtherFields() ) addr.setCustoms( (*it).customs() ); if ( dlg.exportEncryptionKeys() ) { addKey( addr, KABC::Key::PGP ); addKey( addr, KABC::Key::X509 ); } list.append( addr ); } return list; }
KABC::AddresseeList VCardXXPort::importContacts( const QString& ) const { QString fileName; KABC::AddresseeList addrList; KURL::List urls; if ( !XXPortManager::importData.isEmpty() ) addrList = parseVCard( XXPortManager::importData ); else { if ( XXPortManager::importURL.isEmpty() ) urls = KFileDialog::getOpenURLs( QString::null, "*.vcf|vCards", parentWidget(), i18n( "Select vCard to Import" ) ); else urls.append( XXPortManager::importURL ); if ( urls.count() == 0 ) return addrList; QString caption( i18n( "vCard Import Failed" ) ); bool anyFailures = false; KURL::List::Iterator it; for ( it = urls.begin(); it != urls.end(); ++it ) { if ( KIO::NetAccess::download( *it, fileName, parentWidget() ) ) { QFile file( fileName ); if ( file.open( IO_ReadOnly ) ) { QByteArray rawData = file.readAll(); file.close(); if ( rawData.size() > 0 ) addrList += parseVCard( rawData ); KIO::NetAccess::removeTempFile( fileName ); } else { QString text = i18n( "<qt>When trying to read the vCard, there was an error opening the file '%1': %2</qt>" ); text = text.arg( (*it).url() ); text = text.arg( kapp->translate( "QFile", file.errorString().latin1() ) ); KMessageBox::error( parentWidget(), text, caption ); anyFailures = true; } } else { QString text = i18n( "<qt>Unable to access vCard: %1</qt>" ); text = text.arg( KIO::NetAccess::lastErrorString() ); KMessageBox::error( parentWidget(), text, caption ); anyFailures = true; } } if ( !XXPortManager::importURL.isEmpty() ) { // a vcard was passed via cmd if ( addrList.isEmpty() ) { if ( anyFailures && urls.count() > 1 ) KMessageBox::information( parentWidget(), i18n( "No contacts were imported, due to errors with the vCards." ) ); else if ( !anyFailures ) KMessageBox::information( parentWidget(), i18n( "The vCard does not contain any contacts." ) ); } else { VCardViewerDialog dlg( addrList, parentWidget() ); dlg.exec(); addrList = dlg.contacts(); } } } return addrList; }
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; }