00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qfile.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
class CSVXXPortFactory :
public KAB::XXPortFactory
00038 {
00039
public:
00040 KAB::XXPort *xxportObject( KABC::AddressBook *ab,
QWidget *parent,
const char *name )
00041 {
00042
return new CSVXXPort( ab, parent, name );
00043 }
00044 };
00045
00046
extern "C"
00047 {
00048
void *init_libkaddrbk_csv_xxport()
00049 {
00050
return (
new CSVXXPortFactory() );
00051 }
00052 }
00053
00054
00055 CSVXXPort::CSVXXPort( KABC::AddressBook *ab,
QWidget *parent,
const char *name )
00056 : KAB::XXPort( ab, parent, name )
00057 {
00058 createImportAction( i18n(
"Import CSV List..." ) );
00059 createExportAction( i18n(
"Export CSV List..." ) );
00060 }
00061
00062
bool CSVXXPort::exportContacts(
const KABC::AddresseeList &list,
const QString& )
00063 {
00064 KURL url = KFileDialog::getSaveURL(
"addressbook.csv" );
00065
if ( url.isEmpty() )
00066
return true;
00067
00068
if ( !url.isLocalFile() ) {
00069 KTempFile tmpFile;
00070
if ( tmpFile.status() != 0 ) {
00071
QString txt = i18n(
"<qt>Unable to open file <b>%1</b>.%2.</qt>" );
00072 KMessageBox::error( parentWidget(), txt.arg( url.url() )
00073 .arg( strerror( tmpFile.status() ) ) );
00074
return false;
00075 }
00076
00077 doExport( tmpFile.file(), list );
00078 tmpFile.close();
00079
00080
return KIO::NetAccess::upload( tmpFile.name(), url, parentWidget() );
00081 }
else {
00082
QFile file( url.path() );
00083
if ( !file.open( IO_WriteOnly ) ) {
00084
QString txt = i18n(
"<qt>Unable to open file <b>%1</b>.</qt>" );
00085 KMessageBox::error( parentWidget(), txt.arg( url.path() ) );
00086
return false;
00087 }
00088
00089 doExport( &file, list );
00090 file.close();
00091
00092 KMessageBox::information( parentWidget(), i18n(
"The contacts have been exported successfully." ) );
00093
00094
return true;
00095 }
00096 }
00097
00098 KABC::AddresseeList CSVXXPort::importContacts(
const QString& )
const
00099
{
00100 CSVImportDialog dlg( addressBook(), parentWidget() );
00101
if ( dlg.exec() )
00102
return dlg.contacts();
00103
else
00104
return KABC::AddresseeList();
00105 }
00106
00107
void CSVXXPort::doExport(
QFile *fp,
const KABC::AddresseeList &list )
00108 {
00109
QTextStream t( fp );
00110 t.setEncoding( QTextStream::Locale );
00111
00112 KABC::AddresseeList::ConstIterator iter;
00113 KABC::Field::List fields = addressBook()->fields();
00114 KABC::Field::List::Iterator fieldIter;
00115
bool first =
true;
00116
00117
00118
for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) {
00119
if ( !first )
00120 t <<
",";
00121
00122 t <<
"\"" << (*fieldIter)->label() <<
"\"";
00123 first =
false;
00124 }
00125 t <<
"\n";
00126
00127
00128 KABC::Addressee addr;
00129
for ( iter = list.begin(); iter != list.end(); ++iter ) {
00130 addr = *iter;
00131 first =
true;
00132
00133
for ( fieldIter = fields.begin(); fieldIter != fields.end(); ++fieldIter ) {
00134
if ( !first )
00135 t <<
",";
00136
00137 t <<
"\"" << (*fieldIter)->value( addr ).replace(
"\n",
"\\n" ) <<
"\"";
00138 first =
false;
00139 }
00140
00141 t <<
"\n";
00142 }
00143 }
00144
00145
#include "csv_xxport.moc"