summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-20 21:49:51 (UTC)
committer zautrix <zautrix>2004-10-20 21:49:51 (UTC)
commitbb235c5a639b914574e1e247d2de6e479517585f (patch) (unidiff)
tree0f074ec87d93b6f5fb81b6893f0174cabc52c1df
parent8e00329a4a5f0b66d26d20f067ab6aefca17f17a (diff)
downloadkdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.zip
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.gz
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.bz2
qtopia resource fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.cpp24
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp98
-rw-r--r--microkde/kresources/managerimpl.cpp9
3 files changed, 45 insertions, 86 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
@@ -262,75 +262,78 @@ bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr )
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()) << "\" ";
@@ -355,82 +358,83 @@ bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *strea
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";
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
@@ -49,69 +49,69 @@ $Id$
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
@@ -136,247 +136,195 @@ bool ResourceQtopia::doOpen()
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"
diff --git a/microkde/kresources/managerimpl.cpp b/microkde/kresources/managerimpl.cpp
index 81bbbec..5bd9eb7 100644
--- a/microkde/kresources/managerimpl.cpp
+++ b/microkde/kresources/managerimpl.cpp
@@ -5,98 +5,105 @@
5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> 5 Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 6 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. 21 Boston, MA 02111-1307, USA.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <kglobal.h> 31#include <kglobal.h>
32 32
33#include <kapplication.h> 33#include <kapplication.h>
34#include <kdebug.h> 34#include <kdebug.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include <kstandarddirs.h> 36#include <kstandarddirs.h>
37#include <qfile.h>
37 38
38#include "resource.h" 39#include "resource.h"
39#include "factory.h" 40#include "factory.h"
40#include "managerimpl.h" 41#include "managerimpl.h"
41 42
42using namespace KRES; 43using namespace KRES;
43 44
44ManagerImpl::ManagerImpl( const QString &family ) 45ManagerImpl::ManagerImpl( const QString &family )
45 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ), 46 : mFamily( family ), mConfig( 0 ), mStdConfig( 0 ), mStandard( 0 ),
46 mFactory( 0 ) 47 mFactory( 0 )
47 48
48{ 49{
49 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl; 50 kdDebug(5650) << "ManagerImpl::ManagerImpl()" << endl;
50 51
51 52
52} 53}
53 54
54ManagerImpl::~ManagerImpl() 55ManagerImpl::~ManagerImpl()
55{ 56{
56 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl; 57 kdDebug(5650) << "ManagerImpl::~ManagerImpl()" << endl;
57 58
58 Resource::List::ConstIterator it; 59 Resource::List::ConstIterator it;
59 for ( it = mResources.begin(); it != mResources.end(); ++it ) { 60 for ( it = mResources.begin(); it != mResources.end(); ++it ) {
60 delete *it; 61 delete *it;
61 } 62 }
62 63
63 delete mStdConfig; 64 delete mStdConfig;
64} 65}
65 66
66void ManagerImpl::createStandardConfig() 67void ManagerImpl::createStandardConfig()
67{ 68{
68 if ( !mStdConfig ) { 69 if ( !mStdConfig ) {
69 QString file = locateLocal( "data", KGlobal::getAppName() 70 QString file = locateLocal( "data", KGlobal::getAppName()
70 + "/kresources/" + mFamily + "rc" ); 71 + "/kresources/" + mFamily + "rc" );
72 if ( mFamily == "tmpcontact" ) {
73 if (QFile::exists ( file ) ){
74 QFile::remove ( file );
75 qDebug("removed tmp rc file: %s ", file.latin1());
76 }
77 }
71 mStdConfig = new KConfig( file ); 78 mStdConfig = new KConfig( file );
72 } 79 }
73 80
74 mConfig = mStdConfig; 81 mConfig = mStdConfig;
75} 82}
76 83
77void ManagerImpl::readConfig( KConfig *cfg ) 84void ManagerImpl::readConfig( KConfig *cfg )
78{ 85{
79 kdDebug(5650) << "ManagerImpl::readConfig()" << endl; 86 kdDebug(5650) << "ManagerImpl::readConfig()" << endl;
80 87
81 delete mFactory; 88 delete mFactory;
82 mFactory = Factory::self( mFamily ); 89 mFactory = Factory::self( mFamily );
83 90
84 if ( !cfg ) { 91 if ( !cfg ) {
85 createStandardConfig(); 92 createStandardConfig();
86 } else { 93 } else {
87 mConfig = cfg; 94 mConfig = cfg;
88 } 95 }
89 96
90 mStandard = 0; 97 mStandard = 0;
91 98
92 mConfig->setGroup( "General" ); 99 mConfig->setGroup( "General" );
93 100
94 QStringList keys = mConfig->readListEntry( "ResourceKeys" ); 101 QStringList keys = mConfig->readListEntry( "ResourceKeys" );
95 keys += mConfig->readListEntry( "PassiveResourceKeys" ); 102 keys += mConfig->readListEntry( "PassiveResourceKeys" );
96 103
97 QString standardKey = mConfig->readEntry( "Standard" ); 104 QString standardKey = mConfig->readEntry( "Standard" );
98 105
99 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) { 106 for ( QStringList::Iterator it = keys.begin(); it != keys.end(); ++it ) {
100 readResourceConfig( *it, false ); 107 readResourceConfig( *it, false );
101 } 108 }
102 109