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 <kdebug.h>
00034
00035
#include "eudora_xxport.h"
00036
00037
#define CTRL_C 3
00038
00039
class EudoraXXPortFactory :
public KAB::XXPortFactory
00040 {
00041
public:
00042 KAB::XXPort *xxportObject( KABC::AddressBook *ab,
QWidget *parent,
const char *name )
00043 {
00044
return new EudoraXXPort( ab, parent, name );
00045 }
00046 };
00047
00048
extern "C"
00049 {
00050
void *init_libkaddrbk_eudora_xxport()
00051 {
00052
return (
new EudoraXXPortFactory() );
00053 }
00054 }
00055
00056
00057 EudoraXXPort::EudoraXXPort( KABC::AddressBook *ab,
QWidget *parent,
const char *name )
00058 : KAB::XXPort( ab, parent, name )
00059 {
00060 createImportAction( i18n(
"Import Eudora Addressbook..." ) );
00061 }
00062
00063 KABC::AddresseeList EudoraXXPort::importContacts(
const QString& )
const
00064
{
00065
QString fileName = KFileDialog::getOpenFileName( QDir::homeDirPath(),
00066
"*.[tT][xX][tT]|" + i18n(
"Eudora Light Addressbook (*.txt)"), 0 );
00067
if ( fileName.isEmpty() )
00068
return KABC::AddresseeList();
00069
00070
QFile file( fileName );
00071
if ( !file.open( IO_ReadOnly ) )
00072
return KABC::AddresseeList();
00073
00074
QString line;
00075
QTextStream stream( &file );
00076 KABC::Addressee *a = 0;
00077
int bytesRead = 0;
00078
00079 KABC::AddresseeList list;
00080
00081
while( !stream.eof() ) {
00082 line = stream.readLine();
00083 bytesRead += line.length();
00084
QString tmp;
00085
00086
if ( line.startsWith(
"alias" ) ) {
00087
if ( a ) {
00088 list << *a;
00089
delete a;
00090 a = 0;
00091 a =
new KABC::Addressee();
00092 }
else
00093 a =
new KABC::Addressee();
00094
00095 tmp = key( line ).stripWhiteSpace();
00096
if ( !tmp.isEmpty() )
00097 a->setFormattedName( tmp );
00098
00099 tmp = email( line ).stripWhiteSpace();
00100
if ( !tmp.isEmpty() )
00101 a->insertEmail( tmp );
00102 }
else if ( line.startsWith(
"note" ) ) {
00103
if ( !a )
00104
break;
00105
00106 tmp = comment( line ).stripWhiteSpace();
00107
if ( !tmp.isEmpty() )
00108 a->setNote( tmp );
00109
00110 tmp = get( line,
"name" ).stripWhiteSpace();
00111
if ( !tmp.isEmpty() )
00112 a->setNameFromString( tmp );
00113
00114 tmp = get( line,
"address" ).stripWhiteSpace();
00115
if ( !tmp.isEmpty() ) {
00116 KABC::Address addr;
00117 kdDebug(5720) << tmp << endl;
00118 addr.setLabel( tmp );
00119 a->insertAddress( addr );
00120 }
00121
00122 tmp = get( line,
"phone" ).stripWhiteSpace();
00123
if ( !tmp.isEmpty() )
00124 a->insertPhoneNumber( KABC::PhoneNumber( tmp, KABC::PhoneNumber::Home ) );
00125 }
00126 }
00127
00128
if ( a ) {
00129 list << *a;
00130
delete a;
00131 a = 0;
00132 }
00133
00134 file.close();
00135
00136
return list;
00137 }
00138
00139
QString EudoraXXPort::key(
const QString& line)
const
00140
{
00141
int e;
00142
QString result;
00143
int b = line.find(
'\"', 0 );
00144
00145
if ( b == -1 ) {
00146 b = line.find(
' ' );
00147
if ( b == -1 )
00148
return result;
00149
00150 b++;
00151 e = line.find(
' ', b );
00152 result = line.mid( b, e - b );
00153
00154
return result;
00155 }
00156
00157 b++;
00158 e = line.find(
'\"', b );
00159
if ( e == -1 )
00160
return result;
00161
00162 result = line.mid( b, e - b );
00163
00164
return result;
00165 }
00166
00167
QString EudoraXXPort::email(
const QString& line )
const
00168
{
00169
int b;
00170
QString result;
00171 b = line.findRev(
'\"' );
00172
if ( b == -1 ) {
00173 b = line.findRev(
' ' );
00174
if( b == -1 )
00175
return result;
00176 }
00177 result = line.mid( b + 1 );
00178
00179
return result;
00180 }
00181
00182
QString EudoraXXPort::comment(
const QString& line )
const
00183
{
00184
int b;
00185
QString result;
00186 uint i;
00187 b = line.findRev(
'>' );
00188
if ( b == -1 ) {
00189 b = line.findRev(
'\"' );
00190
if ( b == -1 )
00191
return result;
00192 }
00193
00194 result = line.mid( b + 1 );
00195
for ( i = 0; i < result.length(); i++ ) {
00196
if ( result[ i ] == CTRL_C )
00197 result[ i ] =
'\n';
00198 }
00199
00200
return result;
00201 }
00202
00203
QString EudoraXXPort::get(
const QString& line,
const QString& key )
const
00204
{
00205
QString fd =
"<" + key +
":";
00206
int b, e;
00207 uint i;
00208
00209
00210 b = line.find( fd );
00211
if ( b == -1 )
00212
return QString::null;
00213
00214 b += fd.length();
00215 e = line.find(
'>', b );
00216
if ( e == -1 )
00217
return QString::null;
00218
00219 e--;
00220
QString result = line.mid( b, e - b + 1 );
00221
for ( i = 0; i < result.length(); i++ ) {
00222
if ( result[ i ] == CTRL_C )
00223 result[ i ] =
'\n';
00224 }
00225
00226
return result;
00227 }
00228
00229
#include "eudora_xxport.moc"