summaryrefslogtreecommitdiffabout
path: root/kabc/plugins/qtopia/resourceqtopia.cpp
Unidiff
Diffstat (limited to 'kabc/plugins/qtopia/resourceqtopia.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp179
1 files changed, 60 insertions, 119 deletions
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index 3d9d28b..4854197 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -21,129 +21,104 @@
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27
28#include <sys/types.h> 27#include <sys/types.h>
29#include <sys/stat.h> 28#include <sys/stat.h>
30#include <unistd.h> 29#include <unistd.h>
31 30
32#include <qdir.h> 31#include <qdir.h>
33#include <qfile.h> 32#include <qfile.h>
34#include <qfileinfo.h> 33#include <qfileinfo.h>
35#include <qregexp.h> 34#include <qregexp.h>
36#include <qtimer.h> 35//US #include <qtimer.h>
37 36
38#include <kapplication.h> 37#include <kapplication.h>
39#include <kconfig.h> 38#include <kconfig.h>
40#include <kdebug.h> 39#include <kdebug.h>
41#include <klocale.h> 40#include <klocale.h>
42//US #include <ksavefile.h> 41//US #include <ksavefile.h>
43#include <kstandarddirs.h> 42#include <kstandarddirs.h>
44 43
45//US #include "formatfactory.h" 44#include <qpe/pim/addressbookaccess.h>
46//US #include <qpe/qpeapplication.h>
47 45
48#include <opie/ocontactaccess.h>
49#include <opie/ocontactaccessbackend_xml.h>
50 46
51#include "resource.h"
52#include "resourceqtopiaconfig.h" 47#include "resourceqtopiaconfig.h"
53#include "stdaddressbook.h" 48#include "stdaddressbook.h"
54 49
55#include "opieconverter.h" 50#include "qtopiaconverter.h"
56 51
57#include "resourceqtopia.h" 52#include "resourceqtopia.h"
58 53
59using namespace KABC; 54using namespace KABC;
60extern "C" 55extern "C"
61{ 56{
62 void *init_microkabc_qtopia() 57 void *init_microkabc_qtopia()
63 { 58 {
64 return new KRES::PluginFactory<ResourceOpie,ResourceOpieConfig>(); 59 return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig>();
65 } 60 }
66} 61}
67 62
68ResourceOpie::ResourceOpie( const KConfig *config ) 63ResourceQtopia::ResourceQtopia( const KConfig *config )
69 : Resource( config ), mConverter (0) 64 : Resource( config ), mConverter (0)
70{ 65{
66 // we can not choose the filename. Therefore use the default to display
71 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml"; 67 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
72
73 KConfig *cfg = (KConfig *)config;
74 if ( cfg ) {
75 fileName = cfg->readEntry( "FileName", fileName );
76
77 }
78
79// qDebug("ResourceOpie::ResourceOpie : %s", fileName.latin1() );
80 68
81 init( fileName ); 69 init( fileName );
82} 70}
83 71
84ResourceOpie::ResourceOpie( const QString &fileName ) 72ResourceQtopia::ResourceQtopia( const QString &fileName )
85 : Resource( 0 ) 73 : Resource( 0 )
86{ 74{
87// qDebug("ResourceOpie::ResourceOpie : 3 %s", fileName.latin1()); 75// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
88 init( fileName ); 76 init( fileName );
89} 77}
90 78
91void ResourceOpie::init( const QString &fileName ) 79void ResourceQtopia::init( const QString &fileName )
92{ 80{
93 81
94/*US we have no KDirWatch. SO simulate the signals from inside the apropriate methods
95 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 82 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
96 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 83 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
97 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 84 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
98*/
99 //US opie addressbook is always readonly
100//US setReadOnly( true );
101 85
102 setFileName( fileName ); 86 setFileName( fileName );
103
104} 87}
105 88
106ResourceOpie::~ResourceOpie() 89ResourceQtopia::~ResourceQtopia()
107{ 90{
108 if (mConverter != 0) 91 if (mConverter != 0)
109 delete mConverter; 92 delete mConverter;
93
110} 94}
111 95
112void ResourceOpie::writeConfig( KConfig *config ) 96void ResourceQtopia::writeConfig( KConfig *config )
113{ 97{
114 //US opie addressbook is always readonly
115//US setReadOnly( true );
116
117 Resource::writeConfig( config ); 98 Resource::writeConfig( config );
118
119 config->writeEntry( "FileName", mFileName );
120
121// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
122
123} 99}
124 100
125Ticket *ResourceOpie::requestSaveTicket() 101Ticket *ResourceQtopia::requestSaveTicket()
126{ 102{
127 kdDebug(5700) << "ResourceOpie::requestSaveTicket()" << endl; 103 kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
128 104
129 if ( !addressBook() ) return 0; 105 if ( !addressBook() ) return 0;
130 106
131 if ( !lock( mFileName ) ) { 107 if ( !lock( mFileName ) ) {
132 kdDebug(5700) << "ResourceOpie::requestSaveTicket(): Unable to lock file '" 108 kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
133 << mFileName << "'" << endl; 109 << mFileName << "'" << endl;
134 return 0; 110 return 0;
135 } 111 }
136 return createTicket( this ); 112 return createTicket( this );
137} 113}
138 114
139 115
140bool ResourceOpie::doOpen() 116bool ResourceQtopia::doOpen()
141{ 117{
142// qDebug("ResourceOpie::doOpen() %s", mFileName.latin1()); 118/*US
143/*US
144 QFile file( mFileName ); 119 QFile file( mFileName );
145 120
146 if ( !file.exists() ) { 121 if ( !file.exists() ) {
147 // try to create the file 122 // try to create the file
148 bool ok = file.open( IO_WriteOnly ); 123 bool ok = file.open( IO_WriteOnly );
149 if ( ok ) 124 if ( ok )
@@ -164,91 +139,79 @@ bool ResourceOpie::doOpen()
164 139
165 file.close(); 140 file.close();
166 141
167 return ok; 142 return ok;
168 } 143 }
169*/ 144*/
170 qDebug("ResourceOpie::doOpen() has to be fixed - %s", mFileName.latin1());
171 return true; 145 return true;
172} 146}
173 147
174void ResourceOpie::doClose() 148void ResourceQtopia::doClose()
175{ 149{
176// qDebug("ResourceOpie::doClose() %s", mFileName.latin1());
177} 150}
178 151
179bool ResourceOpie::load() 152bool ResourceQtopia::load()
180{ 153{
181// qDebug("ResourceOpie::load() %s", mFileName.latin1()); 154 kdDebug(5700) << "ResourceQtopia::load(): '" << mFileName << "'" << endl;
182 kdDebug(5700) << "ResourceOpie::load(): '" << mFileName << "'" << endl; 155
156// qDebug("ResourceQtopia::load: Try to load file() %s", mFileName.latin1());
157
158 AddressBookAccess* access = new AddressBookAccess();
183 159
184 qDebug("ResourceOpie::load: Try to load file() %s", mFileName.latin1());
185
186 OContactAccessBackend_XML* backend = new OContactAccessBackend_XML( "KDEPim/Pi", mFileName );
187 OContactAccess* access = new OContactAccess("KDEPim/Pi", 0l, backend, false);
188
189 if ( !access ) { 160 if ( !access ) {
190 qDebug("Unable to load file() %s", mFileName.latin1()); 161 qDebug("Unable to load file() %s", mFileName.latin1());
191 addressBook()->error( i18n( "Unable to load file '%1'." ).arg( mFileName ) ); 162 addressBook()->error( i18n( "Unable to load file '%1'." ).arg( mFileName ) );
192 return false; 163 return false;
193 } 164 }
194 165
195 access -> setReadAhead( 32 ); // Use ReadAhead-Cache if available
196
197 bool res = false; 166 bool res = false;
198 if (mConverter == 0) 167 if (mConverter == 0)
199 { 168 {
200 mConverter = new OpieConverter(); 169 mConverter = new QtopiaConverter();
201 res = mConverter->init(); 170 res = mConverter->init();
202 if ( !res ) 171 if ( !res )
203 { 172 {
204 qDebug("Unable to initialize opie converter. Most likely a problem with the category file"); 173 qDebug("Unable to initialize qtopia converter. Most likely a problem with the category file");
205 addressBook()->error( i18n( "Unable to initialize opie converter. Most likely a problem with the category file" ) ); 174 addressBook()->error( i18n( "Unable to initialize qtopia converter. Most likely a problem with the category file" ) );
206 delete access; 175 delete access;
207 return false; 176 return false;
208 } 177 }
209 } 178 }
179
180 { //create a new scope
181 AddressBookIterator it(*access);
182 const PimContact* contact;
210 183
211 184 for (contact=it.toFirst(); it.current(); ++it) {
212 OContactAccess::List::Iterator it; 185 contact = it.current();
213 OContactAccess::List allList = access->allRecords();
214 for ( it = allList.begin(); it != allList.end(); ++it )
215 {
216 OContact c = (*it);
217 186
218 KABC::Addressee addressee; 187 KABC::Addressee addressee;
219 188
220 res = mConverter->opieToAddressee( c, addressee ); 189 res = mConverter->qtopiaToAddressee( (*contact), addressee );
221 190
222 if ( !addressee.isEmpty() && res ) 191 if ( !addressee.isEmpty() && res )
223 { 192 {
224 addressee.setResource( this ); 193 addressee.setResource( this );
225 addressBook()->insertAddressee( addressee ); 194 addressBook()->insertAddressee( addressee );
195 }
226 } 196 }
227
228// qDebug("found %s", c.fullName().latin1());
229 } 197 }
230 198
231 delete access; 199 delete access;
232 // it seems so, that deletion of access deletes backend as well
233 //delete backend;
234
235 return true; 200 return true;
236} 201}
237 202
238bool ResourceOpie::save( Ticket *ticket ) 203bool ResourceQtopia::save( Ticket *ticket )
239{ 204{
240 qDebug("ResourceOpie::save() has to be fixed - %s", mFileName.latin1()); 205/*US
241/*US 206// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
242 207 kdDebug(5700) << "ResourceQtopia::save()" << endl;
243 qDebug("ResourceOpie::save %s", mFileName.latin1());
244 kdDebug(5700) << "ResourceOpie::save()" << endl;
245 208
246 // create backup file 209 // create backup file
247 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() ); 210 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
248*/ 211
249/*US we use a simpler method to create a backupfile 212/*US we use a simpler method to create a backupfile
250 213
251 (void) KSaveFile::backupFile( mFileName, QString::null 214 (void) KSaveFile::backupFile( mFileName, QString::null
252 ,extension ); 215 ,extension );
253 216
254 KSaveFile saveFile( mFileName ); 217 KSaveFile saveFile( mFileName );
@@ -256,12 +219,13 @@ bool ResourceOpie::save( Ticket *ticket )
256 if ( saveFile.status() == 0 && saveFile.file() ) 219 if ( saveFile.status() == 0 && saveFile.file() )
257 { 220 {
258 mFormat->saveAll( addressBook(), this, saveFile.file() ); 221 mFormat->saveAll( addressBook(), this, saveFile.file() );
259 ok = saveFile.close(); 222 ok = saveFile.close();
260 } 223 }
261*/ 224*/
225
262/*US 226/*US
263//US ToDo: write backupfile 227//US ToDo: write backupfile
264 QFile info; 228 QFile info;
265 info.setName( mFileName ); 229 info.setName( mFileName );
266 bool ok = info.open( IO_WriteOnly ); 230 bool ok = info.open( IO_WriteOnly );
267 if ( ok ) { 231 if ( ok ) {
@@ -279,25 +243,20 @@ bool ResourceOpie::save( Ticket *ticket )
279 243
280 delete ticket; 244 delete ticket;
281 unlock( mFileName ); 245 unlock( mFileName );
282 246
283 return ok; 247 return ok;
284 248
285 qDebug("ResourceOpie::save has to be changed"); 249 qDebug("ResourceQtopia::save has to be changed");
286*/ 250*/
287 return true; 251 return true;
288
289} 252}
290 253
291bool ResourceOpie::lock( const QString &fileName ) 254bool ResourceQtopia::lock( const QString &fileName )
292{ 255{
293 qDebug("ResourceOpie::lock() has to be fixed - %s", mFileName.latin1()); 256 kdDebug(5700) << "ResourceQtopia::lock()" << endl;
294
295/*US
296// qDebug("ResourceOpie::lock() %s", fileName.latin1());
297 kdDebug(5700) << "ResourceOpie::lock()" << endl;
298 257
299 QString fn = fileName; 258 QString fn = fileName;
300 259
301//US change the implementation how the lockfilename is getting created 260//US change the implementation how the lockfilename is getting created
302//US fn.replace( QRegExp("/"), "_" ); 261//US fn.replace( QRegExp("/"), "_" );
303//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 262//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
@@ -331,80 +290,62 @@ bool ResourceOpie::lock( const QString &fileName )
331 return true; 290 return true;
332 } 291 }
333 292
334 // TODO: check stat 293 // TODO: check stat
335 294
336 return false; 295 return false;
337*/
338
339 return true;
340} 296}
341 297
342void ResourceOpie::unlock( const QString &fileName ) 298void ResourceQtopia::unlock( const QString &fileName )
343{ 299{
344 qDebug("ResourceOpie::unlock() has to be fixed - %s", mFileName.latin1());
345/*US
346// qDebug("ResourceOpie::unlock() %s", fileName.latin1());
347
348 QString fn = fileName; 300 QString fn = fileName;
349//US change the implementation how the lockfilename is getting created 301//US change the implementation how the lockfilename is getting created
350//US fn.replace( QRegExp( "/" ), "_" ); 302//US fn.replace( QRegExp( "/" ), "_" );
351//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 303//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
352//US QString lockName = fn + ".lock"; 304//US QString lockName = fn + ".lock";
353 KURL url(fn); 305 KURL url(fn);
354 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 306 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
355 307
356 QFile::remove( lockName ); 308 QFile::remove( lockName );
357 QFile::remove( mLockUniqueName ); 309 QFile::remove( mLockUniqueName );
358 addressBook()->emitAddressBookUnlocked(); 310 addressBook()->emitAddressBookUnlocked();
359*/
360} 311}
361 312
362void ResourceOpie::setFileName( const QString &fileName ) 313void ResourceQtopia::setFileName( const QString &fileName )
363{ 314{
364/*US ToDo: no synchronization so far. Has to be changed in the future
365 mDirWatch.stopScan(); 315 mDirWatch.stopScan();
366 mDirWatch.removeFile( mFileName ); 316 mDirWatch.removeFile( mFileName );
367*/ 317
368 mFileName = fileName; 318 mFileName = fileName;
369 319
370
371/*US ToDo: no synchronization so far. Has to be changed in the future
372 mDirWatch.addFile( mFileName ); 320 mDirWatch.addFile( mFileName );
373 mDirWatch.startScan(); 321 mDirWatch.startScan();
374*/ 322
375//US simulate KDirWatch event 323//US simulate KDirWatch event
376 fileChanged(); 324//US fileChanged();
377} 325}
378 326
379QString ResourceOpie::fileName() const 327QString ResourceQtopia::fileName() const
380{ 328{
381 return mFileName; 329 return mFileName;
382} 330}
383 331
384void ResourceOpie::fileChanged() 332void ResourceQtopia::fileChanged()
385{ 333{
386 // There is a small theoretical chance that KDirWatch calls us before 334 // There is a small theoretical chance that KDirWatch calls us before
387 // we are fully constructed 335 // we are fully constructed
388 if (!addressBook()) 336 if (!addressBook())
389 return; 337 return;
390 load(); 338 load();
391 addressBook()->emitAddressBookChanged(); 339 addressBook()->emitAddressBookChanged();
392} 340}
393 341
394void ResourceOpie::removeAddressee( const Addressee &addr ) 342void ResourceQtopia::removeAddressee( const Addressee &addr )
395{ 343{
396/*US
397 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) );
398 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) );
399 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) );
400*/
401} 344}
402 345
403void ResourceOpie::cleanUp() 346void ResourceQtopia::cleanUp()
404{ 347{
405// qDebug("ResourceOpie::cleanup() %s", mFileName.latin1());
406
407 unlock( mFileName ); 348 unlock( mFileName );
408} 349}
409 350
410//US #include "resourceopie.moc" 351//US #include "resourceqtopia.moc"