2
This file is part of kdepim.
4
Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org>
5
Copyright (c) 2004 Till Adam <adam@kde.org>
6
Copyright (C) 2005 Reinhold Kainhofer <reinhold@kainhofer.com>
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
11
(at your option) any later version.
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23
#include "kabc_resourcegroupwarebase.h"
24
#include "kresources_groupwareprefs.h"
26
#include "folderlister.h"
27
#include "addressbookadaptor.h"
28
#include "groupwaredownloadjob.h"
29
#include "groupwareuploadjob.h"
31
#include <kabc/addressee.h>
32
#include <kabc/vcardconverter.h>
37
ResourceGroupwareBase::ResourceGroupwareBase()
39
mPrefs(0), mFolderLister(0), mAdaptor(0), mDownloadJob(0), mUploadJob(0)
43
ResourceGroupwareBase::ResourceGroupwareBase( const KConfigGroup &group )
44
: ResourceCached( group ),
45
mPrefs(0), mFolderLister(0), mAdaptor(0), mDownloadJob(0), mUploadJob(0)
50
ResourceGroupwareBase::~ResourceGroupwareBase()
56
KPIM::GroupwareDownloadJob *ResourceGroupwareBase::createDownloadJob(
57
AddressBookAdaptor *adaptor )
59
return new KPIM::GroupwareDownloadJob( adaptor );
62
KPIM::GroupwareUploadJob *ResourceGroupwareBase::createUploadJob(
63
AddressBookAdaptor *adaptor )
65
return new KPIM::GroupwareUploadJob( adaptor );
68
void ResourceGroupwareBase::setPrefs( KPIM::GroupwarePrefsBase *newprefs )
70
if ( !newprefs ) return;
71
if ( mPrefs ) delete mPrefs;
73
mPrefs->addGroupPrefix( identifier() );
76
if ( mFolderLister ) mFolderLister->readConfig( mPrefs );
79
void ResourceGroupwareBase::setFolderLister( KPIM::FolderLister *folderLister )
81
if ( !folderLister ) return;
82
if ( mFolderLister ) delete mFolderLister;
83
mFolderLister = folderLister;
84
if ( mPrefs ) mFolderLister->readConfig( mPrefs );
86
mAdaptor->setFolderLister( mFolderLister );
87
mFolderLister->setAdaptor( mAdaptor );
91
void ResourceGroupwareBase::setAdaptor( AddressBookAdaptor *adaptor )
93
if ( !adaptor ) return;
94
if ( mAdaptor ) delete mAdaptor;
96
mAdaptor->setFolderLister( mFolderLister );
97
if ( mFolderLister ) mFolderLister->setAdaptor( mAdaptor );
98
mAdaptor->setDownloadProgressMessage( i18n("Downloading address book") );
99
mAdaptor->setUploadProgressMessage( i18n("Uploading address book") );
101
mAdaptor->setBaseURL( prefs()->url() );
102
mAdaptor->setUser( prefs()->user() );
103
mAdaptor->setPassword( prefs()->password() );
105
mAdaptor->setIdMapper( &idMapper() );
106
mAdaptor->setResource( this );
109
void ResourceGroupwareBase::init()
114
KPIM::GroupwarePrefsBase *ResourceGroupwareBase::createPrefs()
116
return new KPIM::GroupwarePrefsBase();
121
void ResourceGroupwareBase::readConfig( const KConfigGroup & )
123
kDebug(5700) <<"KABC::ResourceGroupwareBase::readConfig()";
124
// ResourceCached::readConfig( group );
126
mPrefs->readConfig();
128
mFolderLister->readConfig( mPrefs );
132
void ResourceGroupwareBase::writeConfig( KConfigGroup &group )
134
Resource::writeConfig( group );
138
mFolderLister->writeConfig( mPrefs );
139
mPrefs->writeConfig();
143
Ticket *ResourceGroupwareBase::requestSaveTicket()
145
if ( !addressBook() ) {
146
kDebug(5700) <<"no addressbook";
150
return createTicket( this );
153
void ResourceGroupwareBase::releaseSaveTicket( Ticket *ticket )
158
bool ResourceGroupwareBase::doOpen()
163
void ResourceGroupwareBase::doClose()
165
kDebug(5800) <<"ResourceGroupwareBase::doClose()";
167
if ( mDownloadJob ) mDownloadJob->kill();
170
bool ResourceGroupwareBase::load()
175
bool ResourceGroupwareBase::asyncLoad()
177
if ( mDownloadJob ) {
178
kWarning() <<"Download still in progress";
185
mDownloadJob = createDownloadJob( mAdaptor );
186
connect( mDownloadJob, SIGNAL( result( KPIM::GroupwareJob * ) ),
187
SLOT( slotDownloadJobResult( KPIM::GroupwareJob * ) ) );
192
void ResourceGroupwareBase::slotDownloadJobResult( KPIM::GroupwareJob *job )
194
kDebug(5800) <<"ResourceGroupwareBase::slotJobResult():";
196
if ( job->error() ) {
197
kError() <<"job failed:" << job->errorString();
199
emit loadingFinished( this );
201
addressBook()->emitAddressBookChanged();
207
bool ResourceGroupwareBase::save( Ticket *ticket )
209
return asyncSave( ticket );
212
bool ResourceGroupwareBase::asyncSave( Ticket* )
215
// FIXME: If the user cancels, need to reset the mUploadJob variable to 0.
216
kWarning() <<"Upload still in progress.";
220
mUploadJob = createUploadJob( mAdaptor );
221
connect( mUploadJob, SIGNAL( result( KPIM::GroupwareJob * ) ),
222
SLOT( slotUploadJobResult( KPIM::GroupwareJob * ) ) );
224
KABC::Addressee::List addr;
225
KABC::Addressee::List::Iterator it;
226
KPIM::GroupwareUploadItem::List addedItems, changedItems, deletedItems;
228
addr = addedAddressees();
229
for( it = addr.begin(); it != addr.end(); ++it ) {
230
addedItems.append( adaptor()->newUploadItem( *it,
231
KPIM::GroupwareUploadItem::Added ) );
233
// TODO: Check if the item has changed on the server...
234
// In particular, check if the version we based our change on is still current
236
addr = changedAddressees();
237
for( it = addr.begin(); it != addr.end(); ++it ) {
238
changedItems.append( adaptor()->newUploadItem( *it,
239
KPIM::GroupwareUploadItem::Changed ) );
241
addr = deletedAddressees();
242
for( it = addr.begin(); it != addr.end(); ++it ) {
243
deletedItems.append( adaptor()->newUploadItem( *it,
244
KPIM::GroupwareUploadItem::Deleted ) );
247
mUploadJob->setAddedItems( addedItems );
248
mUploadJob->setChangedItems( changedItems );
249
mUploadJob->setDeletedItems( deletedItems );
254
void ResourceGroupwareBase::slotUploadJobResult( KPIM::GroupwareJob *job )
256
kDebug(5800) <<"ResourceGroupwareBase::slotJobResult():";
258
if ( job->error() ) {
259
kError() <<"job failed:" << job->errorString();
268
#include "kabc_resourcegroupwarebase.moc"