summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2004-10-20 21:49:51 (UTC)
committer zautrix <zautrix>2004-10-20 21:49:51 (UTC)
commitbb235c5a639b914574e1e247d2de6e479517585f (patch) (unidiff)
tree0f074ec87d93b6f5fb81b6893f0174cabc52c1df /kabc
parent8e00329a4a5f0b66d26d20f067ab6aefca17f17a (diff)
downloadkdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.zip
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.gz
kdepimpi-bb235c5a639b914574e1e247d2de6e479517585f.tar.bz2
qtopia resource fixes
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
@@ -282,35 +282,38 @@ bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr )
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;
@@ -375,42 +378,43 @@ bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *strea
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
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
@@ -69,29 +69,29 @@ ResourceQtopia::ResourceQtopia( const KConfig *config )
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{
@@ -156,155 +156,97 @@ bool ResourceQtopia::load()
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() );
@@ -324,44 +266,50 @@ bool ResourceQtopia::lock( const QString &lockfileName )
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 ) {