csv_xxport.cpp
00001 /* 00002 This file is part of KAddressbook. 00003 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of TQt, and distribute the resulting executable, 00021 without including the source code for TQt in the source distribution. 00022 */ 00023 00024 #include <tqfile.h> 00025 00026 #include <kfiledialog.h> 00027 #include <kio/netaccess.h> 00028 #include <klocale.h> 00029 #include <kmessagebox.h> 00030 #include <ktempfile.h> 00031 #include <kurl.h> 00032 00033 #include "csvimportdialog.h" 00034 00035 #include "csv_xxport.h" 00036 00037 K_EXPORT_KADDRESSBOOK_XXFILTER( libkaddrbk_csv_xxport, CSVXXPort ) 00038 00039 CSVXXPort::CSVXXPort( KABC::AddressBook *ab, TQWidget *parent, const char *name ) 00040 : KAB::XXPort( ab, parent, name ) 00041 { 00042 createImportAction( i18n( "Import CSV List..." ) ); 00043 createExportAction( i18n( "Export CSV List..." ) ); 00044 } 00045 00046 bool CSVXXPort::exportContacts( const KABC::AddresseeList &list, const TQString& ) 00047 { 00048 KURL url = KFileDialog::getSaveURL( "addressbook.csv" ); 00049 if ( url.isEmpty() ) 00050 return true; 00051 00052 if( TQFileInfo(url.path()).exists() ) { 00053 if(KMessageBox::questionYesNo( parentWidget(), i18n("Do you want to overwrite file \"%1\"").arg( url.path()) ) == KMessageBox::No) 00054 return false; 00055 } 00056 00057 if ( !url.isLocalFile() ) { 00058 KTempFile tmpFile; 00059 if ( tmpFile.status() != 0 ) { 00060 TQString txt = i18n( "<qt>Unable to open file <b>%1</b>.%2.</qt>" ); 00061 KMessageBox::error( parentWidget(), txt.arg( url.url() ) 00062 .arg( strerror( tmpFile.status() ) ) ); 00063 return false; 00064 } 00065 00066 doExport( tmpFile.file(), list ); 00067 tmpFile.close(); 00068 00069 return KIO::NetAccess::upload( tmpFile.name(), url, parentWidget() ); 00070 } else { 00071 TQFile file( url.path() ); 00072 if ( !file.open( IO_WriteOnly ) ) { 00073 TQString txt = i18n( "<qt>Unable to open file <b>%1</b>.</qt>" ); 00074 KMessageBox::error( parentWidget(), txt.arg( url.path() ) ); 00075 return false; 00076 } 00077 00078 doExport( &file, list ); 00079 file.close(); 00080 00081 KMessageBox::information( parentWidget(), i18n( "The contacts have been exported successfully." ) ); 00082 00083 return true; 00084 } 00085 } 00086 00087 KABC::AddresseeList CSVXXPort::importContacts( const TQString& ) const 00088 { 00089 CSVImportDialog dlg( addressBook(), parentWidget() ); 00090 if ( dlg.exec() ) 00091 return dlg.contacts(); 00092 else 00093 return KABC::AddresseeList(); 00094 } 00095 00096 void CSVXXPort::doExport( TQFile *fp, const KABC::AddresseeList &list ) 00097 { 00098 TQTextStream t( fp ); 00099 t.setEncoding( TQTextStream::Locale ); 00100 00101 KABC::AddresseeList::ConstIterator iter; 00102 KABC::Field::List fields = addressBook()->fields(); 00103 KABC::Field::List::Iterator fieldIter; 00104 bool first = true; 00105 00106 // First output the column headings 00107 for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { 00108 if ( !first ) 00109 t << ","; 00110 00111 t << "\"" << (*fieldIter)->label() << "\""; 00112 first = false; 00113 } 00114 t << "\n"; 00115 00116 // Then all the addressee objects 00117 KABC::Addressee addr; 00118 for ( iter = list.begin(); iter != list.end(); ++iter ) { 00119 addr = *iter; 00120 first = true; 00121 00122 for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) { 00123 if ( !first ) 00124 t << ","; 00125 00126 t << "\"" << (*fieldIter)->value( addr ).replace( "\n", "\\n" ) << "\""; 00127 first = false; 00128 } 00129 00130 t << "\n"; 00131 } 00132 } 00133 00134 #include "csv_xxport.moc"