summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/xxport/vcard_xxport.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/kaddressbook/xxport/vcard_xxport.cpp b/kaddressbook/xxport/vcard_xxport.cpp
index 54d0cbd..b53f873 100644
--- a/kaddressbook/xxport/vcard_xxport.cpp
+++ b/kaddressbook/xxport/vcard_xxport.cpp
@@ -1,246 +1,254 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <qfile.h> 31#include <qfile.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33 33
34#include <kabc/vcardconverter.h> 34#include <kabc/vcardconverter.h>
35#include <kabc/vcardparser/vcardtool.h>
35#include <kfiledialog.h> 36#include <kfiledialog.h>
36#ifndef KAB_EMBEDDED 37#ifndef KAB_EMBEDDED
37#include <kio/netaccess.h> 38#include <kio/netaccess.h>
38#endif //KAB_EMBEDDED 39#endif //KAB_EMBEDDED
39 40
40#include <klocale.h> 41#include <klocale.h>
41#include <kmessagebox.h> 42#include <kmessagebox.h>
42#include <ktempfile.h> 43#include <ktempfile.h>
43#include <kurl.h> 44#include <kurl.h>
44 45
45#include "xxportmanager.h" 46#include "xxportmanager.h"
46 47
47#include "vcard_xxport.h" 48#include "vcard_xxport.h"
48 49
49#ifndef KAB_EMBEDDED 50#ifndef KAB_EMBEDDED
50 51
51class VCardXXPortFactory : public XXPortFactory 52class VCardXXPortFactory : public XXPortFactory
52{ 53{
53 public: 54 public:
54 XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name ) 55 XXPortObject *xxportObject( KABC::AddressBook *ab, QWidget *parent, const char *name )
55 { 56 {
56 return new VCardXXPort( ab, parent, name ); 57 return new VCardXXPort( ab, parent, name );
57 } 58 }
58}; 59};
59#endif //KAB_EMBEDDED 60#endif //KAB_EMBEDDED
60 61
61 62
62extern "C" 63extern "C"
63{ 64{
64#ifndef KAB_EMBEDDED 65#ifndef KAB_EMBEDDED
65 void *init_libkaddrbk_vcard_xxport() 66 void *init_libkaddrbk_vcard_xxport()
66#else //KAB_EMBEDDED 67#else //KAB_EMBEDDED
67 void *init_kaddrbk_vcard_xxport() 68 void *init_kaddrbk_vcard_xxport()
68#endif //KAB_EMBEDDED 69#endif //KAB_EMBEDDED
69 { 70 {
70 return ( new VCardXXPortFactory() ); 71 return ( new VCardXXPortFactory() );
71 } 72 }
72} 73}
73 74
74 75
75VCardXXPort::VCardXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name ) 76VCardXXPort::VCardXXPort( KABC::AddressBook *ab, QWidget *parent, const char *name )
76 : XXPortObject( ab, parent, name ) 77 : XXPortObject( ab, parent, name )
77{ 78{
78 createImportAction( i18n( "Import vCard..." ) ); 79 createImportAction( i18n( "Import vCard..." ) );
79 createExportAction( i18n( "Export vCard 2.1..." ), "v21" ); 80 createExportAction( i18n( "Export vCard 2.1..." ), "v21" );
80 createExportAction( i18n( "Export vCard 3.0..." ), "v30" ); 81 createExportAction( i18n( "Export vCard 3.0..." ), "v30" );
81} 82}
82 83
83bool VCardXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data ) 84bool VCardXXPort::exportContacts( const KABC::AddresseeList &list, const QString &data )
84{ 85{
85 QString name; 86 QString name;
86 87
87 if ( list.count() == 1 ) 88 if ( list.count() == 1 )
88 name = list[ 0 ].givenName() + "_" + list[ 0 ].familyName() + ".vcf"; 89 name = list[ 0 ].givenName() + "_" + list[ 0 ].familyName() + ".vcf";
89 else 90 else
90 name = "addressbook.vcf"; 91 name = "addressbook.vcf";
91 92
92#ifndef KAB_EMBEDDED 93#ifndef KAB_EMBEDDED
93 QString fileName = KFileDialog::getSaveFileName( name ); 94 QString fileName = KFileDialog::getSaveFileName( name );
94#else //KAB_EMBEDDED 95#else //KAB_EMBEDDED
95 QString fileName = KFileDialog::getSaveFileName( name, i18n("Save file"), parentWidget() ); 96 QString fileName = KFileDialog::getSaveFileName( name, i18n("Save file"), parentWidget() );
96#endif //KAB_EMBEDDED 97#endif //KAB_EMBEDDED
97 98
98 if ( fileName.isEmpty() ) 99 if ( fileName.isEmpty() )
99 return true; 100 return true;
100 101
101 QFile outFile( fileName ); 102 QFile outFile( fileName );
102 if ( !outFile.open( IO_WriteOnly ) ) { 103 if ( !outFile.open( IO_WriteOnly ) ) {
103 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" ); 104 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" );
104 KMessageBox::error( parentWidget(), text.arg( fileName ) ); 105 KMessageBox::error( parentWidget(), text.arg( fileName ) );
105 return false; 106 return false;
106 } 107 }
107 108
108 QTextStream t( &outFile ); 109 QTextStream t( &outFile );
109 t.setEncoding( QTextStream::UnicodeUTF8 ); 110 t.setEncoding( QTextStream::UnicodeUTF8 );
110 111
111 KABC::Addressee::List::ConstIterator it; 112 KABC::Addressee::List::ConstIterator it;
112 for ( it = list.begin(); it != list.end(); ++it ) { 113 for ( it = list.begin(); it != list.end(); ++it ) {
113 KABC::VCardConverter converter; 114 KABC::VCardConverter converter;
114 QString vcard; 115 QString vcard;
115 116
116 KABC::VCardConverter::Version version; 117 KABC::VCardConverter::Version version;
117 if ( data == "v21" ) 118 if ( data == "v21" )
118 version = KABC::VCardConverter::v2_1; 119 version = KABC::VCardConverter::v2_1;
119 else 120 else
120 version = KABC::VCardConverter::v3_0; 121 version = KABC::VCardConverter::v3_0;
121 122
122 converter.addresseeToVCard( *it, vcard, version ); 123 converter.addresseeToVCard( *it, vcard, version );
123 t << vcard << "\r\n\r\n"; 124 t << vcard << "\r\n\r\n";
124 } 125 }
125 126
126 outFile.close(); 127 outFile.close();
127 128
128 return true; 129 return true;
129} 130}
130 131
131KABC::AddresseeList VCardXXPort::importContacts( const QString& ) const 132KABC::AddresseeList VCardXXPort::importContacts( const QString& ) const
132{ 133{
133 QString fileName; 134 QString fileName;
134 KABC::AddresseeList addrList; 135 KABC::AddresseeList addrList;
135 KURL url; 136 KURL url;
136 137
137#ifndef KAB_EMBEDDED 138#ifndef KAB_EMBEDDED
138 if ( !XXPortManager::importData.isEmpty() ) 139 if ( !XXPortManager::importData.isEmpty() )
139 addrList = parseVCard( XXPortManager::importData ); 140 addrList = parseVCard( XXPortManager::importData );
140 else { 141 else {
141 if ( XXPortManager::importURL.isEmpty() ) 142 if ( XXPortManager::importURL.isEmpty() )
142 { 143 {
143 url = KFileDialog::getLoadFileName( QString::null, i18n("Select vCard to Import"), parentWidget() ); 144 url = KFileDialog::getLoadFileName( QString::null, i18n("Select vCard to Import"), parentWidget() );
144 } 145 }
145 else 146 else
146 url = XXPortManager::importURL; 147 url = XXPortManager::importURL;
147 148
148 if ( url.isEmpty() ) 149 if ( url.isEmpty() )
149 return addrList; 150 return addrList;
150 151
151 QString caption( i18n( "vCard Import Failed" ) ); 152 QString caption( i18n( "vCard Import Failed" ) );
152 if ( KIO::NetAccess::download( url, fileName ) ) { 153 if ( KIO::NetAccess::download( url, fileName ) ) {
153 QFile file( fileName ); 154 QFile file( fileName );
154 155
155 file.open( IO_ReadOnly ); 156 file.open( IO_ReadOnly );
156 QByteArray rawData = file.readAll(); 157 QByteArray rawData = file.readAll();
157 file.close(); 158 file.close();
158 159
159 QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 160 QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
160 addrList = parseVCard( data ); 161 addrList = parseVCard( data );
161 162
162 if ( !url.isLocalFile() ) 163 if ( !url.isLocalFile() )
163 KIO::NetAccess::removeTempFile( fileName ); 164 KIO::NetAccess::removeTempFile( fileName );
164 165
165 } else { 166 } else {
166 QString text = i18n( "<qt>Unable to access <b>%1</b>.</qt>" ); 167 QString text = i18n( "<qt>Unable to access <b>%1</b>.</qt>" );
167 KMessageBox::error( parentWidget(), text.arg( url.url() ), caption ); 168 KMessageBox::error( parentWidget(), text.arg( url.url() ), caption );
168 } 169 }
169 170
170 } 171 }
171 172
172 173
173#else //KAB_EMBEDDED 174#else //KAB_EMBEDDED
174 175
175 176
176 if ( !XXPortManager::importData.isEmpty() ) 177 if ( !XXPortManager::importData.isEmpty() )
177 addrList = parseVCard( XXPortManager::importData ); 178 addrList = parseVCard( XXPortManager::importData );
178 else { 179 else {
179 if ( XXPortManager::importURL.isEmpty() ) 180 if ( XXPortManager::importURL.isEmpty() )
180 { 181 {
181 fileName = KFileDialog::getOpenFileName( QString::null, i18n("Select vCard to Import"), parentWidget() ); 182 fileName = KFileDialog::getOpenFileName( QString::null, i18n("Select vCard to Import"), parentWidget() );
182 if ( fileName.isEmpty() ) 183 if ( fileName.isEmpty() )
183 return addrList; 184 return addrList;
184 185
185 } 186 }
186 else 187 else
187 { 188 {
188//US url = XXPortManager::importURL; 189//US url = XXPortManager::importURL;
189 qDebug("VCardXXPort::importContacts Urls at the moment not supported"); 190 qDebug("VCardXXPort::importContacts Urls at the moment not supported");
190 if ( url.isEmpty() ) 191 if ( url.isEmpty() )
191 return addrList; 192 return addrList;
192 193
193 } 194 }
194 195
195 196
196 QFile file( fileName ); 197 QFile file( fileName );
197 198
198 file.open( IO_ReadOnly ); 199 file.open( IO_ReadOnly );
199 QByteArray rawData = file.readAll(); 200 QByteArray rawData = file.readAll();
200 file.close(); 201 file.close();
201 202
202 QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 203 QString data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
203 addrList = parseVCard( data ); 204 addrList = parseVCard( data );
204 205
205 } 206 }
206#endif //KAB_EMBEDDED 207#endif //KAB_EMBEDDED
207 208
208 return addrList; 209 return addrList;
209} 210}
210 211
211KABC::AddresseeList VCardXXPort::parseVCard( const QString &data ) const 212KABC::AddresseeList VCardXXPort::parseVCard( const QString &data ) const
212{ 213{
213 KABC::VCardConverter converter; 214
215 KABC::VCardTool tool;
214 KABC::AddresseeList addrList; 216 KABC::AddresseeList addrList;
215 217 addrList = tool.parseVCards( data );
218 // LR : I switched to the code, which is in current cvs HEAD
219 /*
216 uint numVCards = data.contains( "BEGIN:VCARD", false ); 220 uint numVCards = data.contains( "BEGIN:VCARD", false );
217 QStringList dataList = QStringList::split( "\r\n\r\n", data ); 221 QStringList dataList = QStringList::split( "\r\n\r\n", data );
218 222
219 for ( uint i = 0; i < numVCards && i < dataList.count(); ++i ) { 223 for ( uint i = 0; i < numVCards && i < dataList.count(); ++i ) {
220 KABC::Addressee addr; 224 KABC::Addressee addr;
221 bool ok = false; 225 bool ok = false;
222 226
223 if ( dataList[ i ].contains( "VERSION:3.0" ) ) 227 if ( dataList[ i ].contains( "VERSION:3.0" ) )
224 ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v3_0 ); 228 ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v3_0 );
225 else if ( dataList[ i ].contains( "VERSION:2.1" ) ) 229 else if ( dataList[ i ].contains( "VERSION:2.1" ) )
226 ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v2_1 ); 230 ok = converter.vCardToAddressee( dataList[ i ], addr, KABC::VCardConverter::v2_1 );
227 else { 231 else {
228 KMessageBox::sorry( parentWidget(), i18n( "Not supported vCard version." ) ); 232 KMessageBox::sorry( parentWidget(), i18n( "Not supported vCard version." ) );
229 continue; 233 continue;
230 } 234 }
231 235
232 if ( !addr.isEmpty() && ok ) 236 if ( !addr.isEmpty() && ok )
233 addrList.append( addr ); 237 addrList.append( addr );
234 else { 238 else {
235 QString text = i18n( "The selected file does not include a valid vCard. " 239 QString text = i18n( "The selected file does not include a valid vCard. "
236 "Please check the file and try again." ); 240 "Please check the file and try again." );
237 KMessageBox::sorry( parentWidget(), text ); 241 KMessageBox::sorry( parentWidget(), text );
238 } 242 }
239 } 243 }
240 244 */
245 if ( addrList.isEmpty() ) {
246 QString text = i18n( "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n" );
247 KMessageBox::sorry( parentWidget(), text );
248 }
241 return addrList; 249 return addrList;
242} 250}
243 251
244#ifndef KAB_EMBEDDED 252#ifndef KAB_EMBEDDED
245#include "vcard_xxport.moc" 253#include "vcard_xxport.moc"
246#endif //KAB_EMBEDDED 254#endif //KAB_EMBEDDED