24 #include <kabc/addressbook.h>
25 #include <kabc/resource.h>
27 #include <kmessagebox.h>
28 #include <kstaticdeleter.h>
32 class AddressBookWrapper :
public KABC::AddressBook
35 AddressBookWrapper( KABC::AddressBook* );
37 KABC::Resource* getStandardResource()
39 return standardResource();
43 KABLock *KABLock::mSelf = 0;
45 static KStaticDeleter<KABLock> kabLockDeleter;
47 KABLock::KABLock( KABC::AddressBook *ab )
56 KABLock *KABLock::self( KABC::AddressBook *ab )
59 kabLockDeleter.setObject( mSelf,
new KABLock( ab ) );
61 mSelf->mAddressBook = ab;
66 bool KABLock::lock( KABC::Resource *resource )
68 if ( mLocks.find( resource ) == mLocks.end() ) {
69 KABC::Ticket *ticket = mAddressBook->requestSaveTicket( resource );
74 entry.ticket = ticket;
76 mLocks.insert( resource, entry );
79 LockEntry &entry = mLocks[ resource ];
86 bool KABLock::unlock( KABC::Resource *resource )
88 AddressBookWrapper *wrapper =
static_cast<AddressBookWrapper*
>( mAddressBook );
90 resource = wrapper->getStandardResource();
92 if ( mLocks.find( resource ) == mLocks.end() ) {
95 LockEntry &entry = mLocks[ resource ];
98 if ( entry.counter == 0 ) {
99 mAddressBook->save( entry.ticket );
103 mLocks.remove( resource );