summaryrefslogtreecommitdiffabout
path: root/kabc
Unidiff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.cpp24
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp98
2 files changed, 37 insertions, 85 deletions
diff --git a/kabc/plugins/qtopia/qtopiaconverter.cpp b/kabc/plugins/qtopia/qtopiaconverter.cpp
index 040226c..106596f 100644
--- a/kabc/plugins/qtopia/qtopiaconverter.cpp
+++ b/kabc/plugins/qtopia/qtopiaconverter.cpp
@@ -246,207 +246,211 @@ bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr )
246 if ( !homeMobile.number().isEmpty() ) 246 if ( !homeMobile.number().isEmpty() )
247 adr.insertPhoneNumber( homeMobile ); 247 adr.insertPhoneNumber( homeMobile );
248 248
249 KABC::Address business( KABC::Address::Work ); 249 KABC::Address business( KABC::Address::Work );
250 business.setStreet( el.attribute( "BusinessStreet" ) ); 250 business.setStreet( el.attribute( "BusinessStreet" ) );
251 business.setLocality( el.attribute( "BusinessCity" ) ); 251 business.setLocality( el.attribute( "BusinessCity" ) );
252 business.setRegion( el.attribute( "BusinessState" ) ); 252 business.setRegion( el.attribute( "BusinessState" ) );
253 business.setPostalCode( el.attribute( "BusinessZip" ) ); 253 business.setPostalCode( el.attribute( "BusinessZip" ) );
254 business.setCountry( el.attribute( "BusinessCountry" ) ); 254 business.setCountry( el.attribute( "BusinessCountry" ) );
255 255
256 if ( !business.isEmpty() ) 256 if ( !business.isEmpty() )
257 adr.insertAddress( business ); 257 adr.insertAddress( business );
258 258
259 KABC::Address home( KABC::Address::Home ); 259 KABC::Address home( KABC::Address::Home );
260 home.setStreet( el.attribute( "HomeStreet" ) ); 260 home.setStreet( el.attribute( "HomeStreet" ) );
261 home.setLocality( el.attribute( "HomeCity" ) ); 261 home.setLocality( el.attribute( "HomeCity" ) );
262 home.setRegion( el.attribute( "HomeState" ) ); 262 home.setRegion( el.attribute( "HomeState" ) );
263 home.setPostalCode( el.attribute( "HomeZip" ) ); 263 home.setPostalCode( el.attribute( "HomeZip" ) );
264 home.setCountry( el.attribute( "HomeCountry" ) ); 264 home.setCountry( el.attribute( "HomeCountry" ) );
265 265
266 if ( !home.isEmpty() ) 266 if ( !home.isEmpty() )
267 adr.insertAddress( home ); 267 adr.insertAddress( home );
268 268
269 adr.setNickName( el.attribute( "Nickname" ) ); 269 adr.setNickName( el.attribute( "Nickname" ) );
270 adr.setNote( el.attribute( "Notes" ) ); 270 adr.setNote( el.attribute( "Notes" ) );
271 271
272 { 272 {
273 QStringList categories = QStringList::split(";", el.attribute("Categories" ) ); 273 QStringList categories = QStringList::split(";", el.attribute("Categories" ) );
274 QString cat; 274 QString cat;
275 QStringList added; 275 QStringList added;
276 for ( uint i = 0; i < categories.count(); i++ ) { 276 for ( uint i = 0; i < categories.count(); i++ ) {
277 cat = m_edit->categoryById( categories[ i ], "Contacts" ); 277 cat = m_edit->categoryById( categories[ i ], "Contacts" );
278 278
279 // if name is not empty and we did not add the 279 // if name is not empty and we did not add the
280 // cat try to repair broken files 280 // cat try to repair broken files
281 if ( !cat.isEmpty() && !added.contains( cat ) ) { 281 if ( !cat.isEmpty() && !added.contains( cat ) ) {
282 adr.insertCategory( cat ); 282 adr.insertCategory( cat );
283 added << cat; 283 added << cat;
284 } 284 }
285 } 285 }
286 } 286 }
287 287
288 if ( !el.attribute( "Department" ).isEmpty() ) 288 if ( !el.attribute( "Department" ).isEmpty() )
289 adr.insertCustom( "KADDRESSBOOK", "X-Department", el.attribute( "Department" ) ); 289 adr.insertCustom( "KADDRESSBOOK", "X-Department", el.attribute( "Department" ) );
290 if ( !el.attribute( "HomeWebPage" ).isEmpty() ) 290 if ( !el.attribute( "HomeWebPage" ).isEmpty() )
291 adr.insertCustom( "opie", "HomeWebPage", el.attribute( "HomeWebPage" ) ); 291 adr.insertCustom( "opie", "HomeWebPage", el.attribute( "HomeWebPage" ) );
292 if ( !el.attribute( "Spouse" ).isEmpty() ) 292 if ( !el.attribute( "Spouse" ).isEmpty() )
293 adr.insertCustom( "KADDRESSBOOK", "X-SpousesName", el.attribute( "Spouse" ) ); 293 adr.insertCustom( "KADDRESSBOOK", "X-SpousesName", el.attribute( "Spouse" ) );
294 if ( !el.attribute( "Gender" ).isEmpty() ) 294 if ( !el.attribute( "Gender" ).isEmpty() ) {
295 adr.insertCustom( "opie", "Gender", el.attribute( "Gender" ) ); 295 if ( el.attribute( "Gender" ) == "1" )
296 296 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "male" );
297 else if ( el.attribute( "Gender" ) == "2" )
298 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "female" );
299 }
297 QDate ann = dateFromString( el.attribute( "Anniversary" ) ); 300 QDate ann = dateFromString( el.attribute( "Anniversary" ) );
298 if ( ann.isValid() ) { 301 if ( ann.isValid() ) {
299 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 302 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
300 adr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt ); 303 adr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt );
301 } 304 }
302 305
303 if ( !el.attribute( "Children" ).isEmpty() ) 306 if ( !el.attribute( "Children" ).isEmpty() )
304 adr.insertCustom("opie", "Children", el.attribute("Children") ); 307 adr.insertCustom("KADDRESSBOOK", "X-Children", el.attribute("Children") );
305 if ( !el.attribute( "Office" ).isEmpty() ) 308 if ( !el.attribute( "Office" ).isEmpty() )
306 adr.insertCustom("KADDRESSBOOK", "X-Office", el.attribute("Office") ); 309 adr.insertCustom("KADDRESSBOOK", "X-Office", el.attribute("Office") );
307 if ( !el.attribute( "Profession" ).isEmpty() ) 310 if ( !el.attribute( "Profession" ).isEmpty() )
308 adr.insertCustom("KADDRESSBOOK", "X-Profession", el.attribute("Profession") ); 311 adr.insertCustom("KADDRESSBOOK", "X-Profession", el.attribute("Profession") );
309 if ( !el.attribute( "Assistant" ).isEmpty() ) 312 if ( !el.attribute( "Assistant" ).isEmpty() )
310 adr.insertCustom("KADDRESSBOOK", "X-AssistantsName", el.attribute("Assistant") ); 313 adr.insertCustom("KADDRESSBOOK", "X-AssistantsName", el.attribute("Assistant") );
311 if ( !el.attribute( "Manager" ).isEmpty() ) 314 if ( !el.attribute( "Manager" ).isEmpty() )
312 adr.insertCustom("KADDRESSBOOK", "X-ManagersName", el.attribute("Manager") ); 315 adr.insertCustom("KADDRESSBOOK", "X-ManagersName", el.attribute("Manager") );
313 316
314 317
315 } 318 }
316 return true; 319 return true;
317} 320}
318 321
319bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *stream ) 322bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *stream )
320{ 323{
321 *stream << "<Contact "; 324 *stream << "<Contact ";
322 *stream << "FirstName=\"" << escape(ab.givenName()) << "\" "; 325 *stream << "FirstName=\"" << escape(ab.givenName()) << "\" ";
323 *stream << "MiddleName=\"" << escape(ab.additionalName()) << "\" "; 326 *stream << "MiddleName=\"" << escape(ab.additionalName()) << "\" ";
324 *stream << "LastName=\"" << escape(ab.familyName()) << "\" "; 327 *stream << "LastName=\"" << escape(ab.familyName()) << "\" ";
325 *stream << "Suffix=\"" << escape(ab.suffix()) << "\" "; 328 *stream << "Suffix=\"" << escape(ab.suffix()) << "\" ";
326 329
327 QString sortStr; 330 QString sortStr;
328 sortStr = ab.formattedName(); 331 sortStr = ab.formattedName();
329 /* is formattedName is empty we use the assembled name as fallback */ 332 /* is formattedName is empty we use the assembled name as fallback */
330 if (sortStr.isEmpty() ) 333 if (sortStr.isEmpty() )
331 sortStr = ab.assembledName(); 334 sortStr = ab.assembledName();
332 *stream << "FileAs=\"" << escape(sortStr) << "\" "; 335 *stream << "FileAs=\"" << escape(sortStr) << "\" ";
333 336
334 *stream << "JobTitle=\"" << escape(ab.role()) << "\" "; 337 *stream << "JobTitle=\"" << escape(ab.role()) << "\" ";
335 *stream << "Department=\"" << escape(ab.custom( "KADDRESSBOOK", "X-Department" )) << "\" "; 338 *stream << "Department=\"" << escape(ab.custom( "KADDRESSBOOK", "X-Department" )) << "\" ";
336 *stream << "Company=\"" << escape(ab.organization()) << "\" "; 339 *stream << "Company=\"" << escape(ab.organization()) << "\" ";
337 340
338 KABC::PhoneNumber businessPhoneNum = ab.phoneNumber(KABC::PhoneNumber::Work ); 341 KABC::PhoneNumber businessPhoneNum = ab.phoneNumber(KABC::PhoneNumber::Work );
339 *stream << "BusinessPhone=\"" << escape( businessPhoneNum.number() ) << "\" "; 342 *stream << "BusinessPhone=\"" << escape( businessPhoneNum.number() ) << "\" ";
340 343
341 KABC::PhoneNumber businessFaxNum = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 344 KABC::PhoneNumber businessFaxNum = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
342 *stream << "BusinessFax=\"" << escape( businessFaxNum.number() )<< "\" "; 345 *stream << "BusinessFax=\"" << escape( businessFaxNum.number() )<< "\" ";
343 346
344 KABC::PhoneNumber businessMobile = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell ); 347 KABC::PhoneNumber businessMobile = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell );
345 *stream << "BusinessMobile=\"" << escape( businessMobile.number() ) << "\" "; 348 *stream << "BusinessMobile=\"" << escape( businessMobile.number() ) << "\" ";
346 349
347 *stream << "DefaultEmail=\"" << escape( ab.preferredEmail() ) << "\" "; 350 *stream << "DefaultEmail=\"" << escape( ab.preferredEmail() ) << "\" ";
348 QStringList list = ab.emails(); 351 QStringList list = ab.emails();
349 if ( list.count() > 0 ) { 352 if ( list.count() > 0 ) {
350 QStringList::Iterator it = list.begin(); 353 QStringList::Iterator it = list.begin();
351 *stream << "Emails=\"" << escape( *it ); 354 *stream << "Emails=\"" << escape( *it );
352 while (++it != list.end()) 355 while (++it != list.end())
353 *stream << ' ' << escape( *it ); 356 *stream << ' ' << escape( *it );
354 *stream << "\" "; 357 *stream << "\" ";
355 } 358 }
356 359
357 KABC::PhoneNumber homePhoneNum = ab.phoneNumber(KABC::PhoneNumber::Home ); 360 KABC::PhoneNumber homePhoneNum = ab.phoneNumber(KABC::PhoneNumber::Home );
358 *stream << "HomePhone=\"" << escape( homePhoneNum.number() ) << "\" "; 361 *stream << "HomePhone=\"" << escape( homePhoneNum.number() ) << "\" ";
359 362
360 KABC::PhoneNumber homeFax = ab.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 363 KABC::PhoneNumber homeFax = ab.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
361 *stream << "HomeFax=\"" << escape( homeFax.number() ) << "\" "; 364 *stream << "HomeFax=\"" << escape( homeFax.number() ) << "\" ";
362 365
363 KABC::PhoneNumber homeMobile = ab.phoneNumber( KABC::PhoneNumber::Cell ); 366 KABC::PhoneNumber homeMobile = ab.phoneNumber( KABC::PhoneNumber::Cell );
364 *stream << "HomeMobile=\"" << escape( homeMobile.number() ) << "\" "; 367 *stream << "HomeMobile=\"" << escape( homeMobile.number() ) << "\" ";
365 368
366 KABC::Address business = ab.address(KABC::Address::Work ); 369 KABC::Address business = ab.address(KABC::Address::Work );
367 *stream << "BusinessStreet=\"" << escape( business.street() ) << "\" "; 370 *stream << "BusinessStreet=\"" << escape( business.street() ) << "\" ";
368 *stream << "BusinessCity=\"" << escape( business.locality() ) << "\" "; 371 *stream << "BusinessCity=\"" << escape( business.locality() ) << "\" ";
369 *stream << "BusinessZip=\"" << escape( business.postalCode() ) << "\" "; 372 *stream << "BusinessZip=\"" << escape( business.postalCode() ) << "\" ";
370 *stream << "BusinessCountry=\"" << escape( business.country() ) << "\" "; 373 *stream << "BusinessCountry=\"" << escape( business.country() ) << "\" ";
371 *stream << "BusinessState=\"" << escape( business.region() ) << "\" "; 374 *stream << "BusinessState=\"" << escape( business.region() ) << "\" ";
372 //stream << "BusinessPager=\"" << << "\" "; 375 //stream << "BusinessPager=\"" << << "\" ";
373 *stream << "Office=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Office" ) ) << "\" "; 376 *stream << "Office=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Office" ) ) << "\" ";
374 *stream << "Profession=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Profession" ) ) << "\" "; 377 *stream << "Profession=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Profession" ) ) << "\" ";
375 *stream << "Assistant=\"" << escape( ab.custom( "KADDRESSBOOK", "X-AssistantsName") ) << "\" "; 378 *stream << "Assistant=\"" << escape( ab.custom( "KADDRESSBOOK", "X-AssistantsName") ) << "\" ";
376 *stream << "Manager=\"" << escape( ab.custom( "KADDRESSBOOK", "X-ManagersName" ) ) << "\" "; 379 *stream << "Manager=\"" << escape( ab.custom( "KADDRESSBOOK", "X-ManagersName" ) ) << "\" ";
377 380
378 KABC::Address home = ab.address( KABC::Address::Home ); 381 KABC::Address home = ab.address( KABC::Address::Home );
379 *stream << "HomeStreet=\"" << escape( home.street() ) << "\" "; 382 *stream << "HomeStreet=\"" << escape( home.street() ) << "\" ";
380 *stream << "HomeCity=\"" << escape( home.locality() ) << "\" "; 383 *stream << "HomeCity=\"" << escape( home.locality() ) << "\" ";
381 *stream << "HomeState=\"" << escape( home.region() ) << "\" "; 384 *stream << "HomeState=\"" << escape( home.region() ) << "\" ";
382 *stream << "HomeZip=\"" << escape( home.postalCode() ) << "\" "; 385 *stream << "HomeZip=\"" << escape( home.postalCode() ) << "\" ";
383 *stream << "HomeCountry=\"" << escape( home.country() ) << "\" "; 386 *stream << "HomeCountry=\"" << escape( home.country() ) << "\" ";
384 387
385 *stream << "HomeWebPage=\"" << escape( ab.custom( "opie", "HomeWebPage" ) ) << "\" "; 388 *stream << "HomeWebPage=\"" << escape( ab.custom( "opie", "HomeWebPage" ) ) << "\" ";
386 *stream << "Spouse=\"" << escape( ab.custom( "KADDRESSBOOK", "X-SpousesName") ) << "\" "; 389 *stream << "Spouse=\"" << escape( ab.custom( "KADDRESSBOOK", "X-SpousesName") ) << "\" ";
387 *stream << "Gender=\"" << escape( ab.custom( "opie", "Gender") ) << "\" "; 390 QString gen = "0";
391 if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "male" )
392 gen = "1";
393 else if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "female" )
394 gen = "2";
395 *stream << "Gender=\"" << escape( gen ) << "\" ";
388 396
389 if ( ab.birthday().date().isValid() ) 397 if ( ab.birthday().date().isValid() )
390 *stream << "Birthday=\"" << escape( dateToString(ab.birthday().date() ) ) << "\" "; 398 *stream << "Birthday=\"" << escape( dateToString(ab.birthday().date() ) ) << "\" ";
391 399
392 /*
393 * Anniversary block again
394 * Go from ISO -> QDate -> toString and then escape
395 */
396 { 400 {
397 QDate ann = KGlobal::locale()->readDate( ab.custom("KADDRESSBOOK", "X-Anniversary" ), 401 QDate ann = KGlobal::locale()->readDate( ab.custom("KADDRESSBOOK", "X-Anniversary" ),
398 "%Y-%m-%d"); 402 "%Y-%m-%d");
399 if (ann.isValid() ) { 403 if (ann.isValid() ) {
400 *stream << "Anniversary=\"" << escape( dateToString( ann ) ) << "\" "; 404 *stream << "Anniversary=\"" << escape( dateToString( ann ) ) << "\" ";
401 } 405 }
402 } 406 }
403 *stream << "Nickname=\"" << escape( ab.nickName() ) << "\" "; 407 *stream << "Nickname=\"" << escape( ab.nickName() ) << "\" ";
404 *stream << "Children=\"" << escape( ab.custom("opie", "Children" ) ) << "\" "; 408 *stream << "Children=\"" << escape( ab.custom("KADDRESSBOOK", "X-Children" ) ) << "\" ";
405 *stream << "Notes=\"" << escape( ab.note() ) << "\" "; 409 *stream << "Notes=\"" << escape( ab.note() ) << "\" ";
406 *stream << "Categories=\"" << categoriesToNumber( ab.categories(), "Contacts") << "\" "; 410 *stream << "Categories=\"" << categoriesToNumber( ab.categories(), "Contacts") << "\" ";
407 411
408 QString uid = ab.uid(); 412 QString uid = ab.uid();
409 *stream << "Uid=\"" << uid << "\" "; 413 *stream << "Uid=\"" << uid << "\" ";
410 //*stream << map.toString( "addressbook", uid ); 414 //*stream << map.toString( "addressbook", uid );
411 *stream << " />" << "\n"; 415 *stream << " />" << "\n";
412 416
413 return true; 417 return true;
414} 418}
415 419
416 420
417#if 0 421#if 0
418 422
419KTempFile* AddressBook::fromKDE( KSync::AddressBookSyncee *syncee, ExtraMap& map ) 423KTempFile* AddressBook::fromKDE( KSync::AddressBookSyncee *syncee, ExtraMap& map )
420{ 424{
421 425
422} 426}
423 427
424QStringList AddressBook::attributes()const { 428QStringList AddressBook::attributes()const {
425 QStringList lst; 429 QStringList lst;
426 lst << "FirstName"; 430 lst << "FirstName";
427 lst << "MiddleName"; 431 lst << "MiddleName";
428 lst << "LastName"; 432 lst << "LastName";
429 lst << "Suffix"; 433 lst << "Suffix";
430 lst << "FileAs"; 434 lst << "FileAs";
431 lst << "JobTitle"; 435 lst << "JobTitle";
432 lst << "Department"; 436 lst << "Department";
433 lst << "Company"; 437 lst << "Company";
434 lst << "BusinessPhone"; 438 lst << "BusinessPhone";
435 lst << "BusinessFax"; 439 lst << "BusinessFax";
436 lst << "BusinessMobile"; 440 lst << "BusinessMobile";
437 lst << "DefaultEmail"; 441 lst << "DefaultEmail";
438 lst << "Emails"; 442 lst << "Emails";
439 lst << "HomePhone"; 443 lst << "HomePhone";
440 lst << "HomeFax"; 444 lst << "HomeFax";
441 lst << "HomeMobile"; 445 lst << "HomeMobile";
442 lst << "BusinessStreet"; 446 lst << "BusinessStreet";
443 lst << "BusinessCity"; 447 lst << "BusinessCity";
444 lst << "BusinessZip"; 448 lst << "BusinessZip";
445 lst << "BusinessCountry"; 449 lst << "BusinessCountry";
446 lst << "BusinessState"; 450 lst << "BusinessState";
447 lst << "Office"; 451 lst << "Office";
448 lst << "Profession"; 452 lst << "Profession";
449 lst << "Assistant"; 453 lst << "Assistant";
450 lst << "Manager"; 454 lst << "Manager";
451 lst << "HomeStreet"; 455 lst << "HomeStreet";
452 lst << "HomeCity"; 456 lst << "HomeCity";
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index b7263bb..4ee3c3c 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -33,350 +33,298 @@ $Id$
33#include <qtextstream.h> 33#include <qtextstream.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 <qpe/pim/addressbookaccess.h> 46#include <qpe/pim/addressbookaccess.h>
47 47
48 48
49#include "resourceqtopiaconfig.h" 49#include "resourceqtopiaconfig.h"
50#include "stdaddressbook.h" 50#include "stdaddressbook.h"
51 51
52#include "qtopiaconverter.h" 52#include "qtopiaconverter.h"
53 53
54#include "resourceqtopia.h" 54#include "resourceqtopia.h"
55 55
56using namespace KABC; 56using namespace KABC;
57extern "C" 57extern "C"
58{ 58{
59 void *init_microkabc_qtopia() 59 void *init_microkabc_qtopia()
60 { 60 {
61 return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig>(); 61 return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig>();
62 } 62 }
63} 63}
64 64
65ResourceQtopia::ResourceQtopia( const KConfig *config ) 65ResourceQtopia::ResourceQtopia( const KConfig *config )
66 : Resource( config ), mConverter (0) 66 : Resource( config ), mConverter (0)
67{ 67{
68 // we can not choose the filename. Therefore use the default to display 68 // we can not choose the filename. Therefore use the default to display
69 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml"; 69 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
70 init( fileName ); 70 init( fileName );
71} 71}
72 72
73ResourceQtopia::ResourceQtopia( const QString &fileName ) 73ResourceQtopia::ResourceQtopia( const QString &fileName )
74 : Resource( 0 ) 74 : Resource( 0 )
75{ 75{
76 init( fileName ); 76 init( fileName );
77} 77}
78 78
79void ResourceQtopia::init( const QString &fileName ) 79void ResourceQtopia::init( const QString &fileName )
80{ 80{
81 81#ifdef _USE_DIRWATCH_
82 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 82 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
83 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 83 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
84 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 84 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
85 85#endif
86 setFileName( fileName ); 86 setFileName( fileName );
87} 87}
88 88
89ResourceQtopia::~ResourceQtopia() 89ResourceQtopia::~ResourceQtopia()
90{ 90{
91 if (mConverter != 0) 91 if (mConverter != 0)
92 delete mConverter; 92 delete mConverter;
93 93
94} 94}
95 95
96void ResourceQtopia::writeConfig( KConfig *config ) 96void ResourceQtopia::writeConfig( KConfig *config )
97{ 97{
98 Resource::writeConfig( config ); 98 Resource::writeConfig( config );
99} 99}
100 100
101Ticket *ResourceQtopia::requestSaveTicket() 101Ticket *ResourceQtopia::requestSaveTicket()
102{ 102{
103 kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl; 103 kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
104 104
105 qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1()); 105 qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1());
106 106
107 if ( !addressBook() ) return 0; 107 if ( !addressBook() ) return 0;
108 108
109 if ( !lock( fileName() ) ) { 109 if ( !lock( fileName() ) ) {
110 kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '" 110 kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
111 << fileName() << "'" << endl; 111 << fileName() << "'" << endl;
112 return 0; 112 return 0;
113 } 113 }
114 return createTicket( this ); 114 return createTicket( this );
115} 115}
116 116
117 117
118bool ResourceQtopia::doOpen() 118bool ResourceQtopia::doOpen()
119{ 119{
120 qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1()); 120 qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1());
121 121
122 122
123 if (mConverter == 0) 123 if (mConverter == 0)
124 { 124 {
125 mConverter = new QtopiaConverter(); 125 mConverter = new QtopiaConverter();
126 bool res = mConverter->init(); 126 bool res = mConverter->init();
127 if ( !res ) 127 if ( !res )
128 { 128 {
129 QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file"); 129 QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file");
130 qDebug(msg); 130 qDebug(msg);
131 return false; 131 return false;
132 } 132 }
133 } 133 }
134 134
135 return true; 135 return true;
136} 136}
137 137
138void ResourceQtopia::doClose() 138void ResourceQtopia::doClose()
139{ 139{
140 qDebug("ResourceQtopia::doClose: %s", fileName().latin1()); 140 qDebug("ResourceQtopia::doClose: %s", fileName().latin1());
141 141
142 142
143 // it seems so, that deletion of access deletes backend as well 143 // it seems so, that deletion of access deletes backend as well
144 //delete backend; 144 //delete backend;
145 145
146 return; 146 return;
147} 147}
148 148
149bool ResourceQtopia::load() 149bool ResourceQtopia::load()
150{ 150{
151 151
152 QFile file( fileName() ); 152 QFile file( fileName() );
153 if ( !file.open(IO_ReadOnly ) ) { 153 if ( !file.open(IO_ReadOnly ) ) {
154 return false; 154 return false;
155 } 155 }
156 156
157 QDomDocument doc("mydocument" ); 157 QDomDocument doc("mydocument" );
158 if ( !doc.setContent( &file ) ) { 158 if ( !doc.setContent( &file ) ) {
159 file.close(); 159 file.close();
160 return false; 160 return false;
161 } 161 }
162 bool res; 162 bool res;
163 QDomElement docElem = doc.documentElement( ); 163 QDomElement docElem = doc.documentElement( );
164 QDomNode n = docElem.firstChild(); 164 QDomNode n = docElem.firstChild();
165 while ( !n.isNull() ) { 165 while ( !n.isNull() ) {
166 QDomElement e = n.toElement(); 166 QDomElement e = n.toElement();
167 if ( !e.isNull() ) { 167 if ( !e.isNull() ) {
168 if ( e.tagName() == QString::fromLatin1( "Contacts" ) ) { // we're looking for them 168 if ( e.tagName() == QString::fromLatin1( "Contacts" ) ) {
169 QDomNode no = e.firstChild(); 169 QDomNode no = e.firstChild();
170 while ( !no.isNull() ) { 170 while ( !no.isNull() ) {
171 QDomElement el = no.toElement(); 171 QDomElement el = no.toElement();
172 if ( !el.isNull() ) { 172 if ( !el.isNull() ) {
173 KABC::Addressee addressee; 173 KABC::Addressee addressee;
174 res = mConverter->qtopiaToAddressee( el, addressee ); 174 res = mConverter->qtopiaToAddressee( el, addressee );
175 if ( !addressee.isEmpty() && res ) 175 if ( !addressee.isEmpty() && res )
176 { 176 {
177 addressee.setResource( this ); 177 addressee.setResource( this );
178 addressBook()->insertAddressee( addressee ); 178 addressBook()->insertAddressee( addressee );
179 } 179 }
180 } 180 }
181 181
182 no = no.nextSibling(); 182 no = no.nextSibling();
183 } 183 }
184 } 184 }
185 } 185 }
186 186
187 n = n.nextSibling(); 187 n = n.nextSibling();
188 } 188 }
189
190#if 0
191/ old code
192 qDebug("ResourceQtopia::load: %s", fileName().latin1());
193
194 AddressBookIterator it(*mAccess);
195 const PimContact* contact;
196 bool res;
197
198 for (contact=it.toFirst(); it.current(); ++it)
199 {
200 contact = it.current();
201
202 KABC::Addressee addressee;
203
204 //LRres = mConverter->qtopiaToAddressee( (*contact), addressee );
205
206 if ( !addressee.isEmpty() && res )
207 {
208 addressee.setResource( this );
209 addressBook()->insertAddressee( addressee );
210 }
211 }
212#endif
213 return true; 189 return true;
214} 190}
215 191
216bool ResourceQtopia::save( Ticket *ticket ) 192bool ResourceQtopia::save( Ticket *ticket )
217{ 193{
218 194#ifdef _USE_DIRWATCH_
219 mDirWatch.stopScan(); 195 mDirWatch.stopScan();
196#endif
220 KABC::AddressBook::Iterator it; 197 KABC::AddressBook::Iterator it;
221 bool res; 198 bool res;
222 //pending open file for stream 199 QFile file( fileName() );
223 QTextStream *stream;// = tempFile->textStream(); 200 if (!file.open( IO_WriteOnly ) ) {
201 return false;
202 }
203 QTextStream ts( &file );
204 QTextStream *stream = &ts;
224 stream->setEncoding( QTextStream::UnicodeUTF8 ); 205 stream->setEncoding( QTextStream::UnicodeUTF8 );
225 *stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>" << endl; 206 *stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>" << endl;
226 *stream << " <Groups>" << endl; 207 *stream << " <Groups>" << endl;
227 *stream << " </Groups>" << endl; 208 *stream << " </Groups>" << endl;
228 *stream << " <Contacts> " << endl; 209 *stream << " <Contacts> " << endl;
229 // for all entries 210 // for all entries
230 KABC::Addressee ab; 211 KABC::Addressee ab;
231 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 212 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
232 KABC::Addressee addressee = (*it); 213 KABC::Addressee addressee = (*it);
233 res = mConverter->addresseeToQtopia( addressee, stream ); 214 res = mConverter->addresseeToQtopia( addressee, stream );
234 if (!res == true) 215 if (!res == true)
235 { 216 {
236 qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1()); 217 qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
237 } 218 }
238 } 219 }
239
240
241 *stream << "</Contacts>" << endl; 220 *stream << "</Contacts>" << endl;
242 *stream << "</AddressBook>" << endl; 221 *stream << "</AddressBook>" << endl;
243 //pending close file 222 file.close();
223#ifdef _USE_DIRWATCH_
244 mDirWatch.startScan(); 224 mDirWatch.startScan();
245 225#endif
246 delete ticket; 226 delete ticket;
247 unlock( fileName() ); 227 unlock( fileName() );
248
249
250#if 0
251 //old code
252 qDebug("ResourceQtopia::save: %s", fileName().latin1());
253
254 mDirWatch.stopScan();
255
256 KABC::AddressBook::Iterator it;
257 bool res;
258
259 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
260 PimContact c;
261 KABC::Addressee addressee = (*it);
262
263 //res = mConverter->addresseeToQtopia( *it, c );
264 if (res == true)
265 {
266 mAccess->addContact(c);
267// if (res == false)
268// qDebug("Unable to append Contact %s", c.fullName().latin1());
269 }
270 else
271 {
272 qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
273 }
274 }
275
276// mAccess->addressBookUpdated();
277
278 mDirWatch.startScan();
279
280 delete ticket;
281 unlock( fileName() );
282#endif
283 return true; 228 return true;
284} 229}
285 230
286bool ResourceQtopia::lock( const QString &lockfileName ) 231bool ResourceQtopia::lock( const QString &lockfileName )
287{ 232{
233 //disabled
234 return true;
288 qDebug("ResourceQtopia::lock: %s", fileName().latin1()); 235 qDebug("ResourceQtopia::lock: %s", fileName().latin1());
289
290 kdDebug(5700) << "ResourceQtopia::lock()" << endl;
291
292 QString fn = lockfileName; 236 QString fn = lockfileName;
293 237
294 KURL url(fn); 238 KURL url(fn);
295 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 239 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
296 240
297 kdDebug(5700) << "-- lock name: " << lockName << endl;
298
299 if (QFile::exists( lockName )) 241 if (QFile::exists( lockName ))
300 { 242 {
301 qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1()); 243 qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1());
302 return false; 244 return false;
303 } 245 }
304 246
305 QString lockUniqueName; 247 QString lockUniqueName;
306 lockUniqueName = fn + KApplication::randomString( 8 ); 248 lockUniqueName = fn + KApplication::randomString( 8 );
307 249
308 url = lockUniqueName; 250 url = lockUniqueName;
309//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 251//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
310 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 252 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
311 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 253 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
312 254
313 // Create unique file 255 // Create unique file
314 QFile file( mLockUniqueName ); 256 QFile file( mLockUniqueName );
315 file.open( IO_WriteOnly ); 257 file.open( IO_WriteOnly );
316 file.close(); 258 file.close();
317 259
318 // Create lock file 260 // Create lock file
319 int result = 0; 261 int result = 0;
320#ifndef _WIN32_ 262#ifndef _WIN32_
321 result = ::link( QFile::encodeName( mLockUniqueName ), 263 result = ::link( QFile::encodeName( mLockUniqueName ),
322 QFile::encodeName( lockName ) ); 264 QFile::encodeName( lockName ) );
323#endif 265#endif
324 if ( result == 0 ) { 266 if ( result == 0 ) {
325 addressBook()->emitAddressBookLocked(); 267 addressBook()->emitAddressBookLocked();
326 return true; 268 return true;
327 } 269 }
328 270
329 // TODO: check stat 271 // TODO: check stat
330 272
331 return false; 273 return false;
332} 274}
333 275
334void ResourceQtopia::unlock( const QString &fileName ) 276void ResourceQtopia::unlock( const QString &fileName )
335{ 277{
278 //disabled
279 return;
336 qDebug("ResourceQtopia::unlock() %s", fileName.latin1()); 280 qDebug("ResourceQtopia::unlock() %s", fileName.latin1());
337 281
338 QString fn = fileName; 282 QString fn = fileName;
339 KURL url(fn); 283 KURL url(fn);
340 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 284 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
341 285
342 QFile::remove( lockName ); 286 QFile::remove( lockName );
343 QFile::remove( mLockUniqueName ); 287 QFile::remove( mLockUniqueName );
344 addressBook()->emitAddressBookUnlocked(); 288 addressBook()->emitAddressBookUnlocked();
345} 289}
346 290
347void ResourceQtopia::setFileName( const QString &newFileName ) 291void ResourceQtopia::setFileName( const QString &newFileName )
348{ 292{
293#ifdef _USE_DIRWATCH_
349 mDirWatch.stopScan(); 294 mDirWatch.stopScan();
295#endif
350 mDirWatch.removeFile( fileName() ); 296 mDirWatch.removeFile( fileName() );
351 297
352 Resource::setFileName( newFileName ); 298 Resource::setFileName( newFileName );
353 299
354 mDirWatch.addFile( fileName() ); 300 mDirWatch.addFile( fileName() );
301#ifdef _USE_DIRWATCH_
355 mDirWatch.startScan(); 302 mDirWatch.startScan();
303#endif
356} 304}
357 305
358 306
359void ResourceQtopia::fileChanged() 307void ResourceQtopia::fileChanged()
360{ 308{
361 // There is a small theoretical chance that KDirWatch calls us before 309 // There is a small theoretical chance that KDirWatch calls us before
362 // we are fully constructed 310 // we are fully constructed
363 if (!addressBook()) 311 if (!addressBook())
364 return; 312 return;
365 313
366 QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) ); 314 QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
367 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 315 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
368 load(); 316 load();
369 addressBook()->emitAddressBookChanged(); 317 addressBook()->emitAddressBookChanged();
370 } 318 }
371} 319}
372 320
373void ResourceQtopia::removeAddressee( const Addressee &addr ) 321void ResourceQtopia::removeAddressee( const Addressee &addr )
374{ 322{
375} 323}
376 324
377void ResourceQtopia::cleanUp() 325void ResourceQtopia::cleanUp()
378{ 326{
379 unlock( fileName() ); 327 unlock( fileName() );
380} 328}
381 329
382//US #include "resourceqtopia.moc" 330//US #include "resourceqtopia.moc"