-rw-r--r-- | kabc/addressbook.cpp | 11 | ||||
-rw-r--r-- | kabc/addressbook.h | 1 | ||||
-rw-r--r-- | kabc/addressee.cpp | 2 | ||||
-rw-r--r-- | kabc/plugins/sharpdtm/resourcesharpdtm.cpp | 215 | ||||
-rw-r--r-- | kabc/tmpaddressbook.cpp | 9 |
5 files changed, 61 insertions, 177 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp index 4c4ae09..8487ff3 100644 --- a/kabc/addressbook.cpp +++ b/kabc/addressbook.cpp | |||
@@ -1131,64 +1131,75 @@ bool AddressBook::addCustomField( const QString &label, int category, | |||
1131 | 1131 | ||
1132 | return true; | 1132 | return true; |
1133 | } | 1133 | } |
1134 | 1134 | ||
1135 | QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) | 1135 | QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) |
1136 | { | 1136 | { |
1137 | if (!ab.d) return s; | 1137 | if (!ab.d) return s; |
1138 | 1138 | ||
1139 | return s << ab.d->mAddressees; | 1139 | return s << ab.d->mAddressees; |
1140 | } | 1140 | } |
1141 | 1141 | ||
1142 | QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) | 1142 | QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) |
1143 | { | 1143 | { |
1144 | if (!ab.d) return s; | 1144 | if (!ab.d) return s; |
1145 | 1145 | ||
1146 | s >> ab.d->mAddressees; | 1146 | s >> ab.d->mAddressees; |
1147 | 1147 | ||
1148 | return s; | 1148 | return s; |
1149 | } | 1149 | } |
1150 | 1150 | ||
1151 | bool AddressBook::addResource( Resource *resource ) | 1151 | bool AddressBook::addResource( Resource *resource ) |
1152 | { | 1152 | { |
1153 | if ( !resource->open() ) { | 1153 | if ( !resource->open() ) { |
1154 | kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; | 1154 | kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; |
1155 | return false; | 1155 | return false; |
1156 | } | 1156 | } |
1157 | 1157 | ||
1158 | resource->setAddressBook( this ); | 1158 | resource->setAddressBook( this ); |
1159 | 1159 | ||
1160 | d->mManager->add( resource ); | 1160 | d->mManager->add( resource ); |
1161 | return true; | 1161 | return true; |
1162 | } | 1162 | } |
1163 | void AddressBook::removeResources() | ||
1164 | { | ||
1165 | //remove all possible resources. This should cleanup the configfile. | ||
1166 | QPtrList<KABC::Resource> mResources = resources(); | ||
1167 | |||
1168 | QPtrListIterator<KABC::Resource> it(mResources); | ||
1169 | for ( ; it.current(); ++it ) { | ||
1170 | KABC::Resource *res = it.current(); | ||
1171 | removeResource(res); | ||
1172 | } | ||
1173 | } | ||
1163 | 1174 | ||
1164 | bool AddressBook::removeResource( Resource *resource ) | 1175 | bool AddressBook::removeResource( Resource *resource ) |
1165 | { | 1176 | { |
1166 | resource->close(); | 1177 | resource->close(); |
1167 | 1178 | ||
1168 | if ( resource == standardResource() ) | 1179 | if ( resource == standardResource() ) |
1169 | d->mManager->setStandardResource( 0 ); | 1180 | d->mManager->setStandardResource( 0 ); |
1170 | 1181 | ||
1171 | resource->setAddressBook( 0 ); | 1182 | resource->setAddressBook( 0 ); |
1172 | 1183 | ||
1173 | d->mManager->remove( resource ); | 1184 | d->mManager->remove( resource ); |
1174 | return true; | 1185 | return true; |
1175 | } | 1186 | } |
1176 | 1187 | ||
1177 | QPtrList<Resource> AddressBook::resources() | 1188 | QPtrList<Resource> AddressBook::resources() |
1178 | { | 1189 | { |
1179 | QPtrList<Resource> list; | 1190 | QPtrList<Resource> list; |
1180 | 1191 | ||
1181 | // qDebug("AddressBook::resources() 1"); | 1192 | // qDebug("AddressBook::resources() 1"); |
1182 | 1193 | ||
1183 | KRES::Manager<Resource>::ActiveIterator it; | 1194 | KRES::Manager<Resource>::ActiveIterator it; |
1184 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) | 1195 | for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) |
1185 | list.append( *it ); | 1196 | list.append( *it ); |
1186 | 1197 | ||
1187 | return list; | 1198 | return list; |
1188 | } | 1199 | } |
1189 | 1200 | ||
1190 | /*US | 1201 | /*US |
1191 | void AddressBook::setErrorHandler( ErrorHandler *handler ) | 1202 | void AddressBook::setErrorHandler( ErrorHandler *handler ) |
1192 | { | 1203 | { |
1193 | delete d->mErrorHandler; | 1204 | delete d->mErrorHandler; |
1194 | d->mErrorHandler = handler; | 1205 | d->mErrorHandler = handler; |
diff --git a/kabc/addressbook.h b/kabc/addressbook.h index 75f8b51..2351add 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h | |||
@@ -245,64 +245,65 @@ class AddressBook : public QObject | |||
245 | void emitAddressBookLocked() { emit addressBookLocked( this ); } | 245 | void emitAddressBookLocked() { emit addressBookLocked( this ); } |
246 | void emitAddressBookUnlocked() { emit addressBookUnlocked( this ); } | 246 | void emitAddressBookUnlocked() { emit addressBookUnlocked( this ); } |
247 | void emitAddressBookChanged() { emit addressBookChanged( this ); } | 247 | void emitAddressBookChanged() { emit addressBookChanged( this ); } |
248 | 248 | ||
249 | /** | 249 | /** |
250 | Return list of all Fields known to the address book which are associated | 250 | Return list of all Fields known to the address book which are associated |
251 | with the given field category. | 251 | with the given field category. |
252 | */ | 252 | */ |
253 | Field::List fields( int category = Field::All ); | 253 | Field::List fields( int category = Field::All ); |
254 | 254 | ||
255 | /** | 255 | /** |
256 | Add custom field to address book. | 256 | Add custom field to address book. |
257 | 257 | ||
258 | @param label User visible label of the field. | 258 | @param label User visible label of the field. |
259 | @param category Ored list of field categories. | 259 | @param category Ored list of field categories. |
260 | @param key Identifier used as key for reading and writing the field. | 260 | @param key Identifier used as key for reading and writing the field. |
261 | @param app String used as application key for reading and writing | 261 | @param app String used as application key for reading and writing |
262 | the field. | 262 | the field. |
263 | */ | 263 | */ |
264 | bool addCustomField( const QString &label, int category = Field::All, | 264 | bool addCustomField( const QString &label, int category = Field::All, |
265 | const QString &key = QString::null, | 265 | const QString &key = QString::null, |
266 | const QString &app = QString::null ); | 266 | const QString &app = QString::null ); |
267 | 267 | ||
268 | 268 | ||
269 | /** | 269 | /** |
270 | Add address book resource. | 270 | Add address book resource. |
271 | */ | 271 | */ |
272 | bool addResource( Resource * ); | 272 | bool addResource( Resource * ); |
273 | 273 | ||
274 | /** | 274 | /** |
275 | Remove address book resource. | 275 | Remove address book resource. |
276 | */ | 276 | */ |
277 | void removeResources(); | ||
277 | bool removeResource( Resource * ); | 278 | bool removeResource( Resource * ); |
278 | 279 | ||
279 | /** | 280 | /** |
280 | Return pointer list of all resources. | 281 | Return pointer list of all resources. |
281 | */ | 282 | */ |
282 | QPtrList<Resource> resources(); | 283 | QPtrList<Resource> resources(); |
283 | 284 | ||
284 | /** | 285 | /** |
285 | Set the @p ErrorHandler, that is used by @ref error() to | 286 | Set the @p ErrorHandler, that is used by @ref error() to |
286 | provide gui-independend error messages. | 287 | provide gui-independend error messages. |
287 | */ | 288 | */ |
288 | void setErrorHandler( ErrorHandler * ); | 289 | void setErrorHandler( ErrorHandler * ); |
289 | 290 | ||
290 | /** | 291 | /** |
291 | Shows gui independend error messages. | 292 | Shows gui independend error messages. |
292 | */ | 293 | */ |
293 | void error( const QString& ); | 294 | void error( const QString& ); |
294 | 295 | ||
295 | /** | 296 | /** |
296 | Query all resources to clean up their lock files | 297 | Query all resources to clean up their lock files |
297 | */ | 298 | */ |
298 | void cleanUp(); | 299 | void cleanUp(); |
299 | 300 | ||
300 | // sync stuff | 301 | // sync stuff |
301 | //Addressee::List getExternLastSyncAddressees(); | 302 | //Addressee::List getExternLastSyncAddressees(); |
302 | void resetTempSyncStat(); | 303 | void resetTempSyncStat(); |
303 | QStringList uidList(); | 304 | QStringList uidList(); |
304 | void removeSyncAddressees( bool removeDeleted = false ); | 305 | void removeSyncAddressees( bool removeDeleted = false ); |
305 | void mergeAB( AddressBook *aBook, const QString& profile, bool isSubset ); | 306 | void mergeAB( AddressBook *aBook, const QString& profile, bool isSubset ); |
306 | Addressee findByExternUid( const QString& uid , const QString& profile ); | 307 | Addressee findByExternUid( const QString& uid , const QString& profile ); |
307 | bool containsExternalUid( const QString& uid ); | 308 | bool containsExternalUid( const QString& uid ); |
308 | 309 | ||
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index 3d4992c..028d3bb 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp | |||
@@ -243,65 +243,65 @@ void Addressee::computeCsum(const QString &dev) | |||
243 | t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); | 243 | t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); |
244 | t.sort(); | 244 | t.sort(); |
245 | uint iii; | 245 | uint iii; |
246 | for ( iii = 0; iii < t.count(); ++iii) | 246 | for ( iii = 0; iii < t.count(); ++iii) |
247 | l.append( t[iii] ); | 247 | l.append( t[iii] ); |
248 | t = mData->emails; | 248 | t = mData->emails; |
249 | t.sort(); | 249 | t.sort(); |
250 | for ( iii = 0; iii < t.count(); ++iii) | 250 | for ( iii = 0; iii < t.count(); ++iii) |
251 | l.append( t[iii] ); | 251 | l.append( t[iii] ); |
252 | t = mData->categories; | 252 | t = mData->categories; |
253 | t.sort(); | 253 | t.sort(); |
254 | for ( iii = 0; iii < t.count(); ++iii) | 254 | for ( iii = 0; iii < t.count(); ++iii) |
255 | l.append( t[iii] ); | 255 | l.append( t[iii] ); |
256 | t = mData->custom; | 256 | t = mData->custom; |
257 | t.sort(); | 257 | t.sort(); |
258 | for ( iii = 0; iii < t.count(); ++iii) | 258 | for ( iii = 0; iii < t.count(); ++iii) |
259 | if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { | 259 | if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { |
260 | int find = t[iii].find (':')+1; | 260 | int find = t[iii].find (':')+1; |
261 | //qDebug("lennnn %d %d ", find, t[iii].length()); | 261 | //qDebug("lennnn %d %d ", find, t[iii].length()); |
262 | if ( find < t[iii].length()) | 262 | if ( find < t[iii].length()) |
263 | l.append( t[iii] ); | 263 | l.append( t[iii] ); |
264 | 264 | ||
265 | } | 265 | } |
266 | KABC::Address::List::Iterator addressIter; | 266 | KABC::Address::List::Iterator addressIter; |
267 | for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); | 267 | for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); |
268 | ++addressIter ) { | 268 | ++addressIter ) { |
269 | t = (*addressIter).asList(); | 269 | t = (*addressIter).asList(); |
270 | t.sort(); | 270 | t.sort(); |
271 | for ( iii = 0; iii < t.count(); ++iii) | 271 | for ( iii = 0; iii < t.count(); ++iii) |
272 | l.append( t[iii] ); | 272 | l.append( t[iii] ); |
273 | } | 273 | } |
274 | uint cs = getCsum4List(l); | 274 | uint cs = getCsum4List(l); |
275 | #if 1 | 275 | #if 0 |
276 | for ( iii = 0; iii < l.count(); ++iii) | 276 | for ( iii = 0; iii < l.count(); ++iii) |
277 | qDebug("%d***%s***",iii,l[iii].latin1()); | 277 | qDebug("%d***%s***",iii,l[iii].latin1()); |
278 | qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); | 278 | qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); |
279 | #endif | 279 | #endif |
280 | setCsum( dev, QString::number (cs )); | 280 | setCsum( dev, QString::number (cs )); |
281 | } | 281 | } |
282 | 282 | ||
283 | void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) | 283 | void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) |
284 | { | 284 | { |
285 | 285 | ||
286 | detach(); | 286 | detach(); |
287 | if ( mData->name.isEmpty() ) mData->name = ad.mData->name; | 287 | if ( mData->name.isEmpty() ) mData->name = ad.mData->name; |
288 | if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; | 288 | if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; |
289 | if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; | 289 | if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; |
290 | if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; | 290 | if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; |
291 | if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; | 291 | if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; |
292 | if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; | 292 | if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; |
293 | if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; | 293 | if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; |
294 | if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; | 294 | if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; |
295 | if ( !mData->birthday.isValid() ) | 295 | if ( !mData->birthday.isValid() ) |
296 | if ( ad.mData->birthday.isValid()) | 296 | if ( ad.mData->birthday.isValid()) |
297 | mData->birthday = ad.mData->birthday; | 297 | mData->birthday = ad.mData->birthday; |
298 | if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; | 298 | if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; |
299 | if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; | 299 | if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; |
300 | if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; | 300 | if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; |
301 | if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; | 301 | if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; |
302 | if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; | 302 | if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; |
303 | if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; | 303 | if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; |
304 | if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; | 304 | if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; |
305 | if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; | 305 | if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; |
306 | if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; | 306 | if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; |
307 | if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; | 307 | if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; |
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp index ba17c50..48b7d91 100644 --- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp +++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp | |||
@@ -38,369 +38,248 @@ $Id$ | |||
38 | #include <kapplication.h> | 38 | #include <kapplication.h> |
39 | #include <kconfig.h> | 39 | #include <kconfig.h> |
40 | #include <kdebug.h> | 40 | #include <kdebug.h> |
41 | #include <klocale.h> | 41 | #include <klocale.h> |
42 | //US #include <ksavefile.h> | 42 | //US #include <ksavefile.h> |
43 | #include <kstandarddirs.h> | 43 | #include <kstandarddirs.h> |
44 | #include <kmessagebox.h> | 44 | #include <kmessagebox.h> |
45 | 45 | ||
46 | #include <sl/slzdb.h> | 46 | #include <sl/slzdb.h> |
47 | 47 | ||
48 | #include <libkdepim/ksyncprofile.h> | 48 | #include <libkdepim/ksyncprofile.h> |
49 | 49 | ||
50 | #include "resourcesharpdtmconfig.h" | 50 | #include "resourcesharpdtmconfig.h" |
51 | #include "resourcesharpdtm.h" | 51 | #include "resourcesharpdtm.h" |
52 | 52 | ||
53 | #include "stdaddressbook.h" | 53 | #include "stdaddressbook.h" |
54 | 54 | ||
55 | #include "sharpdtmconverter.h" | 55 | #include "sharpdtmconverter.h" |
56 | //#define ALLOW_LOCKING | 56 | //#define ALLOW_LOCKING |
57 | using namespace KABC; | 57 | using namespace KABC; |
58 | extern "C" | 58 | extern "C" |
59 | { | 59 | { |
60 | void *init_microkabc_sharpdtm() | 60 | void *init_microkabc_sharpdtm() |
61 | { | 61 | { |
62 | return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig>(); | 62 | return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig>(); |
63 | } | 63 | } |
64 | } | 64 | } |
65 | 65 | ||
66 | ResourceSharpDTM::ResourceSharpDTM( const KConfig *config ) | 66 | ResourceSharpDTM::ResourceSharpDTM( const KConfig *config ) |
67 | : Resource( config ), mConverter (0) | 67 | : Resource( config ), mConverter (0) |
68 | { | 68 | { |
69 | // we can not choose the filename. Therefore use the default to display | 69 | // we can not choose the filename. Therefore use the default to display |
70 | 70 | mAccess = 0; | |
71 | QString fileName = SlZDataBase::addressbookFileName(); | 71 | QString fileName = SlZDataBase::addressbookFileName(); |
72 | init( fileName ); | 72 | init( fileName ); |
73 | } | 73 | } |
74 | 74 | ||
75 | ResourceSharpDTM::ResourceSharpDTM( const QString &fileName ) | 75 | ResourceSharpDTM::ResourceSharpDTM( const QString &fileName ) |
76 | : Resource( 0 ) | 76 | : Resource( 0 ) |
77 | { | 77 | { |
78 | init( fileName ); | 78 | mAccess = 0; |
79 | init( fileName ); | ||
79 | } | 80 | } |
80 | 81 | ||
81 | void ResourceSharpDTM::init( const QString &fileName ) | 82 | void ResourceSharpDTM::init( const QString &fileName ) |
82 | { | 83 | { |
83 | |||
84 | connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); | ||
85 | connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); | ||
86 | connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); | ||
87 | |||
88 | setFileName( fileName ); | 84 | setFileName( fileName ); |
89 | } | 85 | } |
90 | 86 | ||
91 | ResourceSharpDTM::~ResourceSharpDTM() | 87 | ResourceSharpDTM::~ResourceSharpDTM() |
92 | { | 88 | { |
93 | if (mConverter != 0) | 89 | if (mConverter != 0) |
94 | delete mConverter; | 90 | delete mConverter; |
95 | 91 | ||
96 | if(mAccess != 0) | 92 | if(mAccess != 0) |
97 | delete mAccess; | 93 | delete mAccess; |
98 | } | 94 | } |
99 | 95 | ||
100 | void ResourceSharpDTM::writeConfig( KConfig *config ) | 96 | void ResourceSharpDTM::writeConfig( KConfig *config ) |
101 | { | 97 | { |
102 | Resource::writeConfig( config ); | 98 | Resource::writeConfig( config ); |
103 | } | 99 | } |
104 | 100 | ||
105 | Ticket *ResourceSharpDTM::requestSaveTicket() | 101 | Ticket *ResourceSharpDTM::requestSaveTicket() |
106 | { | 102 | { |
107 | |||
108 | 103 | ||
109 | qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); | 104 | qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); |
110 | 105 | ||
111 | if ( !addressBook() ) return 0; | 106 | if ( !addressBook() ) return 0; |
112 | |||
113 | #ifdef ALLOW_LOCKING | ||
114 | if ( !lock( fileName() ) ) { | ||
115 | qDebug("ResourceSharpDTM::requestSaveTicket(): Unable to lock file "); | ||
116 | return 0; | ||
117 | } | ||
118 | #endif | ||
119 | return createTicket( this ); | 107 | return createTicket( this ); |
120 | } | 108 | } |
121 | 109 | ||
122 | 110 | ||
123 | bool ResourceSharpDTM::doOpen() | 111 | bool ResourceSharpDTM::doOpen() |
124 | { | 112 | { |
125 | qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1()); | 113 | qDebug("%xResourceSharpDTM::doOpen: %s", this,fileName().latin1()); |
126 | |||
127 | // the last parameter in the SlZDataBase constructor means "readonly" | ||
128 | mAccess = new SlZDataBase(fileName(), | ||
129 | SlZDataBase::addressbookItems(), | ||
130 | NULL, false); | ||
131 | 114 | ||
132 | if ( !mAccess ) { | 115 | if ( ! mAccess ) { |
133 | qDebug("Unable to load file() %s", fileName().latin1()); | 116 | // the last parameter in the SlZDataBase constructor means "readonly" |
134 | return false; | 117 | mAccess = new SlZDataBase(fileName(), |
135 | } | 118 | SlZDataBase::addressbookItems(), |
136 | 119 | NULL, false); | |
137 | if (mConverter == 0) | ||
138 | { | ||
139 | mConverter = new SharpDTMConverter(); | ||
140 | bool res = mConverter->init(); | ||
141 | if ( !res ) | ||
142 | { | ||
143 | QString msg("Unable to initialize sharp converter. Most likely a problem with the category file"); | ||
144 | |||
145 | qDebug(msg); | ||
146 | delete mAccess; | ||
147 | mAccess = 0; | ||
148 | return false; | ||
149 | } | 120 | } |
150 | } | 121 | if ( !mAccess ) { |
151 | 122 | qDebug("Unable to load file() %s", fileName().latin1()); | |
152 | return true; | 123 | return false; |
124 | } | ||
125 | if (mConverter == 0) { | ||
126 | mConverter = new SharpDTMConverter(); | ||
127 | bool res = mConverter->init(); | ||
128 | if ( !res ) | ||
129 | { | ||
130 | QString msg("Unable to initialize sharp converter. Most likely a problem with the category file"); | ||
131 | qDebug(msg); | ||
132 | delete mAccess; | ||
133 | mAccess = 0; | ||
134 | return false; | ||
135 | } | ||
136 | } | ||
137 | return true; | ||
153 | } | 138 | } |
154 | 139 | ||
155 | void ResourceSharpDTM::doClose() | 140 | void ResourceSharpDTM::doClose() |
156 | { | 141 | { |
157 | qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1()); | ||
158 | |||
159 | if(mAccess) | ||
160 | { | ||
161 | delete mAccess; | ||
162 | mAccess = 0; | ||
163 | } | ||
164 | // it seems so, that deletion of access deletes backend as well | ||
165 | //delete backend; | ||
166 | |||
167 | return; | 142 | return; |
168 | } | 143 | } |
169 | 144 | ||
170 | bool ResourceSharpDTM::load() | 145 | bool ResourceSharpDTM::load() |
171 | { | 146 | { |
172 | qDebug("ResourceSharpDTM::load: %s", fileName().latin1()); | 147 | qDebug("%xResourceSharpDTM::load: %s",this, fileName().latin1()); |
173 | 148 | bool res = false; | |
174 | bool res = false; | 149 | CardId id; |
175 | 150 | for (bool res=mAccess->first(); res == true; res=mAccess->next()) | |
176 | CardId id; | 151 | { |
177 | 152 | id = mAccess->cardId(); | |
178 | for (bool res=mAccess->first(); res == true; res=mAccess->next()) | 153 | KABC::Addressee addressee; |
179 | { | 154 | res = mConverter->sharpToAddressee( id, mAccess, addressee ); |
180 | id = mAccess->cardId(); | 155 | if ( !addressee.isEmpty() && res ) |
181 | 156 | { | |
182 | KABC::Addressee addressee; | 157 | addressee.setResource( this ); |
183 | 158 | addressBook()->insertAddressee( addressee ); | |
184 | res = mConverter->sharpToAddressee( id, mAccess, addressee ); | 159 | } |
185 | 160 | } | |
186 | if ( !addressee.isEmpty() && res ) | 161 | return true; |
187 | { | ||
188 | addressee.setResource( this ); | ||
189 | addressBook()->insertAddressee( addressee ); | ||
190 | } | ||
191 | } | ||
192 | |||
193 | return true; | ||
194 | } | 162 | } |
195 | 163 | ||
196 | bool ResourceSharpDTM::save( Ticket *ticket ) | 164 | bool ResourceSharpDTM::save( Ticket *ticket ) |
197 | { | 165 | { |
198 | qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); | 166 | qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); |
199 | |||
200 | mDirWatch.stopScan(); | ||
201 | |||
202 | KABC::AddressBook::Iterator it; | 167 | KABC::AddressBook::Iterator it; |
203 | bool res; | 168 | bool res; |
204 | KABC::Addressee::List changedAddressees; | 169 | KABC::Addressee::List changedAddressees; |
205 | typedef QMap<int,QString> AddresseeMap; | 170 | typedef QMap<int,QString> AddresseeMap; |
206 | AddresseeMap map; | 171 | AddresseeMap map; |
207 | CardId id ; | 172 | CardId id ; |
208 | |||
209 | for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { | 173 | for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { |
210 | 174 | ||
211 | if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { | 175 | if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { |
212 | QString uid = (*it).originalExternalUID(); | 176 | QString uid = (*it).originalExternalUID(); |
213 | bool res; | 177 | bool res; |
214 | if ( uid.isEmpty() ) | 178 | if ( uid.isEmpty() ) |
215 | id = 0; | 179 | id = 0; |
216 | else | 180 | else |
217 | id = uid.toUInt(); | 181 | id = uid.toUInt(); |
218 | KABC::Addressee addressee = (*it); | 182 | KABC::Addressee addressee = (*it); |
219 | if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { | 183 | if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { |
220 | res = mAccess->startEditCard(id); | 184 | res = mAccess->startEditCard(id); |
221 | if (res == true) | 185 | if (res == true) |
222 | { | 186 | { |
223 | res = mConverter->addresseeToSharp( (*it), mAccess, id ); | 187 | res = mConverter->addresseeToSharp( (*it), mAccess, id ); |
224 | if (res == true) | 188 | if (res == true) |
225 | { | 189 | { |
226 | res = mAccess->finishEditCard(&id); | 190 | res = mAccess->finishEditCard(&id);; |
227 | //(*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); | ||
228 | //(*it).setExternalUID( QString::number( id ) ); | ||
229 | //(*it).setOriginalExternalUID( QString::number( id ) ); | ||
230 | map.insert(id,(*it).uid()); | 191 | map.insert(id,(*it).uid()); |
231 | if (res == false) | 192 | if (res == false) |
232 | qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); | 193 | qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); |
233 | 194 | ||
234 | } | 195 | } |
235 | else | 196 | else |
236 | { | 197 | { |
237 | qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); | 198 | qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); |
238 | mAccess->cancelEditCard(); | 199 | mAccess->cancelEditCard(); |
239 | } | 200 | } |
240 | } | 201 | } |
241 | 202 | ||
242 | } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { | 203 | } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { |
243 | res = mAccess->deleteCard(&id); | 204 | res = mAccess->deleteCard(&id); |
244 | if ( !res ) | 205 | if ( !res ) |
245 | qDebug("delete error "); | 206 | qDebug("delete error "); |
246 | 207 | ||
247 | 208 | ||
248 | } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { | 209 | } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { |
249 | //changed | 210 | //changed |
250 | res = mAccess->startEditCard(id); | 211 | res = mAccess->startEditCard(id); |
251 | if (res == true) | 212 | if (res == true) |
252 | { | 213 | { |
253 | res = mConverter->addresseeToSharp( (*it), mAccess, id ); | 214 | res = mConverter->addresseeToSharp( (*it), mAccess, id ); |
254 | if (res == true) | 215 | if (res == true) |
255 | { | 216 | { |
256 | res = mAccess->finishEditCard(&id); | 217 | res = mAccess->finishEditCard(&id); |
257 | //(*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM ); | ||
258 | map.insert(id,(*it).uid()); | 218 | map.insert(id,(*it).uid()); |
259 | if (res == false) | 219 | if (res == false) |
260 | qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); | 220 | qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); |
261 | |||
262 | } | 221 | } |
263 | else | 222 | else |
264 | { | 223 | { |
265 | qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); | 224 | qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); |
266 | mAccess->cancelEditCard(); | 225 | mAccess->cancelEditCard(); |
267 | } | 226 | } |
268 | } | 227 | } |
269 | } | 228 | } |
270 | } | 229 | } |
271 | 230 | ||
272 | } | 231 | } |
273 | AddresseeMap::Iterator itam; | 232 | AddresseeMap::Iterator itam; |
274 | for ( res=mAccess->first(); res == true; res=mAccess->next()) | 233 | for ( res=mAccess->first(); res == true; res=mAccess->next()) |
275 | { | 234 | { |
276 | id = mAccess->cardId(); | 235 | id = mAccess->cardId(); |
277 | int idint = id; | 236 | int idint = id; |
278 | itam = map.find( idint ); | 237 | itam = map.find( idint ); |
279 | if ( itam != map.end() ) { | 238 | if ( itam != map.end() ) { |
280 | KABC::Addressee addressee; | 239 | KABC::Addressee addressee; |
281 | res = mConverter->sharpToAddressee( id, mAccess, addressee ); | 240 | res = mConverter->sharpToAddressee( id, mAccess, addressee ); |
282 | 241 | ||
283 | if ( !addressee.isEmpty() && res ) | 242 | if ( !addressee.isEmpty() && res ) |
284 | { | 243 | { |
285 | addressee.setResource( this ); | 244 | addressee.setResource( this ); |
286 | addressee.setUid( itam.data() ); | 245 | addressee.setUid( itam.data() ); |
287 | addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); | 246 | addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); |
288 | addressBook()->insertAddressee( addressee , false ); | 247 | addressBook()->insertAddressee( addressee , false ); |
289 | } | 248 | } |
290 | } | 249 | } |
291 | } | 250 | } |
292 | |||
293 | //US mAccess->save(); | ||
294 | |||
295 | mDirWatch.startScan(); | ||
296 | delete ticket; | 251 | delete ticket; |
297 | unlock( fileName() ); | ||
298 | 252 | ||
299 | return true; | 253 | return true; |
300 | } | 254 | } |
301 | 255 | ||
302 | bool ResourceSharpDTM::lock( const QString &lockfileName ) | 256 | bool ResourceSharpDTM::lock( const QString &lockfileName ) |
303 | { | 257 | { |
304 | #ifdef ALLOW_LOCKING | ||
305 | qDebug("ResourceSharpDTM::lock: %s", fileName().latin1()); | ||
306 | |||
307 | kdDebug(5700) << "ResourceSharpDTM::lock()" << endl; | ||
308 | |||
309 | QString fn = lockfileName; | ||
310 | |||
311 | KURL url(fn); | ||
312 | QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
313 | |||
314 | kdDebug(5700) << "-- lock name: " << lockName << endl; | ||
315 | |||
316 | if (QFile::exists( lockName )) | ||
317 | { | ||
318 | qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName()); | ||
319 | return false; | ||
320 | } | ||
321 | |||
322 | |||
323 | QString lockUniqueName; | ||
324 | lockUniqueName = fn + KApplication::randomString( 8 ); | ||
325 | |||
326 | url = lockUniqueName; | ||
327 | //US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); | ||
328 | mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); | ||
329 | kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; | ||
330 | |||
331 | // Create unique file | ||
332 | QFile file( mLockUniqueName ); | ||
333 | file.open( IO_WriteOnly ); | ||
334 | file.close(); | ||
335 | |||
336 | // Create lock file | ||
337 | int result = 0; | ||
338 | #ifndef _WIN32_ | ||
339 | result = ::link( QFile::encodeName( mLockUniqueName ), | ||
340 | QFile::encodeName( lockName ) ); | ||
341 | #endif | ||
342 | if ( result == 0 ) { | ||
343 | addressBook()->emitAddressBookLocked(); | ||
344 | return true; | ||
345 | } | ||
346 | |||
347 | // TODO: check stat | ||
348 | |||
349 | return false; | ||
350 | #else | ||
351 | return true; | ||
352 | #endif | ||
353 | } | 258 | } |
354 | 259 | ||
355 | void ResourceSharpDTM::unlock( const QString &fileName ) | 260 | void ResourceSharpDTM::unlock( const QString &fileName ) |
356 | { | 261 | { |
357 | #ifdef ALLOW_LOCKING | ||
358 | qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1()); | ||
359 | 262 | ||
360 | QString fn = fileName; | ||
361 | KURL url(fn); | ||
362 | QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); | ||
363 | |||
364 | QFile::remove( lockName ); | ||
365 | QFile::remove( mLockUniqueName ); | ||
366 | addressBook()->emitAddressBookUnlocked(); | ||
367 | #endif | ||
368 | } | 263 | } |
369 | 264 | ||
370 | void ResourceSharpDTM::setFileName( const QString &newFileName ) | 265 | void ResourceSharpDTM::setFileName( const QString &newFileName ) |
371 | { | 266 | { |
372 | mDirWatch.stopScan(); | 267 | Resource::setFileName( newFileName ); |
373 | mDirWatch.removeFile( fileName() ); | ||
374 | |||
375 | Resource::setFileName( newFileName ); | ||
376 | |||
377 | mDirWatch.addFile( fileName() ); | ||
378 | mDirWatch.startScan(); | ||
379 | |||
380 | } | 268 | } |
381 | 269 | ||
382 | void ResourceSharpDTM::fileChanged() | 270 | void ResourceSharpDTM::fileChanged() |
383 | { | 271 | { |
384 | // There is a small theoretical chance that KDirWatch calls us before | 272 | |
385 | // we are fully constructed | ||
386 | if (!addressBook()) | ||
387 | return; | ||
388 | |||
389 | QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) ); | ||
390 | if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { | ||
391 | load(); | ||
392 | addressBook()->emitAddressBookChanged(); | ||
393 | } | ||
394 | } | 273 | } |
395 | 274 | ||
396 | void ResourceSharpDTM::removeAddressee( const Addressee &addr ) | 275 | void ResourceSharpDTM::removeAddressee( const Addressee &addr ) |
397 | { | 276 | { |
398 | } | 277 | } |
399 | 278 | ||
400 | void ResourceSharpDTM::cleanUp() | 279 | void ResourceSharpDTM::cleanUp() |
401 | { | 280 | { |
402 | unlock( fileName() ); | 281 | unlock( fileName() ); |
403 | } | 282 | } |
404 | 283 | ||
405 | 284 | ||
406 | 285 | ||
diff --git a/kabc/tmpaddressbook.cpp b/kabc/tmpaddressbook.cpp index 6e24302..cfa57e3 100644 --- a/kabc/tmpaddressbook.cpp +++ b/kabc/tmpaddressbook.cpp | |||
@@ -15,42 +15,35 @@ | |||
15 | You should have received a copy of the GNU Library General Public License | 15 | You should have received a copy of the GNU Library General Public License |
16 | along with this library; see the file COPYING.LIB. If not, write to | 16 | along with this library; see the file COPYING.LIB. If not, write to |
17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 17 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 | Boston, MA 02111-1307, USA. | 18 | Boston, MA 02111-1307, USA. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | /* | 21 | /* |
22 | Enhanced Version of the file for platform independent KDE tools. | 22 | Enhanced Version of the file for platform independent KDE tools. |
23 | Copyright (c) 2004 Ulf Schenk | 23 | Copyright (c) 2004 Ulf Schenk |
24 | 24 | ||
25 | $Id$ | 25 | $Id$ |
26 | */ | 26 | */ |
27 | #include <qptrlist.h> | 27 | #include <qptrlist.h> |
28 | 28 | ||
29 | #include "tmpaddressbook.h" | 29 | #include "tmpaddressbook.h" |
30 | 30 | ||
31 | using namespace KABC; | 31 | using namespace KABC; |
32 | 32 | ||
33 | #include "resource.h" | 33 | #include "resource.h" |
34 | 34 | ||
35 | TmpAddressBook::TmpAddressBook() | 35 | TmpAddressBook::TmpAddressBook() |
36 | : AddressBook(0, "tmpcontact") | 36 | : AddressBook(0, "tmpcontact") |
37 | { | 37 | { |
38 | } | 38 | } |
39 | 39 | ||
40 | TmpAddressBook::TmpAddressBook( const QString &config ) | 40 | TmpAddressBook::TmpAddressBook( const QString &config ) |
41 | : AddressBook( config, "tmpcontact" ) | 41 | : AddressBook( config, "tmpcontact" ) |
42 | { | 42 | { |
43 | } | 43 | } |
44 | 44 | ||
45 | TmpAddressBook::~TmpAddressBook() | 45 | TmpAddressBook::~TmpAddressBook() |
46 | { | 46 | { |
47 | //remove all possible resources. This should cleanup the configfile. | 47 | removeResources(); |
48 | QPtrList<KABC::Resource> mResources = resources(); | ||
49 | |||
50 | QPtrListIterator<KABC::Resource> it(mResources); | ||
51 | for ( ; it.current(); ++it ) { | ||
52 | KABC::Resource *res = it.current(); | ||
53 | removeResource(res); | ||
54 | } | ||
55 | } | 48 | } |
56 | 49 | ||