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
@@ -24,7 +24,6 @@ Copyright (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>
@@ -33,7 +32,7 @@ $Id$
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>
@@ -42,17 +41,13 @@ $Id$
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
@@ -61,75 +56,56 @@ extern "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 }
@@ -137,10 +113,9 @@ Ticket *ResourceOpie::requestSaveTicket()
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() ) {
@@ -167,85 +142,73 @@ bool ResourceOpie::doOpen()
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
@@ -259,6 +222,7 @@ bool ResourceOpie::save( Ticket *ticket )
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;
@@ -282,19 +246,14 @@ bool ResourceOpie::save( Ticket *ticket )
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
@@ -334,17 +293,10 @@ bool ResourceOpie::lock( const QString &fileName )
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( "/" ), "_" );
@@ -356,32 +308,28 @@ void ResourceOpie::unlock( const QString &fileName )
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
@@ -391,20 +339,13 @@ void ResourceOpie::fileChanged()
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"