/* This file is part of KAddressbook. Copyright (c) 2003 Tobias Koenig 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. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, permission is given to link this program with any edition of TQt, and distribute the resulting executable, without including the source code for TQt in the source distribution. */ #include #include #include #include #include #include #include #include "csvimportdialog.h" #include "csv_xxport.h" K_EXPORT_KADDRESSBOOK_XXFILTER( libkaddrbk_csv_xxport, CSVXXPort ) CSVXXPort::CSVXXPort( KABC::AddressBook *ab, TQWidget *parent, const char *name ) : KAB::XXPort( ab, parent, name ) { createImportAction( i18n( "Import CSV List..." ) ); createExportAction( i18n( "Export CSV List..." ) ); } bool CSVXXPort::exportContacts( const KABC::AddresseeList &list, const TQString& ) { KURL url = KFileDialog::getSaveURL( "addressbook.csv" ); if ( url.isEmpty() ) return true; if( TQFileInfo(url.path()).exists() ) { if(KMessageBox::questionYesNo( parentWidget(), i18n("Do you want to overwrite file \"%1\"").arg( url.path()) ) == KMessageBox::No) return false; } if ( !url.isLocalFile() ) { KTempFile tmpFile; if ( tmpFile.status() != 0 ) { TQString txt = i18n( "Unable to open file %1.%2." ); KMessageBox::error( parentWidget(), txt.arg( url.url() ) .arg( strerror( tmpFile.status() ) ) ); return false; } doExport( tmpFile.file(), list ); tmpFile.close(); return KIO::NetAccess::upload( tmpFile.name(), url, parentWidget() ); } else { TQFile file( url.path() ); if ( !file.open( IO_WriteOnly ) ) { TQString txt = i18n( "Unable to open file %1." ); KMessageBox::error( parentWidget(), txt.arg( url.path() ) ); return false; } doExport( &file, list ); file.close(); KMessageBox::information( parentWidget(), i18n( "The contacts have been exported successfully." ) ); return true; } } KABC::AddresseeList CSVXXPort::importContacts( const TQString& ) const { CSVImportDialog dlg( addressBook(), parentWidget() ); if ( dlg.exec() ) return dlg.contacts(); else return KABC::AddresseeList(); } void CSVXXPort::doExport( TQFile *fp, const KABC::AddresseeList &list ) { TQTextStream t( fp ); t.setEncoding( TQTextStream::Locale ); 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"; } } #include "csv_xxport.moc"