summaryrefslogtreecommitdiffabout
path: root/kabc/plugins
authorzautrix <zautrix>2004-09-21 07:05:01 (UTC)
committer zautrix <zautrix>2004-09-21 07:05:01 (UTC)
commit434ddaa08e0a650422ef271332a1d11879028095 (patch) (unidiff)
treee4f229120d8bfa9febb7ab123b1311329f0e6aa4 /kabc/plugins
parented49c55dac215ac2ed9286ebfc36e5a19417f0bb (diff)
downloadkdepimpi-434ddaa08e0a650422ef271332a1d11879028095.zip
kdepimpi-434ddaa08e0a650422ef271332a1d11879028095.tar.gz
kdepimpi-434ddaa08e0a650422ef271332a1d11879028095.tar.bz2
DTM sync fixes
Diffstat (limited to 'kabc/plugins') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp57
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp119
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.h1
3 files changed, 91 insertions, 86 deletions
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index bba5f9a..48d3985 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -1,437 +1,400 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#include <unistd.h> 30#include <unistd.h>
31 31
32#include <qdir.h> 32#include <qdir.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qfileinfo.h> 34#include <qfileinfo.h>
35#include <qregexp.h> 35#include <qregexp.h>
36//US #include <qtimer.h> 36//US #include <qtimer.h>
37 37
38#include <kapplication.h> 38#include <kapplication.h>
39#include <kconfig.h> 39#include <kconfig.h>
40#include <kdebug.h> 40#include <kdebug.h>
41#include <klocale.h> 41#include <klocale.h>
42//US #include <ksavefile.h> 42//US #include <ksavefile.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46#include <sl/slzdb.h> 46#include <sl/slzdb.h>
47 47
48#include <libkdepim/ksyncprofile.h> 48#include <libkdepim/ksyncprofile.h>
49 49
50#include "resourcesharpdtmconfig.h" 50#include "resourcesharpdtmconfig.h"
51#include "resourcesharpdtm.h" 51#include "resourcesharpdtm.h"
52 52
53#include "syncprefwidget.h" 53#include "syncprefwidget.h"
54 54
55#include "stdaddressbook.h" 55#include "stdaddressbook.h"
56 56
57#include "sharpdtmconverter.h" 57#include "sharpdtmconverter.h"
58//#define ALLOW_LOCKING 58//#define ALLOW_LOCKING
59using namespace KABC; 59using namespace KABC;
60extern "C" 60extern "C"
61{ 61{
62 void *init_microkabc_sharpdtm() 62 void *init_microkabc_sharpdtm()
63 { 63 {
64 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig,SyncPrefWidgetContainer>(); 64 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig,SyncPrefWidgetContainer>();
65 } 65 }
66} 66}
67 67
68ResourceSharpDTM::ResourceSharpDTM( const KConfig *config, bool syncable ) 68ResourceSharpDTM::ResourceSharpDTM( const KConfig *config, bool syncable )
69 : Resource( config, syncable ), mConverter (0) 69 : Resource( config, syncable ), mConverter (0)
70{ 70{
71 // we can not choose the filename. Therefore use the default to display 71 // we can not choose the filename. Therefore use the default to display
72 72
73 QString fileName = SlZDataBase::addressbookFileName(); 73 QString fileName = SlZDataBase::addressbookFileName();
74 init( fileName ); 74 init( fileName );
75} 75}
76 76
77ResourceSharpDTM::ResourceSharpDTM( const QString &fileName, bool syncable ) 77ResourceSharpDTM::ResourceSharpDTM( const QString &fileName, bool syncable )
78 : Resource( 0, syncable ) 78 : Resource( 0, syncable )
79{ 79{
80 init( fileName ); 80 init( fileName );
81} 81}
82 82
83void ResourceSharpDTM::init( const QString &fileName ) 83void ResourceSharpDTM::init( const QString &fileName )
84{ 84{
85 85
86 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 86 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
87 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 87 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
88 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 88 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
89 89
90 setFileName( fileName ); 90 setFileName( fileName );
91} 91}
92 92
93ResourceSharpDTM::~ResourceSharpDTM() 93ResourceSharpDTM::~ResourceSharpDTM()
94{ 94{
95 if (mConverter != 0) 95 if (mConverter != 0)
96 delete mConverter; 96 delete mConverter;
97 97
98 if(mAccess != 0) 98 if(mAccess != 0)
99 delete mAccess; 99 delete mAccess;
100} 100}
101 101
102void ResourceSharpDTM::writeConfig( KConfig *config ) 102void ResourceSharpDTM::writeConfig( KConfig *config )
103{ 103{
104 Resource::writeConfig( config ); 104 Resource::writeConfig( config );
105} 105}
106 106
107Ticket *ResourceSharpDTM::requestSaveTicket() 107Ticket *ResourceSharpDTM::requestSaveTicket()
108{ 108{
109 109
110 110
111 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); 111 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1());
112 112
113 if ( !addressBook() ) return 0; 113 if ( !addressBook() ) return 0;
114 114
115#ifdef ALLOW_LOCKING 115#ifdef ALLOW_LOCKING
116 if ( !lock( fileName() ) ) { 116 if ( !lock( fileName() ) ) {
117 qDebug("ResourceSharpDTM::requestSaveTicket(): Unable to lock file "); 117 qDebug("ResourceSharpDTM::requestSaveTicket(): Unable to lock file ");
118 return 0; 118 return 0;
119 } 119 }
120#endif 120#endif
121 return createTicket( this ); 121 return createTicket( this );
122} 122}
123 123
124 124
125bool ResourceSharpDTM::doOpen() 125bool ResourceSharpDTM::doOpen()
126{ 126{
127 qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1()); 127 qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1());
128 128
129 // the last parameter in the SlZDataBase constructor means "readonly" 129 // the last parameter in the SlZDataBase constructor means "readonly"
130 mAccess = new SlZDataBase(fileName(), 130 mAccess = new SlZDataBase(fileName(),
131 SlZDataBase::addressbookItems(), 131 SlZDataBase::addressbookItems(),
132 NULL, true); 132 NULL, false);
133 133
134 if ( !mAccess ) { 134 if ( !mAccess ) {
135 qDebug("Unable to load file() %s", fileName().latin1()); 135 qDebug("Unable to load file() %s", fileName().latin1());
136 return false; 136 return false;
137 } 137 }
138 138
139 if (mConverter == 0) 139 if (mConverter == 0)
140 { 140 {
141 mConverter = new SharpDTMConverter(); 141 mConverter = new SharpDTMConverter();
142 bool res = mConverter->init(); 142 bool res = mConverter->init();
143 if ( !res ) 143 if ( !res )
144 { 144 {
145 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file"); 145 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
146 146
147 qDebug(msg); 147 qDebug(msg);
148 delete mAccess; 148 delete mAccess;
149 mAccess = 0; 149 mAccess = 0;
150 return false; 150 return false;
151 } 151 }
152 } 152 }
153 153
154 return true; 154 return true;
155} 155}
156 156
157void ResourceSharpDTM::doClose() 157void ResourceSharpDTM::doClose()
158{ 158{
159 qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1()); 159 qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1());
160 160
161 if(mAccess) 161 if(mAccess)
162 { 162 {
163 delete mAccess; 163 delete mAccess;
164 mAccess = 0; 164 mAccess = 0;
165 } 165 }
166 // it seems so, that deletion of access deletes backend as well 166 // it seems so, that deletion of access deletes backend as well
167 //delete backend; 167 //delete backend;
168 168
169 return; 169 return;
170} 170}
171 171
172bool ResourceSharpDTM::load() 172bool ResourceSharpDTM::load()
173{ 173{
174 qDebug("ResourceSharpDTM::load: %s", fileName().latin1()); 174 qDebug("ResourceSharpDTM::load: %s", fileName().latin1());
175 175
176 bool res = false; 176 bool res = false;
177 177
178 CardId id; 178 CardId id;
179 179
180 for (bool res=mAccess->first(); res == true; res=mAccess->next()) 180 for (bool res=mAccess->first(); res == true; res=mAccess->next())
181 { 181 {
182 id = mAccess->cardId(); 182 id = mAccess->cardId();
183 183
184 KABC::Addressee addressee; 184 KABC::Addressee addressee;
185 185
186 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 186 res = mConverter->sharpToAddressee( id, mAccess, addressee );
187 187
188 if ( !addressee.isEmpty() && res ) 188 if ( !addressee.isEmpty() && res )
189 { 189 {
190 addressee.setResource( this ); 190 addressee.setResource( this );
191 addressBook()->insertAddressee( addressee ); 191 addressBook()->insertAddressee( addressee );
192 } 192 }
193 } 193 }
194 194
195 return true; 195 return true;
196} 196}
197 197
198bool ResourceSharpDTM::save( Ticket *ticket ) 198bool ResourceSharpDTM::save( Ticket *ticket )
199{ 199{
200 qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); 200 qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
201 201
202 mDirWatch.stopScan(); 202 mDirWatch.stopScan();
203 203
204 KABC::AddressBook::Iterator it; 204 KABC::AddressBook::Iterator it;
205 bool res; 205 bool res;
206 KABC::Addressee::List changedAddressees; 206 KABC::Addressee::List changedAddressees;
207 207
208 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 208 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
209 209
210 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 210 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
211 QString uid = (*it).originalExternalUID(); 211 QString uid = (*it).originalExternalUID();
212 CardId id ; 212 CardId id ;
213 bool res; 213 bool res;
214 if ( uid.isEmpty() ) 214 if ( uid.isEmpty() )
215 id = 0; 215 id = 0;
216 else 216 else
217 id = uid.toUInt(); 217 id = uid.toUInt();
218 KABC::Addressee addressee = (*it); 218 KABC::Addressee addressee = (*it);
219 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { 219 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
220 res = mAccess->startEditCard(id); 220 res = mAccess->startEditCard(id);
221 if (res == true) 221 if (res == true)
222 { 222 {
223 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 223 res = mConverter->addresseeToSharp( (*it), mAccess, id );
224 if (res == true) 224 if (res == true)
225 { 225 {
226 KABC::Addressee addressee; 226 KABC::Addressee addressee;
227 qDebug("1NEW id is %d", id);
228 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 227 res = mConverter->sharpToAddressee( id, mAccess, addressee );
229 addressee.setUid((*it).uid() ); 228 addressee.setUid((*it).uid() );
230 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM ); 229 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
231 changedAddressees.append( addressee );
232 res = mAccess->finishEditCard(&id); 230 res = mAccess->finishEditCard(&id);
233 qDebug("2NEW id is %d", id); 231 //qDebug("2NEW id is %d", id);
232 addressee.setExternalUID( QString::number( id ) );
233 addressee.setOriginalExternalUID( QString::number( id ) );
234 changedAddressees.append( addressee );
234 235
235 if (res == false) 236 if (res == false)
236 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 237 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
237 else { 238
238 qDebug("added card success ");
239 }
240 } 239 }
241 else 240 else
242 { 241 {
243 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 242 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
244 mAccess->cancelEditCard(); 243 mAccess->cancelEditCard();
245 } 244 }
246 } 245 }
247 246
248 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 247 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
249 res = mAccess->deleteCard(&id); 248 res = mAccess->deleteCard(&id);
250 if ( res ) 249 if ( res )
251 qDebug("delete success "); 250 qDebug("delete success ");
252 else 251 else
253 qDebug("delete error "); 252 qDebug("delete error ");
254 253
255 254
256 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 255 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
257 //changed 256 //changed
257 qDebug("changed ****");
258 res = mAccess->startEditCard(id); 258 res = mAccess->startEditCard(id);
259 if (res == true) 259 if (res == true)
260 { 260 {
261 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 261 res = mConverter->addresseeToSharp( (*it), mAccess, id );
262 if (res == true) 262 if (res == true)
263 { 263 {
264 KABC::Addressee addressee; 264 KABC::Addressee addressee;
265 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 265 res = mConverter->sharpToAddressee( id, mAccess, addressee );
266 addressee.setUid((*it).uid() ); 266 addressee.setUid((*it).uid() );
267 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM ); 267 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM );
268 changedAddressees.append( addressee ); 268 changedAddressees.append( addressee );
269 res = mAccess->finishEditCard(&id); 269 res = mAccess->finishEditCard(&id);
270 if (res == false) 270 if (res == false)
271 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 271 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
272 else { 272
273 qDebug("change card succes ");
274 }
275 } 273 }
276 else 274 else
277 { 275 {
278 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 276 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
279 mAccess->cancelEditCard(); 277 mAccess->cancelEditCard();
280 } 278 }
281 } 279 }
282 } 280 }
283
284
285
286
287
288
289
290
291 }
292
293#if 0
294 // old code
295 CardId id = 0;// 0 means new card
296 KABC::Addressee addressee = (*it);
297
298 res = mAccess->startEditCard(id);
299 if (res == true)
300 {
301 res = mConverter->addresseeToSharp( *it, mAccess, id );
302 if (res == true)
303 {
304 res = mAccess->finishEditCard(&id);
305 if (res == false)
306 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
307 } 281 }
308 else
309 {
310 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
311 mAccess->cancelEditCard();
312 }
313 }
314 else
315 {
316 qDebug("Unable to add new card. Addressee: %s", addressee.formattedName().latin1());
317 }
318#endif
319 282
320 } 283 }
321 KABC::Addressee::List::Iterator it2; 284 KABC::Addressee::List::Iterator it2;
322 for ( it2 = changedAddressees.begin(); it2 != changedAddressees.end(); ++it2 ) 285 for ( it2 = changedAddressees.begin(); it2 != changedAddressees.end(); ++it2 )
323 addressBook()->insertAddressee((*it2)); 286 addressBook()->insertAddressee((*it2));
324 //US mAccess->save(); 287 //US mAccess->save();
325 288
326 mDirWatch.startScan(); 289 mDirWatch.startScan();
327 delete ticket; 290 delete ticket;
328 unlock( fileName() ); 291 unlock( fileName() );
329 292
330 return true; 293 return true;
331} 294}
332 295
333bool ResourceSharpDTM::lock( const QString &lockfileName ) 296bool ResourceSharpDTM::lock( const QString &lockfileName )
334{ 297{
335#ifdef ALLOW_LOCKING 298#ifdef ALLOW_LOCKING
336 qDebug("ResourceSharpDTM::lock: %s", fileName().latin1()); 299 qDebug("ResourceSharpDTM::lock: %s", fileName().latin1());
337 300
338 kdDebug(5700) << "ResourceSharpDTM::lock()" << endl; 301 kdDebug(5700) << "ResourceSharpDTM::lock()" << endl;
339 302
340 QString fn = lockfileName; 303 QString fn = lockfileName;
341 304
342 KURL url(fn); 305 KURL url(fn);
343 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 306 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
344 307
345 kdDebug(5700) << "-- lock name: " << lockName << endl; 308 kdDebug(5700) << "-- lock name: " << lockName << endl;
346 309
347 if (QFile::exists( lockName )) 310 if (QFile::exists( lockName ))
348 { 311 {
349 qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName()); 312 qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName());
350 return false; 313 return false;
351 } 314 }
352 315
353 316
354 QString lockUniqueName; 317 QString lockUniqueName;
355 lockUniqueName = fn + KApplication::randomString( 8 ); 318 lockUniqueName = fn + KApplication::randomString( 8 );
356 319
357 url = lockUniqueName; 320 url = lockUniqueName;
358//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 321//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
359 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 322 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
360 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 323 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
361 324
362 // Create unique file 325 // Create unique file
363 QFile file( mLockUniqueName ); 326 QFile file( mLockUniqueName );
364 file.open( IO_WriteOnly ); 327 file.open( IO_WriteOnly );
365 file.close(); 328 file.close();
366 329
367 // Create lock file 330 // Create lock file
368 int result = 0; 331 int result = 0;
369#ifndef _WIN32_ 332#ifndef _WIN32_
370 result = ::link( QFile::encodeName( mLockUniqueName ), 333 result = ::link( QFile::encodeName( mLockUniqueName ),
371 QFile::encodeName( lockName ) ); 334 QFile::encodeName( lockName ) );
372#endif 335#endif
373 if ( result == 0 ) { 336 if ( result == 0 ) {
374 addressBook()->emitAddressBookLocked(); 337 addressBook()->emitAddressBookLocked();
375 return true; 338 return true;
376 } 339 }
377 340
378 // TODO: check stat 341 // TODO: check stat
379 342
380 return false; 343 return false;
381#else 344#else
382 return true; 345 return true;
383#endif 346#endif
384} 347}
385 348
386void ResourceSharpDTM::unlock( const QString &fileName ) 349void ResourceSharpDTM::unlock( const QString &fileName )
387{ 350{
388#ifdef ALLOW_LOCKING 351#ifdef ALLOW_LOCKING
389 qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1()); 352 qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1());
390 353
391 QString fn = fileName; 354 QString fn = fileName;
392 KURL url(fn); 355 KURL url(fn);
393 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 356 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
394 357
395 QFile::remove( lockName ); 358 QFile::remove( lockName );
396 QFile::remove( mLockUniqueName ); 359 QFile::remove( mLockUniqueName );
397 addressBook()->emitAddressBookUnlocked(); 360 addressBook()->emitAddressBookUnlocked();
398#endif 361#endif
399} 362}
400 363
401void ResourceSharpDTM::setFileName( const QString &newFileName ) 364void ResourceSharpDTM::setFileName( const QString &newFileName )
402{ 365{
403 mDirWatch.stopScan(); 366 mDirWatch.stopScan();
404 mDirWatch.removeFile( fileName() ); 367 mDirWatch.removeFile( fileName() );
405 368
406 Resource::setFileName( newFileName ); 369 Resource::setFileName( newFileName );
407 370
408 mDirWatch.addFile( fileName() ); 371 mDirWatch.addFile( fileName() );
409 mDirWatch.startScan(); 372 mDirWatch.startScan();
410 373
411} 374}
412 375
413void ResourceSharpDTM::fileChanged() 376void ResourceSharpDTM::fileChanged()
414{ 377{
415 // There is a small theoretical chance that KDirWatch calls us before 378 // There is a small theoretical chance that KDirWatch calls us before
416 // we are fully constructed 379 // we are fully constructed
417 if (!addressBook()) 380 if (!addressBook())
418 return; 381 return;
419 382
420 QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) ); 383 QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
421 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 384 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
422 load(); 385 load();
423 addressBook()->emitAddressBookChanged(); 386 addressBook()->emitAddressBookChanged();
424 } 387 }
425} 388}
426 389
427void ResourceSharpDTM::removeAddressee( const Addressee &addr ) 390void ResourceSharpDTM::removeAddressee( const Addressee &addr )
428{ 391{
429} 392}
430 393
431void ResourceSharpDTM::cleanUp() 394void ResourceSharpDTM::cleanUp()
432{ 395{
433 unlock( fileName() ); 396 unlock( fileName() );
434} 397}
435 398
436 399
437 400
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
index b065bf3..f3bf2c5 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
@@ -1,390 +1,431 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include "kglobal.h" 28#include "kglobal.h"
29#include <qregexp.h>
29 30
30 31
31#include "sharpdtmconverter.h" 32#include "sharpdtmconverter.h"
32 33
33#include <sl/slcategories.h> 34#include <sl/slcategories.h>
35#include <libkdepim/ksyncprofile.h>
34//US #include <qpe/categoryselect.h> 36//US #include <qpe/categoryselect.h>
35 37
36 38
37using namespace KABC; 39using namespace KABC;
38using namespace SlCategory; 40using namespace SlCategory;
39 41
40SharpDTMConverter::SharpDTMConverter() : catDB(0) 42SharpDTMConverter::SharpDTMConverter() : catDB(0)
41{ 43{
42} 44}
43 45
44SharpDTMConverter::~SharpDTMConverter() 46SharpDTMConverter::~SharpDTMConverter()
45{ 47{
46 deinit(); 48 deinit();
47} 49}
48 50
49bool SharpDTMConverter::init() 51bool SharpDTMConverter::init()
50{ 52{
51 catDB = new SlCategory::SlCategories(); 53 catDB = new SlCategory::SlCategories();
52 54
53 if (!catDB) 55 if (!catDB)
54 return false; 56 return false;
55 57
56// catDB->load( categoryFileName() ); 58// catDB->load( categoryFileName() );
57 return true; 59 return true;
58} 60}
59 61
60void SharpDTMConverter::deinit() 62void SharpDTMConverter::deinit()
61{ 63{
62 if (catDB) 64 if (catDB)
63 { 65 {
64 delete catDB; 66 delete catDB;
65 catDB = 0; 67 catDB = 0;
66 } 68 }
67} 69}
68 70
69bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ) 71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr )
70{ 72{
71 SlZDataBase* db = (SlZDataBase*)database; 73 SlZDataBase* db = (SlZDataBase*)database;
72 74
73 // for syncing: we need setting of the two fields 75 // for syncing: we need setting of the two fields
74 addr.setExternalUID( QString::number( contact ) ); 76 addr.setExternalUID( QString::number( contact ) );
75 addr.setOriginalExternalUID( QString::number( contact ) ); 77 addr.setOriginalExternalUID( QString::number( contact ) );
78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
76 79
77 80
78 // name 81 // name
79 qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); 82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!");
80 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); 83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); // needs fix
81 84
82 addr.setFamilyName( db->readField(ZdbAdrs::LastName) ); 85 addr.setFamilyName( db->readField(ZdbAdrs::LastName) );
83 addr.setGivenName( db->readField(ZdbAdrs::FirstName) ); 86 addr.setGivenName( db->readField(ZdbAdrs::FirstName) );
84 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) ); 87 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) );
85 addr.setPrefix( db->readField(ZdbAdrs::Title) ); 88 addr.setPrefix( db->readField(ZdbAdrs::Title) );
86 addr.setSuffix( db->readField(ZdbAdrs::Suffix) ); 89 addr.setSuffix( db->readField(ZdbAdrs::Suffix) );
87 90
88 91
89 // email
90 QString emailstr = db->readField(ZdbAdrs::Emails); 92 QString emailstr = db->readField(ZdbAdrs::Emails);
91 qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); 93 emailstr.replace( QRegExp(","), " " );
92 QStringList emails = QStringList::split(",", emailstr); 94 emailstr.replace( QRegExp(";"), " " );
93 95 emailstr.replace( QRegExp(":"), " " );
96 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1());
97 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace());
98 bool defE = false;
99 bool found = false;
94 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 100 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
95 addr.insertEmail( *it, ((*it) == db->readField(ZdbAdrs::DefaultEmail)) ); 101 if (found )
102 defE = false;
103 else
104 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower());
105 addr.insertEmail( *it, defE );
96 } 106 }
97 107 if ( ! found )
98 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty()) 108 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty())
99 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true); 109 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true);
100 110
101 // home 111 // home
102 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) || 112 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) ||
103 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) || 113 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) ||
104 (!db->readField(ZdbAdrs::HomeState).isEmpty()) || 114 (!db->readField(ZdbAdrs::HomeState).isEmpty()) ||
105 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) || 115 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) ||
106 (!db->readField(ZdbAdrs::HomeCountry).isEmpty())) 116 (!db->readField(ZdbAdrs::HomeCountry).isEmpty()))
107 { 117 {
108 Address homeaddress; 118 Address homeaddress;
109 homeaddress.setType(Address::Home); 119 homeaddress.setType(Address::Home);
110//US homeaddress.setPostOfficeBox( "" ); 120//US homeaddress.setPostOfficeBox( "" );
111//US homeaddress.setExtended( "" ); 121//US homeaddress.setExtended( "" );
112 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) ); 122 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) );
113 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) ); 123 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) );
114 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) ); 124 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) );
115 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) ); 125 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) );
116 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) ); 126 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) );
117 127
118 addr.insertAddress( homeaddress ); 128 addr.insertAddress( homeaddress );
119 } 129 }
120 130
121 if (!db->readField(ZdbAdrs::HomePhone).isEmpty()) 131 if (!db->readField(ZdbAdrs::HomePhone).isEmpty())
122 { 132 {
123 PhoneNumber homephone; 133 PhoneNumber homephone;
124 homephone.setType( PhoneNumber::Home ); 134 homephone.setType( PhoneNumber::Home );
125 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) ); 135 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) );
126 addr.insertPhoneNumber( homephone ); 136 addr.insertPhoneNumber( homephone );
127 } 137 }
128 138
129 if (!db->readField(ZdbAdrs::HomeFax).isEmpty()) 139 if (!db->readField(ZdbAdrs::HomeFax).isEmpty())
130 { 140 {
131 PhoneNumber homefax; 141 PhoneNumber homefax;
132 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); 142 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax );
133 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) ); 143 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) );
134 addr.insertPhoneNumber( homefax ); 144 addr.insertPhoneNumber( homefax );
135 } 145 }
136 146
137 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty()) 147 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty())
138 { 148 {
139 PhoneNumber homemobile; 149 PhoneNumber homemobile;
140 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); 150 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell );
141 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) ); 151 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) );
142 addr.insertPhoneNumber( homemobile ); 152 addr.insertPhoneNumber( homemobile );
143 } 153 }
144 154
145 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) ); 155 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) );
146 156
147 157
148 // business 158 // business
149 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) || 159 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) ||
150 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) || 160 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) ||
151 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) || 161 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) ||
152 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) || 162 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) ||
153 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty())) 163 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty()))
154 { 164 {
155 Address businessaddress; 165 Address businessaddress;
156 businessaddress.setType(Address::Work); 166 businessaddress.setType(Address::Work);
157//US businessaddress.setPostOfficeBox( "" ); 167//US businessaddress.setPostOfficeBox( "" );
158//US businessaddress.setExtended( "" ); 168//US businessaddress.setExtended( "" );
159 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) ); 169 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) );
160 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) ); 170 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) );
161 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) ); 171 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) );
162 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) ); 172 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) );
163 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) ); 173 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) );
164 174
165 addr.insertAddress( businessaddress ); 175 addr.insertAddress( businessaddress );
166 } 176 }
167 177
168 178
169 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty()) 179 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty())
170 { 180 {
171 PhoneNumber businessphone; 181 PhoneNumber businessphone;
172 businessphone.setType( PhoneNumber::Work ); 182 businessphone.setType( PhoneNumber::Work );
173 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) ); 183 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) );
174 addr.insertPhoneNumber( businessphone ); 184 addr.insertPhoneNumber( businessphone );
175 } 185 }
176 186
177 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty()) 187 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty())
178 { 188 {
179 PhoneNumber businessfax; 189 PhoneNumber businessfax;
180 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); 190 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax );
181 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) ); 191 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) );
182 addr.insertPhoneNumber( businessfax ); 192 addr.insertPhoneNumber( businessfax );
183 } 193 }
184 194
185 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty()) 195 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty())
186 { 196 {
187 PhoneNumber businessmobile; 197 PhoneNumber businessmobile;
188 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); 198 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell );
189 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) ); 199 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) );
190 addr.insertPhoneNumber( businessmobile ); 200 addr.insertPhoneNumber( businessmobile );
191 } 201 }
192 202
193 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty()) 203 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty())
194 { 204 {
195 PhoneNumber businesspager; 205 PhoneNumber businesspager;
196 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); 206 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager );
197 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) ); 207 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) );
198 addr.insertPhoneNumber( businesspager ); 208 addr.insertPhoneNumber( businesspager );
199 } 209 }
200 210
201 addr.setRole( db->readField(ZdbAdrs::JobTitle) ); //? 211 addr.setRole( db->readField(ZdbAdrs::JobTitle) );
202 addr.setOrganization( db->readField(ZdbAdrs::Company) ); 212 addr.setOrganization( db->readField(ZdbAdrs::Company) );
203 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) ); 213 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) );
204 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) ); 214 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) );
205 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) ); 215 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) );
206 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) ); 216 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) );
207 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) ); 217 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) );
208 218
209 //personal 219 //personal
210 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) ); 220 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) );
211 221
212 QString gen = db->readField(ZdbAdrs::Gender); 222 QString gen = db->readField(ZdbAdrs::Gender);
213 qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1()); 223 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1());
214 qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited"); 224 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited");
215 225
216 if (gen == "male") 226 if (gen == "male")
217 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); 227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male");
218 else if (gen == "female") 228 else if (gen == "female")
219 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); 229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female");
220 230
221 231
222 QDate ann = db->readDateField(ZdbAdrs::Anniversary); 232 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) );
223
224 if (ann.isValid()) { 233 if (ann.isValid()) {
225 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 234 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
226//US 235 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1());
227// qDebug("QtopiaConverter::qtopiaToAddressee found:%s", dt.latin1());
228 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 236 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
229 } 237 }
238
230 239
231 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); 240 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) );
232 241
233 242
234 QDate birthd = db->readDateField(ZdbAdrs::Birthday); 243 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) );
244 //qDebug("birtd %s ", birthd.toString().latin1());
235 if (birthd.isValid()) 245 if (birthd.isValid())
236 addr.setBirthday( birthd ); 246 addr.setBirthday( birthd );
237 247
238 addr.setNickName( db->readField(ZdbAdrs::Nickname) ); 248 addr.setNickName( db->readField(ZdbAdrs::Nickname) );
239 249
240 // others 250 // others
241 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. 251 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available.
242 QString notes = db->readField(ZdbAdrs::Notes); 252 QString notes = db->readField(ZdbAdrs::Notes);
243 notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n"; 253 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n";
244 254 if ( addr.url().isEmpty() )
255 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) );
245 addr.setNote( db->readField(ZdbAdrs::Notes) ); 256 addr.setNote( db->readField(ZdbAdrs::Notes) );
246 257
247 258
248 259
249//US QString groups() const { return find( Qtopia::Groups ); } 260//US QString groups() const { return find( Qtopia::Groups ); }
250//US QStringList groupList() const; 261//US QStringList groupList() const;
251 262
252 qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" ); 263 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" );
253 QArray<int> catArray = db->readCategories(); 264 QArray<int> catArray = db->readCategories();
254 QString cat; 265 QString cat;
255 266
256 for ( unsigned int i=0; i < catArray.size(); i++ ) { 267 for ( unsigned int i=0; i < catArray.size(); i++ ) {
257 cat = catDB->label(catArray[i]); 268 cat = catDB->label(catArray[i]);
258 if ( cat.isEmpty() ) 269 if ( cat.isEmpty() )
259 addr.insertCategory(QString::number(catArray[i])); 270 addr.insertCategory(QString::number(catArray[i]));
260 else 271 else
261 addr.insertCategory( cat ); 272 addr.insertCategory( cat );
262 } 273 }
263 274
264 return true; 275 return true;
265} 276}
266 277
267bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ) 278bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact )
268{ 279{
280 bool cellHome = false, cellWork = false;
269 // name 281 // name
270 database->writeField(ZdbAdrs::LastName, addr.familyName()); 282 database->writeField(ZdbAdrs::LastName, addr.familyName());
271 database->writeField(ZdbAdrs::FirstName, addr.givenName()); 283 database->writeField(ZdbAdrs::FirstName, addr.givenName());
272 database->writeField(ZdbAdrs::MiddleName, addr.additionalName()); 284 database->writeField(ZdbAdrs::MiddleName, addr.additionalName());
273 database->writeField(ZdbAdrs::Title, addr.prefix()); 285 database->writeField(ZdbAdrs::Title, addr.prefix());
274 database->writeField(ZdbAdrs::Suffix, addr.suffix()); 286 database->writeField(ZdbAdrs::Suffix, addr.suffix());
275 287
276 qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!"); 288 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() );
277 database->writeField(ZdbAdrs::FileAs, addr.formattedName()); 289 database->writeField(ZdbAdrs::FileAs, addr.formattedName());
278 290 database->writeField(ZdbAdrs::FullName, addr.formattedName());
279 291
280 // email 292 // email
281 qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); 293 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
282 qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); 294 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
283 QString emails = addr.emails().join(","); 295 QString emails = addr.emails().join(" ");
284 database->writeField(ZdbAdrs::Emails, emails ); 296 database->writeField(ZdbAdrs::Emails, emails );
285 297
286 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); 298 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
287 299
288 300
289 // home 301 // home
290 const Address homeaddress = addr.address(Address::Home); 302 const Address homeaddress = addr.address(Address::Home);
291 if (!homeaddress.isEmpty()) { 303 if (!homeaddress.isEmpty()) {
292 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); 304 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
293 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); 305 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
294 database->writeField(ZdbAdrs::HomeState, homeaddress.region()); 306 database->writeField(ZdbAdrs::HomeState, homeaddress.region());
295 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); 307 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
296 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country()); 308 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
297 } 309 }
298 310
299 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 311 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
300 if (!homephone.number().isEmpty()) 312 if (!homephone.number().isEmpty())
301 database->writeField(ZdbAdrs::HomePhone, homephone.number()); 313 database->writeField(ZdbAdrs::HomePhone, homephone.number());
302 314
303 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 315 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
304 if (!homefax.number().isEmpty()) 316 if (!homefax.number().isEmpty())
305 database->writeField(ZdbAdrs::HomeFax, homefax.number()); 317 database->writeField(ZdbAdrs::HomeFax, homefax.number());
306 318
307 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 319 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
308 if (!homemobile.number().isEmpty()) 320 if (!homemobile.number().isEmpty()) {
309 database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); 321 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
322 cellHome = true;
323 }
310 324
311 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); 325 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
312 326
313 327
314 // business 328 // business
315 const Address businessaddress = addr.address(Address::Work); 329 const Address businessaddress = addr.address(Address::Work);
316 if (!businessaddress.isEmpty()) { 330 if (!businessaddress.isEmpty()) {
317 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); 331 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
318 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); 332 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
319 database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); 333 database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
320 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); 334 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
321 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); 335 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
322 } 336 }
323 337
324 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 338 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
325 if (!businessphone.number().isEmpty()) 339 if (!businessphone.number().isEmpty())
326 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); 340 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
327 341
328 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 342 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
329 if (!businessfax.number().isEmpty()) 343 if (!businessfax.number().isEmpty())
330 database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); 344 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
331 345
332 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 346 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
333 if (!businessmobile.number().isEmpty()) 347 if (!businessmobile.number().isEmpty()) {
334 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); 348 cellWork = true;
349 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
350 }
351 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
352 if (!businessmobile.number().isEmpty()) {
353 if ( ! cellHome )
354 database->writeField(ZdbAdrs::HomeMobile, mobile.number());
355 else if (! cellWork )
356 database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
357 }
335 358
336 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 359 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
337 if (!businesspager.number().isEmpty()) 360 if (!businesspager.number().isEmpty())
338 database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); 361 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
339 362
340 database->writeField(ZdbAdrs::JobTitle, addr.role()); 363 database->writeField(ZdbAdrs::JobTitle, addr.role());
341 database->writeField(ZdbAdrs::Company, addr.organization()); 364 database->writeField(ZdbAdrs::Company, addr.organization());
342 365
343 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); 366 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
344 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 367 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
345 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); 368 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
346 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 369 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
347 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" )); 370 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" ));
348 371
349 //personal 372 //personal
350 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" )); 373 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" ));
351 374
352 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); 375 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
353 qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1()); 376 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1());
354 qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?"); 377 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?");
355 qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); 378 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
356 if (gt = "male") 379 if (gt == "male")
357 database->writeField(ZdbAdrs::Gender, "male"); 380 database->writeField(ZdbAdrs::Gender, "male");
358 else if (gt = "female") 381 else if (gt == "female")
359 database->writeField(ZdbAdrs::Gender, "female"); 382 database->writeField(ZdbAdrs::Gender, "female");
360 else 383 else
361 database->writeField(ZdbAdrs::Gender, ""); 384 database->writeField(ZdbAdrs::Gender, "");
362 385
363 386
364 QDate dt = KGlobal::locale()->readDate( 387 QDate dt = KGlobal::locale()->readDate(
365 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate 388 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
366 database->writeField(ZdbAdrs::Anniversary, dt ); 389 if ( dt.isValid() ) {
367 390 QString dateS = KGlobal::locale()->formatDate(dt, true );
391 database->writeField(ZdbAdrs::Anniversary, dateS );
392 }
368 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); 393 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
369 394 dt = addr.birthday().date();
370 database->writeField(ZdbAdrs::Birthday, addr.birthday().date()); 395 if ( dt.isValid() ) {
396 QString dateS = KGlobal::locale()->formatDate(dt, true );
397 database->writeField(ZdbAdrs::Birthday, dateS);
398 }
371 database->writeField(ZdbAdrs::Nickname, addr.nickName()); 399 database->writeField(ZdbAdrs::Nickname, addr.nickName());
372 400
373 // other 401 // other
374 database->writeField(ZdbAdrs::Notes, addr.note()); 402 database->writeField(ZdbAdrs::Notes, addr.note());
375 403
376//US QString groups() const { return find( Qtopia::Groups ); } 404//US QString groups() const { return find( Qtopia::Groups ); }
377//US QStringList groupList() const; 405//US QStringList groupList() const;
378 406
379 407
380 qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); 408 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
381 409
382 QStringList cats = addr.categories(); 410 QStringList cats = addr.categories();
411 int ii;
412 for ( ii = 0; ii < cats.count() ;++ii ) {
413 if ( !catDB->exists( cats[ii] ))
414 catDB->addCategory(cats[ii]);
415 }
383 QArray<int> iar; 416 QArray<int> iar;
384 if ( !cats.isEmpty() ) { 417 if ( !cats.isEmpty() ) {
385 QArray<int> iar = catDB->ids(cats); 418 QArray<int> iar = catDB->ids(cats);
419 qDebug("***cat count is %d ", iar.count());
386 database->updateCategories(contact, iar); 420 database->updateCategories(contact, iar);
387 } 421 }
388 422
389 return true; 423 return true;
390} 424}
425
426QDate SharpDTMConverter::convertDate( QString s)
427{
428 QDate dt = KGlobal::locale()->readDate( s );
429 return dt;
430 return QDate ();
431}
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.h b/kabc/plugins/sharpdtm/sharpdtmconverter.h
index 99e0413..a04083e 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.h
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.h
@@ -1,86 +1,87 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24$Id$ 24$Id$
25*/ 25*/
26 26
27#ifndef KABC_SHARPDTMCONVERTER_H 27#ifndef KABC_SHARPDTMCONVERTER_H
28#define KABC_SHARPDTMCONVERTER_H 28#define KABC_SHARPDTMCONVERTER_H
29 29
30#include <qstring.h> 30#include <qstring.h>
31 31
32#include <sl/slzdb.h> 32#include <sl/slzdb.h>
33 33
34#include "addressee.h" 34#include "addressee.h"
35 35
36namespace SlCategory { 36namespace SlCategory {
37 class SlCategories; 37 class SlCategories;
38} 38}
39 39
40class SlZDataBase; 40class SlZDataBase;
41 41
42namespace KABC { 42namespace KABC {
43 43
44class SharpDTMConverter 44class SharpDTMConverter
45{ 45{
46public: 46public:
47 47
48 /** 48 /**
49 * Constructor. 49 * Constructor.
50 */ 50 */
51 SharpDTMConverter(); 51 SharpDTMConverter();
52 52
53 /** 53 /**
54 * Destructor. 54 * Destructor.
55 */ 55 */
56 virtual ~SharpDTMConverter(); 56 virtual ~SharpDTMConverter();
57 57
58 bool init(); 58 bool init();
59 void deinit(); 59 void deinit();
60 60
61 /** 61 /**
62 * Converts a given sharp card to an addressee. 62 * Converts a given sharp card to an addressee.
63 * 63 *
64 * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one. 64 * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one.
65 * @param database The sharp database pointer we use for the conversion 65 * @param database The sharp database pointer we use for the conversion
66 * @param addr The addressee. 66 * @param addr The addressee.
67 */ 67 */
68 bool sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ); 68 bool sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr );
69 69
70 /** 70 /**
71 * Converts an addressee to a sharp dtm contact. 71 * Converts an addressee to a sharp dtm contact.
72 * 72 *
73 * @param addr The addressee. 73 * @param addr The addressee.
74 * @param database The sharp database pointer we use for the conversion 74 * @param database The sharp database pointer we use for the conversion
75 * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one. 75 * @param contact The sharp card id, eventhough it might be 0, if the contact is a new one.
76 */ 76 */
77 bool addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ); 77 bool addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact );
78 78
79 private: 79 private:
80 SlCategory::SlCategories* catDB; 80 SlCategory::SlCategories* catDB;
81 QDate convertDate( QString );
81 82
82 83
83}; 84};
84 85
85} 86}
86#endif 87#endif