summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt11
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp4
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp154
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.h1
4 files changed, 109 insertions, 61 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 756ccc1..f38dd70 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,15 +1,17 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.11 ************ 3********** VERSION 1.9.11 ************
4 4
5Fixed several problems in PWM/Pi, like 5Fixed several problems in PWM/Pi, like
6asking the user, if unsaved changed are pending 6asking the user, if unsaved changed are pending
7when closing the app. 7when closing the app.
8And PwM/Pi handles now different texts for the
9fields Description, Username, Password, configurable per category.
8 10
9Fixed a crash in KO/Pi , when importing/loading vcs files 11Fixed a crash in KO/Pi , when importing/loading vcs files
10which have an entry with an attendee with state: 12which have an entry with an attendee with state:
11NEEDS ACTION 13NEEDS ACTION
12 14
13Fixed some problems in the German translation of OM/Pi, 15Fixed some problems in the German translation of OM/Pi,
14which makes some dialogs not fitting on the screen 16which makes some dialogs not fitting on the screen
15of the Z 5500. 17of the Z 5500.
@@ -40,19 +42,24 @@ Fixed a bug in DMT sync, that a new entry in DTM was added
40on every sync to Kx/Pi. 42on every sync to Kx/Pi.
41 43
42Fixed a bug in DMT sync with todos created in KO/Pi containing 44Fixed a bug in DMT sync with todos created in KO/Pi containing
43non-latin1 characters. 45non-latin1 characters.
44 46
45Rearranged package contents of Sharp-ipks and made all 47Rearranged package contents of Sharp-ipks and made all
46packages installable on SD again. 48packages installable on SD again.
47 49
48PwM/Pi handles now different texts for the 50Fixed the writing of addressbook data in DTM sync.
49fields Description, Username, Password, configurable per category. 51Empty fields in KA/Pi were not removed.
50 52
53Added better category handling in KA/Pi:
54Menu "change selected has now"
55Set Categories and
56Add Categories option.
57Possible to configure a view to display categories.
51 58
52 59
53********** VERSION 1.9.10 ************ 60********** VERSION 1.9.10 ************
54 61
55Many internal small bugfixes. 62Many internal small bugfixes.
56And fix of the "big" bug in KO/Pi, 63And fix of the "big" bug in KO/Pi,
57that after Syncing the appointments had an offset by several hours. 64that after Syncing the appointments had an offset by several hours.
58That was a problem with the internal timezone setting, 65That was a problem with the internal timezone setting,
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index 7069f5d..6413b42 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -195,17 +195,18 @@ bool ResourceSharpDTM::save( Ticket *ticket )
195 KABC::Addressee addressee = (*it); 195 KABC::Addressee addressee = (*it);
196 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { 196 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
197 res = mAccess->startEditCard(id); 197 res = mAccess->startEditCard(id);
198 if (res == true) 198 if (res == true)
199 { 199 {
200 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 200 res = mConverter->addresseeToSharp( (*it), mAccess, id );
201 if (res == true) 201 if (res == true)
202 { 202 {
203 res = mAccess->finishEditCard(&id);; 203 res = mAccess->finishEditCard(&id);;
204 mConverter->setCategories( (*it), mAccess, id );
204 map.insert(id,(*it).uid()); 205 map.insert(id,(*it).uid());
205 if (res == false) 206 if (res == false)
206 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 207 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
207 208
208 } 209 }
209 else 210 else
210 { 211 {
211 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 212 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
@@ -223,16 +224,17 @@ bool ResourceSharpDTM::save( Ticket *ticket )
223 //changed 224 //changed
224 res = mAccess->startEditCard(id); 225 res = mAccess->startEditCard(id);
225 if (res == true) 226 if (res == true)
226 { 227 {
227 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 228 res = mConverter->addresseeToSharp( (*it), mAccess, id );
228 if (res == true) 229 if (res == true)
229 { 230 {
230 res = mAccess->finishEditCard(&id); 231 res = mAccess->finishEditCard(&id);
232 mConverter->setCategories( (*it), mAccess, id );
231 map.insert(id,(*it).uid()); 233 map.insert(id,(*it).uid());
232 if (res == false) 234 if (res == false)
233 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 235 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
234 } 236 }
235 else 237 else
236 { 238 {
237 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 239 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
238 mAccess->cancelEditCard(); 240 mAccess->cancelEditCard();
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
index 396be0a..ae4cfbb 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
@@ -302,81 +302,64 @@ bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* da
302 302
303 // email 303 // email
304 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); 304 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
305 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); 305 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
306 QString emails = addr.emails().join(" "); 306 QString emails = addr.emails().join(" ");
307 database->writeField(ZdbAdrs::Emails, emails ); 307 database->writeField(ZdbAdrs::Emails, emails );
308 308
309 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); 309 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
310
311
312 // home 310 // home
313 const Address homeaddress = addr.address(Address::Home); 311 const Address homeaddress = addr.address(Address::Home);
314 if (!homeaddress.isEmpty()) { 312 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
315 //qDebug("write home address "); 313 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
316 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); 314 database->writeField(ZdbAdrs::HomeState, homeaddress.region());
317 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); 315 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
318 database->writeField(ZdbAdrs::HomeState, homeaddress.region()); 316 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
319 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); 317
320 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
321 }
322
323 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 318 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
324 if (!homephone.number().isEmpty()) 319 database->writeField(ZdbAdrs::HomePhone, homephone.number());
325 database->writeField(ZdbAdrs::HomePhone, homephone.number());
326
327 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 320 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
328 if (!homefax.number().isEmpty()) 321 database->writeField(ZdbAdrs::HomeFax, homefax.number());
329 database->writeField(ZdbAdrs::HomeFax, homefax.number());
330
331 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 322 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
323 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
332 if (!homemobile.number().isEmpty()) { 324 if (!homemobile.number().isEmpty()) {
333 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
334 cellHome = true; 325 cellHome = true;
335 } 326 }
336
337 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); 327 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
338
339
340 // business 328 // business
341 const Address businessaddress = addr.address(Address::Work); 329 const Address businessaddress = addr.address(Address::Work);
342 if (!businessaddress.isEmpty()) {
343 //qDebug("write business address "); 330 //qDebug("write business address ");
344 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); 331 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
345 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); 332 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
346 database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); 333 database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
347 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); 334 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
348 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); 335 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
349 } 336
350
351 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 337 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
352 if (!businessphone.number().isEmpty()) 338 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
353 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
354 339
355 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 340 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
356 if (!businessfax.number().isEmpty()) 341 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
357 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
358 342
359 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 343 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
344 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
360 if (!businessmobile.number().isEmpty()) { 345 if (!businessmobile.number().isEmpty()) {
361 cellWork = true; 346 cellWork = true;
362 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
363 } 347 }
364 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell ); 348 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
365 if (! mobile.number().isEmpty()) { 349 if (! mobile.number().isEmpty()) {
366 if ( ! cellHome ) 350 if ( ! cellHome )
367 database->writeField(ZdbAdrs::HomeMobile, mobile.number()); 351 database->writeField(ZdbAdrs::HomeMobile, mobile.number());
368 else if (! cellWork ) 352 else if (! cellWork )
369 database->writeField(ZdbAdrs::BusinessMobile, mobile.number()); 353 database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
370 } 354 }
371 355
372 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 356 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
373 if (!businesspager.number().isEmpty()) 357 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
374 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
375 358
376 database->writeField(ZdbAdrs::JobTitle, addr.role()); 359 database->writeField(ZdbAdrs::JobTitle, addr.role());
377 database->writeField(ZdbAdrs::Company, addr.organization()); 360 database->writeField(ZdbAdrs::Company, addr.organization());
378 361
379 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); 362 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
380 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 363 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
381 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); 364 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
382 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 365 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
@@ -391,54 +374,109 @@ bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* da
391 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); 374 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
392 if (gt == "male") 375 if (gt == "male")
393 database->writeField(ZdbAdrs::Gender, "male"); 376 database->writeField(ZdbAdrs::Gender, "male");
394 else if (gt == "female") 377 else if (gt == "female")
395 database->writeField(ZdbAdrs::Gender, "female"); 378 database->writeField(ZdbAdrs::Gender, "female");
396 else 379 else
397 database->writeField(ZdbAdrs::Gender, ""); 380 database->writeField(ZdbAdrs::Gender, "");
398 381
399 382 QString dateS ;
400 QDate dt = KGlobal::locale()->readDate( 383 QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
401 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
402 if ( dt.isValid() ) { 384 if ( dt.isValid() ) {
403 QString dateS = KGlobal::locale()->formatDate(dt, true ); 385 dateS = KGlobal::locale()->formatDate(dt, true );
404 database->writeField(ZdbAdrs::Anniversary, dateS );
405 } 386 }
387 database->writeField(ZdbAdrs::Anniversary, dateS );
406 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); 388 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
407 dt = addr.birthday().date(); 389 dt = addr.birthday().date();
390 dateS = "";
408 if ( dt.isValid() ) { 391 if ( dt.isValid() ) {
409 QString dateS = KGlobal::locale()->formatDate(dt, true ); 392 dateS = KGlobal::locale()->formatDate(dt, true );
410 database->writeField(ZdbAdrs::Birthday, dateS);
411 } 393 }
394 database->writeField(ZdbAdrs::Birthday, dateS);
412 database->writeField(ZdbAdrs::Nickname, addr.nickName()); 395 database->writeField(ZdbAdrs::Nickname, addr.nickName());
413 396
414 // other 397 // other
415 database->writeField(ZdbAdrs::Notes, addr.note()); 398 database->writeField(ZdbAdrs::Notes, addr.note());
416 399
417//US QString groups() const { return find( Qtopia::Groups ); } 400//US QString groups() const { return find( Qtopia::Groups ); }
418//US QStringList groupList() const; 401//US QStringList groupList() const;
419 402
420 403
421 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); 404 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
422 405
423 QStringList cats = addr.categories();
424 int ii;
425 for ( ii = 0; ii < cats.count() ;++ii ) {
426 if ( !catDB->exists( cats[ii] ))
427 catDB->addCategory(cats[ii]);
428 }
429 QArray<int> iar;
430 if ( !cats.isEmpty() ) {
431 QArray<int> iar = catDB->ids(cats);
432 //qDebug("***cat count is %d ", iar.count());
433 database->updateCategories(contact, iar);
434 }
435
436 return true; 406 return true;
437} 407}
438 408
409
410bool SharpDTMConverter::setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact )
411{
412 QStringList list = addr.categories();
413
414 QArray<int> ids(list.count());
415 uint index = 0;
416 for(uint i=0; i<ids.size(); i++){
417 if(catDB->exists(list[i])){
418 ids[index] = catDB->id(list[i]);
419 qDebug("set ex cat %d %s ",ids[index] , list[i].latin1());
420 index++;
421 } else {
422 ids[index] = catDB->addCategory(list[i]);
423 qDebug("add new cat %d %s ",ids[index] , list[i].latin1());
424 index++;
425 }
426 }
427 bool res ;
428 if ( res = database->updateCategories(contact, ids) )
429 qDebug("cat updated ");
430 else
431 qDebug("error cat updating ");
432
433 return res;
434}
435
436#if 0
437 m_pCategories = new SlCategories;
438catDB
439
440 if(categories == QString::null) return true;
441 QStringList list = CSVParser::parse(categories);
442 QArray<int> ids(list.count());
443 uint index = 0;
444 for(uint i=0; i<ids.size(); i++){
445#if 0
446 bool ok;
447 ids[index] = list[i].toInt(&ok);
448 if(ok){
449 index++;
450 } else {
451 if(m_pCategories->exists(list[i])){
452 ids[index] = m_pCategories->id(list[i]);
453 index++;
454 }
455 }
456#else
457 if(m_pCategories->exists(list[i])){
458 ids[index] = m_pCategories->id(list[i]);
459 index++;
460 } else if(m_addCategory){
461 ids[index] = m_pCategories->addCategory(list[i]);
462 index++;
463 }
464#endif
465 }
466 if(ids.size() > 0 && index == 0){
467 return true;
468 } else if(index != ids.size()){
469 ids.resize(index);
470 }
471 if(!m_pZdb->updateCategories(id, ids)){
472 return false;
473 }
474 return true;
475#endif
476
439QDate SharpDTMConverter::convertDate( QString s) 477QDate SharpDTMConverter::convertDate( QString s)
440{ 478{
441 QDate dt = KGlobal::locale()->readDate( s ); 479 QDate dt = KGlobal::locale()->readDate( s );
442 return dt; 480 return dt;
443 return QDate (); 481 return QDate ();
444} 482}
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.h b/kabc/plugins/sharpdtm/sharpdtmconverter.h
index a04083e..db1bf2d 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.h
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.h
@@ -70,16 +70,17 @@ public:
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 bool setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact );
78 79
79 private: 80 private:
80 SlCategory::SlCategories* catDB; 81 SlCategory::SlCategories* catDB;
81 QDate convertDate( QString ); 82 QDate convertDate( QString );
82 83
83 84
84}; 85};
85 86