kablock.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <klocale.h>
00025 #include <kmessagebox.h>
00026 #include <kstaticdeleter.h>
00027
00028 #include "kablock.h"
00029
00030 KABLock *KABLock::mSelf = 0;
00031
00032 static KStaticDeleter<KABLock> kabLockDeleter;
00033
00034 KABLock::KABLock( KABC::AddressBook *ab )
00035 : mAddressBook( ab )
00036 {
00037 }
00038
00039 KABLock::~KABLock()
00040 {
00041 }
00042
00043 KABLock *KABLock::self( KABC::AddressBook *ab )
00044 {
00045 if ( !mSelf )
00046 kabLockDeleter.setObject( mSelf, new KABLock( ab ) );
00047
00048 return mSelf;
00049 }
00050
00051 bool KABLock::lock( KABC::Resource *resource )
00052 {
00053 if ( mLocks.find( resource ) == mLocks.end() ) {
00054 KABC::Ticket *ticket = mAddressBook->requestSaveTicket( resource );
00055 if ( !ticket ) {
00056 return false;
00057 } else {
00058 LockEntry entry;
00059 entry.ticket = ticket;
00060 entry.counter = 1;
00061 mLocks.insert( resource, entry );
00062 }
00063 } else {
00064 LockEntry &entry = mLocks[ resource ];
00065 entry.counter++;
00066 }
00067
00068 return true;
00069 }
00070
00071 bool KABLock::unlock( KABC::Resource *resource )
00072 {
00073 if ( mLocks.find( resource ) == mLocks.end() ) {
00074 return false;
00075 } else {
00076 LockEntry &entry = mLocks[ resource ];
00077 entry.counter--;
00078
00079 if ( entry.counter == 0 ) {
00080 mAddressBook->save( entry.ticket );
00081
00082
00083
00084 mLocks.remove( resource );
00085 }
00086 }
00087
00088 return true;
00089 }
This file is part of the documentation for kaddressbook Library Version 3.2.2.