summaryrefslogtreecommitdiffstats
path: root/kresources/groupwise/kabc_resourcegroupwise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kresources/groupwise/kabc_resourcegroupwise.cpp')
-rw-r--r--kresources/groupwise/kabc_resourcegroupwise.cpp743
1 files changed, 0 insertions, 743 deletions
diff --git a/kresources/groupwise/kabc_resourcegroupwise.cpp b/kresources/groupwise/kabc_resourcegroupwise.cpp
deleted file mode 100644
index b3930bfbe..000000000
--- a/kresources/groupwise/kabc_resourcegroupwise.cpp
+++ /dev/null
@@ -1,743 +0,0 @@
-/*
- This file is part of tdepim.
-
- Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org>
-
- 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.
-*/
-
-#include <tqapplication.h>
-#include <tqfile.h>
-
-#include <kabc/addressee.h>
-#include <kabc/vcardconverter.h>
-#include <kconfig.h>
-#include <kdebug.h>
-#include <klocale.h>
-
-#include "kabc_groupwiseprefs.h"
-
-#include "kabc_resourcegroupwise.h"
-
-using namespace KABC;
-
-ResourceGroupwise::ResourceGroupwise( const TDEConfig *config )
- : ResourceCached( config )
-{
- init();
-
- mPrefs->addGroupPrefix( identifier() );
-
- if ( config ) {
- readConfig( config );
- }
- initGroupwise();
-}
-
-ResourceGroupwise::ResourceGroupwise( const KURL &url,
- const TQString &user,
- const TQString &password,
- const TQStringList &readAddressBooks,
- const TQString &writeAddressBook )
- : ResourceCached( 0 )
-{
- init();
-
- mPrefs->addGroupPrefix( identifier() );
-
- mPrefs->setUrl( url.url() );
- mPrefs->setUser( user );
- mPrefs->setPassword( password );
- mPrefs->setReadAddressBooks( readAddressBooks );
- mPrefs->setWriteAddressBook( writeAddressBook );
-
- initGroupwise();
-}
-
-void ResourceGroupwise::init()
-{
- mJob = 0;
- mProgress = 0;
- mSABProgress = 0;
- mUABProgress = 0;
- mServerFirstSequence = 0;
- mServerLastSequence = 0;
- mServerLastPORebuildTime = 0;
- mPrefs = new GroupwisePrefs;
- mState = Start;
- setType( "groupwise" );
-}
-
-void ResourceGroupwise::initGroupwise()
-{
- mServer = new GroupwiseServer( mPrefs->url(), mPrefs->user(),
- mPrefs->password(), this );
-}
-
-ResourceGroupwise::~ResourceGroupwise()
-{
- delete mServer;
- mServer = 0;
-
- delete mPrefs;
- mPrefs = 0;
-}
-
-void ResourceGroupwise::readConfig( const TDEConfig * )
-{
- mPrefs->readConfig();
-
- readAddressBooks();
-}
-
-void ResourceGroupwise::writeConfig( TDEConfig *config )
-{
- Resource::writeConfig( config );
-
- writeAddressBooks();
-
- mPrefs->writeConfig();
-}
-
-void ResourceGroupwise::clearCache()
-{
- idMapper().clear();
- mAddrMap.clear();
- TQFile file( cacheFile() );
- file.remove();
-}
-
-void ResourceGroupwise::readAddressBooks()
-{
- TQStringList ids = prefs()->ids();
- TQStringList names = prefs()->names();
- TQStringList personals = prefs()->personals();
- TQStringList frequents = prefs()->frequents();
-
- if ( ids.count() != names.count() || ids.count() != personals.count() ||
- ids.count() != frequents.count() ) {
- kdError() << "Corrupt addressbook configuration" << endl;
- return;
- }
-
- mAddressBooks.clear();
-
- for( uint i = 0; i < ids.count(); ++i ) {
- GroupWise::AddressBook ab;
- ab.id = ids[ i ];
- ab.name = names[ i ];
- ab.isPersonal = personals[ i ] == "1";
- ab.isFrequentContacts = frequents[ i ] == "1";
-
- mAddressBooks.append( ab );
- }
-}
-
-void ResourceGroupwise::writeAddressBooks()
-{
- TQStringList ids;
- TQStringList names;
- TQStringList personals;
- TQStringList frequents;
- GroupWise::AddressBook::List::ConstIterator it;
- for( it = mAddressBooks.begin(); it != mAddressBooks.end(); ++it ) {
- ids.append( (*it).id );
- names.append( (*it).name );
- personals.append( (*it).isPersonal ? "1" : "0" );
- frequents.append( (*it).isFrequentContacts ? "1" : "0" );
- }
- prefs()->setIds( ids );
- prefs()->setNames( names );
- prefs()->setPersonals( personals );
- prefs()->setFrequents( frequents );
-}
-
-void ResourceGroupwise::retrieveAddressBooks()
-{
- bool firstRetrieve = mAddressBooks.isEmpty();
-
- GroupwiseServer server( prefs()->url(),
- prefs()->user(),
- prefs()->password(), this );
-
- if ( server.login() )
- {
- mAddressBooks = server.addressBookList();
- server.logout();
-
- TQStringList reads;
- TQString write;
-
- GroupWise::AddressBook::List::ConstIterator it;
- for( it = mAddressBooks.begin(); it != mAddressBooks.end(); ++it ) {
- reads.append( (*it).id );
- if ( (*it).isPersonal ) {
- if ( write.isEmpty() ) write = (*it).id;
- }
- else
- prefs()->setSystemAddressBook( (*it).id );
- }
-
- if ( firstRetrieve ) {
- prefs()->setReadAddressBooks( reads );
- prefs()->setWriteAddressBook( write );
- }
- }
- else
- emit loadingError( this, server.errorText() );
-}
-
-Ticket *ResourceGroupwise::requestSaveTicket()
-{
- if ( !addressBook() ) {
- kdDebug(5700) << "no addressbook" << endl;
- return 0;
- }
-
- return createTicket( this );
-}
-
-void ResourceGroupwise::releaseSaveTicket( Ticket *ticket )
-{
- delete ticket;
-}
-
-bool ResourceGroupwise::doOpen()
-{
- return true;
-}
-
-void ResourceGroupwise::doClose()
-{
- kdDebug() << "ResourceGroupwise::doClose()" << endl;
-
- cancelLoad();
-}
-
-bool ResourceGroupwise::save( Ticket *ticket )
-{
- return asyncSave( ticket );
-}
-
-bool ResourceGroupwise::asyncSave( Ticket* )
-{
- if ( !mServer->login() ) return false;
-
- KABC::Addressee::List::Iterator it;
-
- KABC::Addressee::List addedList = addedAddressees();
- for ( it = addedList.begin(); it != addedList.end(); ++it ) {
- if ( mServer->insertAddressee( mPrefs->writeAddressBook(), *it ) ) {
- clearChange( *it );
- idMapper().setRemoteId( (*it).uid(), (*it).custom( "GWRESOURCE", "UID" ) );
- }
- }
-
- KABC::Addressee::List changedList = changedAddressees();
- for ( it = changedList.begin(); it != changedList.end(); ++it ) {
- if ( mServer->changeAddressee( *it ) )
- clearChange( *it );
- }
-
- KABC::Addressee::List deletedList = deletedAddressees();
- for ( it = deletedList.begin(); it != deletedList.end(); ++it ) {
- if ( mServer->removeAddressee( *it ) )
- clearChange( *it );
- }
-
- if ( appIsWhiteListedForSAB() )
- saveCache();
-
- mServer->logout();
-
- return true;
-}
-
-bool ResourceGroupwise::load()
-{
- return asyncLoad();
-}
-
-bool ResourceGroupwise::asyncLoad()
-{
- kdDebug() << "ResourceGroupwise::asyncLoad()" << endl;
- //mPrefs->readConfig(); TODO: remove if the system addressbook is not read when disabled in config
-
- if ( mState != Start )
- {
- kdDebug() << " Download still in progress" << endl;
- return true;
- }
-
- if ( appIsWhiteListedForSAB() )
- loadCache();
-
- if ( !mProgress )
- {
- mProgress = KPIM::ProgressManager::instance()->createProgressItem(
- KPIM::ProgressManager::getUniqueID(), i18n( "Loading GroupWise resource %1" ).arg( resourceName() ), TQString(), true /*CanBeCancelled*/, mPrefs->url().startsWith("https" ) );
- connect( mProgress, TQT_SIGNAL( progressItemCanceled( KPIM::ProgressItem * ) ),
- TQT_SLOT( cancelLoad() ) );
- }
-
- if ( addressBooks().isEmpty() ) {
- kdDebug() << " Retrieving default addressbook list." << endl;
- retrieveAddressBooks();
- writeAddressBooks();
- }
-
- SABState sabState = systemAddressBookState();
- if ( shouldFetchSystemAddressBook() )
- {
- if ( sabState == RefreshNeeded )
- {
- kdDebug() << " Fetching system addressbook" << endl;
- fetchAddressBooks( System );
- return true;
- }
- else if ( sabState == Stale )
- {
- kdDebug() << " Updating system addressbook" << endl;
- updateSystemAddressBook(); // we then fetch the user address books after doing this
- return true;
- }
- }
- else if ( shouldFetchUserAddressBooks() )
- {
- kdDebug() << " Fetching user addressbook" << endl;
- fetchAddressBooks( User );
- return true;
- }
- return true;
-}
-
-void ResourceGroupwise::fetchAddressBooks( const BookType bookType )
-{
- KURL url = createAccessUrl( bookType, Fetch );
- if ( !url.isValid() )
- return;
-
- kdDebug() << k_funcinfo << ( bookType == System ? " System" : " User" ) << " URL: " << url << endl;
- // sanity check
- if ( bookType == User && !( mState == SABUptodate || mState == Start ) )
- {
- kdDebug() << " **ERROR** - fetchAddressBooks( User ) called when SAB not up to date" << endl;
- return;
- }
-
- mState = ( bookType == System ? FetchingSAB : FetchingUAB );
- mJobData = TQString();
-
- if ( mJob )
- {
- kdDebug() << " **ERROR** - fetchAddressBooks() called when a job was already running!" << endl;
- return;
- }
-
- mJob = TDEIO::get( url, false, false ); // TODO: make the GW jobs call finished if the URL
- // contains no address book IDs
- kdDebug() << " Job address: " << mJob << endl;
- connect( mJob, TQT_SIGNAL( data( TDEIO::Job *, const TQByteArray & ) ),
- TQT_SLOT( slotReadJobData( TDEIO::Job *, const TQByteArray & ) ) );
- connect( mJob, TQT_SIGNAL( percent( TDEIO::Job *, unsigned long ) ),
- TQT_SLOT( slotJobPercent( TDEIO::Job *, unsigned long ) ) );
-
- if ( bookType == System )
- {
- connect( mJob, TQT_SIGNAL( result( TDEIO::Job * ) ),
- TQT_SLOT( fetchSABResult( TDEIO::Job * ) ) );
- mSABProgress = KPIM::ProgressManager::instance()->createProgressItem(
- mProgress, KPIM::ProgressManager::getUniqueID(),
- i18n( "Fetching System Address Book" ), TQString(),
- false /*CannotBeCancelled*/,
- mPrefs->url().startsWith("https" ) );
- }
- else
- {
- connect( mJob, TQT_SIGNAL( result( TDEIO::Job * ) ),
- TQT_SLOT( fetchUABResult( TDEIO::Job * ) ) );
- mUABProgress = KPIM::ProgressManager::instance()->createProgressItem(
- mProgress, KPIM::ProgressManager::getUniqueID(),
- i18n( "Fetching User Address Books" ), TQString(),
- false /*CannotBeCancelled*/,
- mPrefs->url().startsWith("https" ) );
- }
-
- return;
-}
-
-void ResourceGroupwise::fetchSABResult( TDEIO::Job *job )
-{
- kdDebug() << "ResourceGroupwise::fetchSABResult() " << endl;
-
- if ( job->error() ) {
- kdError() << job->errorString() << endl;
- emit loadingError( this, job->errorString() );
- // TODO kill the rest of the load sequence as well
- }
-
- mJob->disconnect( this );
- mJob = 0;
- mState = SABUptodate;
- if ( mSABProgress )
- mSABProgress->setComplete();
-
- storeDeltaInfo();
-
- if ( shouldFetchUserAddressBooks() )
- fetchAddressBooks( User );
- else
- loadCompleted();
-}
-
-void ResourceGroupwise::fetchUABResult( TDEIO::Job *job )
-{
- kdDebug() << "ResourceGroupwise::fetchUABResult() " << endl;
-
- if ( job->error() ) {
- kdError() << job->errorString() << endl;
- emit loadingError( this, job->errorString() );
- }
-
- mJob->disconnect( this );
- mJob = 0;
- mState = Uptodate;
- if ( mUABProgress )
- mUABProgress->setComplete();
- loadCompleted();
-}
-
-void ResourceGroupwise::updateSystemAddressBook()
-{
- kdDebug() << "ResourceGroupwise::updateSystemAddressBook()" << endl;
-
- if ( mState != Start ) {
- kdWarning() << " Action already in progress" << endl;
- return;
- }
-
- if ( addressBooks().isEmpty() ) {
- kdDebug() << " Retrieving default addressbook list." << endl;
- retrieveAddressBooks();
- writeAddressBooks();
- }
-
- KURL url = createAccessUrl( System, Update, mPrefs->lastSequenceNumber(), mPrefs->lastTimePORebuild() );
- kdDebug() << " Update URL: " << url << endl;
-
- mJobData = TQString();
- mSABProgress = KPIM::ProgressManager::instance()->createProgressItem(
- mProgress, KPIM::ProgressManager::getUniqueID(),
- i18n( "Updating System Address Book" ), TQString(),
- false /*CannotBeCancelled*/,
- mPrefs->url().startsWith("https" ) );
-
- mJob = TDEIO::get( url, false, false );
- mJob->setInteractive( false );
- connect( mJob, TQT_SIGNAL( result( TDEIO::Job * ) ),
- TQT_SLOT( updateSABResult( TDEIO::Job * ) ) );
- connect( mJob, TQT_SIGNAL( data( TDEIO::Job *, const TQByteArray & ) ),
- TQT_SLOT( slotUpdateJobData( TDEIO::Job *, const TQByteArray & ) ) );
- connect( mJob, TQT_SIGNAL( percent( TDEIO::Job *, unsigned long ) ),
- TQT_SLOT( slotJobPercent( TDEIO::Job *, unsigned long ) ) );
-
- return;
-}
-
-void ResourceGroupwise::updateSABResult( TDEIO::Job *job )
-{
- kdDebug() << "ResourceGroupwise::updateSABResult() " << endl;
-
- mSABProgress->setComplete();
- mSABProgress = 0;
- mJob->disconnect( this );
- mJob = 0;
-
- int errorCode = job->error();
- if ( errorCode != 0 ) {
- if ( errorCode == TDEIO::ERR_NO_CONTENT ) // we need to refresh the SAB
- {
- kdDebug() << " update SAB failed, fetching all of it again" << endl;
- mPrefs->setLastSequenceNumber( 0 );
- mPrefs->setFirstSequenceNumber( 0 );
- fetchAddressBooks( System );
- return;
- }
- }
-
- mState = SABUptodate;
- storeDeltaInfo();
-
- if ( shouldFetchUserAddressBooks() )
- fetchAddressBooks( User );
- else
- loadCompleted();
-}
-
-void ResourceGroupwise::slotReadJobData( TDEIO::Job *job , const TQByteArray &data )
-{
- kdDebug() << "ResourceGroupwise::slotReadJobData()" << endl;
- Q_UNUSED( job );
-
- mJobData.append( data.data() );
-
- KABC::VCardConverter conv;
- TQTime profile;
- profile.start();
- Addressee::List addressees = conv.parseVCards( mJobData );
- // kdDebug() << " parsed " << addressees.count() << " contacts in " << profile.elapsed() << "ms, now adding to resource..." << endl;
-
- Addressee::List::ConstIterator it;
- for( it = addressees.begin(); it != addressees.end(); ++it ) {
- KABC::Addressee addr = *it;
- if ( !addr.isEmpty() ) {
- addr.setResource( this );
-
- TQString remote = addr.custom( "GWRESOURCE", "UID" );
- TQString local = idMapper().localId( remote );
- if ( local.isEmpty() ) {
- idMapper().setRemoteId( addr.uid(), remote );
- } else {
- addr.setUid( local );
- }
-
- insertAddressee( addr );
- clearChange( addr );
- }
- }
- mJobData = TQString();
-}
-
-void ResourceGroupwise::slotUpdateJobData( TDEIO::Job *job, const TQByteArray &data )
-{
- kdDebug() << "ResourceGroupwise::slotUpdateJobData()" << endl;
- kdDebug() << " Job address: " << job << endl;
- KABC::VCardConverter conv;
- mJobData.append( data.data() );
-
- Addressee::List addressees = conv.parseVCards( mJobData );
- Addressee::List::ConstIterator it;
-
- for( it = addressees.begin(); it != addressees.end(); ++it ) {
- KABC::Addressee addr = *it;
- if ( !addr.isEmpty() ) {
- // if added or changed
- TQString syncType = addr.custom( "GWRESOURCE", "SYNC" );
- TQString remote = addr.custom( "GWRESOURCE", "UID" );
- TQString local = idMapper().localId( remote );
-
- if ( syncType == "ADD" || syncType == "UPD" )
- {
- addr.setResource( this );
- if ( local.isEmpty() ) {
- idMapper().setRemoteId( addr.uid(), remote );
- } else {
- addr.setUid( local );
- }
-
- insertAddressee( addr );
- clearChange( addr );
- }
- else if ( syncType == "DEL" )
- {
- // if deleted
- if ( !remote.isEmpty() )
- {
- if ( !local.isEmpty() )
- {
- idMapper().removeRemoteId( remote );
- KABC::Addressee addrToDelete = findByUid( local );
- removeAddressee( addrToDelete );
- }
- }
- else
- kdError() << "Addressee to delete did not have a remote UID, unable to find the corresponding local contact" << endl;
- }
- }
- }
- mJobData = TQString();
-}
-
-void ResourceGroupwise::loadCompleted()
-{
- kdDebug() << "ResourceGroupwise::loadCompleted()" << endl;
- if ( mProgress )
- mProgress->setComplete();
- mProgress = 0;
- mSABProgress = 0;
- mUABProgress = 0;
- mState = Start;
- if ( appIsWhiteListedForSAB() )
- saveCache();
- emit loadingFinished( this );
- addressBook()->emitAddressBookChanged();
-}
-
-void ResourceGroupwise::slotJobPercent( TDEIO::Job *, unsigned long percent )
-{
- // TODO: make this act on the correct progress item
- kdDebug() << "ResourceGroupwise::slotJobPercent() " << percent << endl;
- if ( mProgress ) mProgress->setProgress( percent );
-}
-
-void ResourceGroupwise::cancelLoad()
-{
- if ( mJob )
- {
- mJob->disconnect( this );
- mJob->kill();
- }
- mJob = 0;
- if ( mProgress ) mProgress->setComplete();
- mProgress = 0;
- mState = Start;
-}
-
-ResourceGroupwise::SABState ResourceGroupwise::systemAddressBookState()
-{
- unsigned long storedFirstSequence = mPrefs->firstSequenceNumber();
- unsigned long storedLastSequence = mPrefs->lastSequenceNumber();
- unsigned long storedLastPORebuildTime = mPrefs->lastTimePORebuild();
-
- kdDebug() << "ResourceGroupwise::systemAddressBookState()" << endl;
- kdDebug() << " Stored first seq no: " << storedFirstSequence << endl;
- kdDebug() << " Stored last seq no: " << storedLastSequence << endl;
- kdDebug() << " Stored last PO Rebuild time: " << storedLastPORebuildTime << endl;
-
- kdDebug() << " Fetching delta info to check if update possible" << endl;
- if ( mServer->login() )
- {
- GroupWise::DeltaInfo deltaInfo = mServer->getDeltaInfo( mPrefs->systemAddressBook() );
- mServer->logout();
-
- mServerFirstSequence = deltaInfo.firstSequence;
- mServerLastSequence = deltaInfo.lastSequence;
- mServerLastPORebuildTime = deltaInfo.lastTimePORebuild;
-
- kdDebug() << " Server first seq no: " << mServerFirstSequence << endl;
- kdDebug() << " Server last seq no: " << mServerLastSequence << endl;
- kdDebug() << " Server last PO Rebuild time: " << mServerLastPORebuildTime << endl;
-
- if ( storedFirstSequence == 0 || storedLastSequence == 0 )
- {
- kdDebug() << " no fetched SAB exists yet, can't update" << endl;
- return RefreshNeeded;
- }
-
- if ( mServerFirstSequence > storedLastSequence || storedLastPORebuildTime != mServerLastPORebuildTime)
- {
- kdDebug() << " New entries since the last fetch are no longer available as deltas, or the PO was rebuilt, refresh needed" << endl;
- return RefreshNeeded;
- }
-
- if ( mServerLastSequence == storedLastSequence )
- {
- kdDebug() << " The local data is up to date" << endl;
- return InSync;
- }
- }
- else
- emit loadingError( this, mServer->errorText() );
-
- if ( storedFirstSequence == 0 || storedLastSequence == 0 )
- {
- kdDebug() << " Fallthrough - no fetched SAB exists yet, refresh" << endl;
- return RefreshNeeded;
- }
- else
- kdDebug() << " Fallthrough - returning Stale" << endl;
- return Stale;
-}
-
-bool ResourceGroupwise::shouldFetchSystemAddressBook()
-{
-
- TQStringList ids = mPrefs->readAddressBooks();
- return ( appIsWhiteListedForSAB() && ids.find( mPrefs->systemAddressBook() ) != ids.end() );
-}
-
-bool ResourceGroupwise::shouldFetchUserAddressBooks()
-{
- TQStringList ids = mPrefs->readAddressBooks();
- return ( ids.count() > 1 || ids.find( mPrefs->systemAddressBook() ) == ids.end() );
-}
-
-KURL ResourceGroupwise::createAccessUrl( BookType bookType, AccessMode mode, unsigned long lastSequenceNumber, unsigned long lastPORebuildTime )
-{
- // set up list of address book IDs to fetch
- TQStringList ids;
- if ( bookType == System )
- ids.append( mPrefs->systemAddressBook() );
- else
- {
- ids = mPrefs->readAddressBooks();
- ids.remove( mPrefs->systemAddressBook() );
- }
-
- if ( ids.isEmpty() )
- return KURL();
-
- KURL url( prefs()->url() );
- if ( url.protocol() == "http" )
- url.setProtocol( "groupwise" );
- else
- url.setProtocol( "groupwises" );
-
- url.setPath( url.path() + "/addressbook/" );
- url.setUser( prefs()->user() );
- url.setPass( prefs()->password() );
-
- TQString query = "?";
- TQStringList::ConstIterator it;
- for( it = ids.begin(); it != ids.end(); ++it ) {
- if ( it != ids.begin() ) query += "&";
- query += "addressbookid=" + *it;
- }
-
- if ( mode == Update && lastSequenceNumber > 0 && lastPORebuildTime > 0 )
- {
- query += TQString::fromLatin1( "&update=true&lastSeqNo=%1&PORebuildTime=%2" ).arg( lastSequenceNumber ).arg( lastPORebuildTime );;
- }
- url.setQuery( query );
- return url;
-}
-
-void ResourceGroupwise::storeDeltaInfo()
-{
- // update SAB delta info
- kdDebug() << "ResourceGroupwise::storeDeltaInfo()" << endl;
- kdDebug() << " Server first seq no: " << mServerFirstSequence << endl;
- kdDebug() << " Server last seq no: " << mServerLastSequence << endl;
- kdDebug() << " Server last PO Rebuild time: " << mServerLastPORebuildTime << endl;
-
- if ( mServerFirstSequence == 0 || mServerLastSequence == 0 || mServerLastPORebuildTime == 0 )
- return;
- mPrefs->setFirstSequenceNumber( mServerFirstSequence );
- mPrefs->setLastSequenceNumber( mServerLastSequence );
- mPrefs->setLastTimePORebuild( mServerLastPORebuildTime );
- mPrefs->writeConfig();
-}
-
-bool ResourceGroupwise::appIsWhiteListedForSAB()
-{
- if ( !mPrefs->systemAddressBookWhiteList().contains( tqApp->argv()[ 0 ] ) )
- {
- kdDebug() << "Application " << tqApp->argv()[ 0 ] << " is _blacklisted_ to load the SAB" << endl;
- return false;
- }
- return true;
-}
-
-#include "kabc_resourcegroupwise.moc"