From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kaddressbook/kablock.cpp | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 kaddressbook/kablock.cpp (limited to 'kaddressbook/kablock.cpp') diff --git a/kaddressbook/kablock.cpp b/kaddressbook/kablock.cpp new file mode 100644 index 000000000..acb6c2870 --- /dev/null +++ b/kaddressbook/kablock.cpp @@ -0,0 +1,108 @@ +/* + This file is part of KAddressBook. + Copyright (c) 2003 Tobias Koenig + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include +#include +#include + +#include "kablock.h" + +class AddressBookWrapper : public KABC::AddressBook +{ + public: + AddressBookWrapper( KABC::AddressBook* ); + + KABC::Resource* getStandardResource() + { + return standardResource(); + } +}; + +KABLock *KABLock::mSelf = 0; + +static KStaticDeleter kabLockDeleter; + +KABLock::KABLock( KABC::AddressBook *ab ) + : mAddressBook( ab ) +{ +} + +KABLock::~KABLock() +{ +} + +KABLock *KABLock::self( KABC::AddressBook *ab ) +{ + if ( !mSelf ) + kabLockDeleter.setObject( mSelf, new KABLock( ab ) ); + else + mSelf->mAddressBook = ab; + + return mSelf; +} + +bool KABLock::lock( KABC::Resource *resource ) +{ + if ( mLocks.find( resource ) == mLocks.end() ) { // not locked yet + KABC::Ticket *ticket = mAddressBook->requestSaveTicket( resource ); + if ( !ticket ) { + return false; + } else { + LockEntry entry; + entry.ticket = ticket; + entry.counter = 1; + mLocks.insert( resource, entry ); + } + } else { + LockEntry &entry = mLocks[ resource ]; + entry.counter++; + } + + return true; +} + +bool KABLock::unlock( KABC::Resource *resource ) +{ + AddressBookWrapper *wrapper = static_cast( mAddressBook ); + if ( resource == 0 ) + resource = wrapper->getStandardResource(); + + if ( mLocks.find( resource ) == mLocks.end() ) { // hmm, not good... + return false; + } else { + LockEntry &entry = mLocks[ resource ]; + entry.counter--; + + if ( entry.counter == 0 ) { + mAddressBook->save( entry.ticket ); +// # Activate in KDE 4.0 +// mAddressBook->releaseSaveTicket( entry.ticket ); + + mLocks.remove( resource ); + } + } + + return true; +} -- cgit v1.2.1