~ubuntu-branches/ubuntu/oneiric/kdepim/oneiric-updates

« back to all changes in this revision

Viewing changes to kresources/lib/kabc_resourcegroupwarebase.cpp

  • Committer: Package Import Robot
  • Author(s): Philip Muškovac
  • Date: 2011-06-28 19:33:24 UTC
  • mfrom: (0.2.13) (0.1.13 sid)
  • Revision ID: package-import@ubuntu.com-20110628193324-8yvjs8sdv9rdoo6c
Tags: 4:4.7.0-0ubuntu1
* New upstream release
  - update install files
  - add missing kdepim-doc package to control file
  - Fix Vcs lines
  - kontact breaks/replaces korganizer << 4:4.6.80
  - tighten the dependency of kdepim-dev on libkdepim4 to fix lintian error

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
    This file is part of kdepim.
3
 
 
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>
7
 
 
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.
12
 
 
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.
17
 
 
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.
21
 
*/
22
 
 
23
 
#include "kabc_resourcegroupwarebase.h"
24
 
#include "kresources_groupwareprefs.h"
25
 
 
26
 
#include "folderlister.h"
27
 
#include "addressbookadaptor.h"
28
 
#include "groupwaredownloadjob.h"
29
 
#include "groupwareuploadjob.h"
30
 
 
31
 
#include <kabc/addressee.h>
32
 
#include <kabc/vcardconverter.h>
33
 
#include <klocale.h>
34
 
 
35
 
using namespace KABC;
36
 
 
37
 
ResourceGroupwareBase::ResourceGroupwareBase()
38
 
  : ResourceCached(),
39
 
    mPrefs(0), mFolderLister(0), mAdaptor(0), mDownloadJob(0), mUploadJob(0)
40
 
{
41
 
}
42
 
 
43
 
ResourceGroupwareBase::ResourceGroupwareBase( const KConfigGroup &group )
44
 
  : ResourceCached( group ),
45
 
    mPrefs(0), mFolderLister(0), mAdaptor(0), mDownloadJob(0), mUploadJob(0)
46
 
{
47
 
  readConfig( group );
48
 
}
49
 
 
50
 
ResourceGroupwareBase::~ResourceGroupwareBase()
51
 
{
52
 
  delete mPrefs;
53
 
  mPrefs = 0;
54
 
}
55
 
 
56
 
KPIM::GroupwareDownloadJob *ResourceGroupwareBase::createDownloadJob(
57
 
                            AddressBookAdaptor *adaptor )
58
 
{
59
 
  return new KPIM::GroupwareDownloadJob( adaptor );
60
 
}
61
 
 
62
 
KPIM::GroupwareUploadJob *ResourceGroupwareBase::createUploadJob(
63
 
                          AddressBookAdaptor *adaptor )
64
 
{
65
 
  return new KPIM::GroupwareUploadJob( adaptor );
66
 
}
67
 
 
68
 
void ResourceGroupwareBase::setPrefs( KPIM::GroupwarePrefsBase *newprefs )
69
 
{
70
 
  if ( !newprefs ) return;
71
 
  if ( mPrefs ) delete mPrefs;
72
 
  mPrefs = newprefs;
73
 
  mPrefs->addGroupPrefix( identifier() );
74
 
 
75
 
  mPrefs->readConfig();
76
 
  if ( mFolderLister ) mFolderLister->readConfig( mPrefs );
77
 
}
78
 
 
79
 
void ResourceGroupwareBase::setFolderLister( KPIM::FolderLister *folderLister )
80
 
{
81
 
  if ( !folderLister ) return;
82
 
  if ( mFolderLister ) delete mFolderLister;
83
 
  mFolderLister = folderLister;
84
 
  if ( mPrefs ) mFolderLister->readConfig( mPrefs );
85
 
  if ( mAdaptor ) {
86
 
    mAdaptor->setFolderLister( mFolderLister );
87
 
    mFolderLister->setAdaptor( mAdaptor );
88
 
  }
89
 
}
90
 
 
91
 
void ResourceGroupwareBase::setAdaptor( AddressBookAdaptor *adaptor )
92
 
{
93
 
  if ( !adaptor ) return;
94
 
  if ( mAdaptor ) delete mAdaptor;
95
 
  mAdaptor = adaptor;
96
 
  mAdaptor->setFolderLister( mFolderLister );
97
 
  if ( mFolderLister ) mFolderLister->setAdaptor( mAdaptor );
98
 
  mAdaptor->setDownloadProgressMessage( i18n("Downloading address book") );
99
 
  mAdaptor->setUploadProgressMessage( i18n("Uploading address book") );
100
 
  if ( prefs() ) {
101
 
    mAdaptor->setBaseURL( prefs()->url() );
102
 
    mAdaptor->setUser( prefs()->user() );
103
 
    mAdaptor->setPassword( prefs()->password() );
104
 
  }
105
 
  mAdaptor->setIdMapper( &idMapper() );
106
 
  mAdaptor->setResource( this );
107
 
}
108
 
 
109
 
void ResourceGroupwareBase::init()
110
 
{
111
 
  mDownloadJob = 0;
112
 
}
113
 
 
114
 
KPIM::GroupwarePrefsBase *ResourceGroupwareBase::createPrefs()
115
 
{
116
 
  return new KPIM::GroupwarePrefsBase();
117
 
}
118
 
 
119
 
 
120
 
 
121
 
void ResourceGroupwareBase::readConfig( const KConfigGroup & )
122
 
{
123
 
  kDebug(5700) <<"KABC::ResourceGroupwareBase::readConfig()";
124
 
//   ResourceCached::readConfig( group );
125
 
  if ( mPrefs ) {
126
 
    mPrefs->readConfig();
127
 
    if ( mFolderLister )
128
 
      mFolderLister->readConfig( mPrefs );
129
 
  }
130
 
}
131
 
 
132
 
void ResourceGroupwareBase::writeConfig( KConfigGroup &group )
133
 
{
134
 
  Resource::writeConfig( group );
135
 
 
136
 
  if ( mPrefs ) {
137
 
    if ( mFolderLister )
138
 
      mFolderLister->writeConfig( mPrefs );
139
 
    mPrefs->writeConfig();
140
 
  }
141
 
}
142
 
 
143
 
Ticket *ResourceGroupwareBase::requestSaveTicket()
144
 
{
145
 
  if ( !addressBook() ) {
146
 
    kDebug(5700) <<"no addressbook";
147
 
    return 0;
148
 
  }
149
 
 
150
 
  return createTicket( this );
151
 
}
152
 
 
153
 
void ResourceGroupwareBase::releaseSaveTicket( Ticket *ticket )
154
 
{
155
 
  delete ticket;
156
 
}
157
 
 
158
 
bool ResourceGroupwareBase::doOpen()
159
 
{
160
 
  return true;
161
 
}
162
 
 
163
 
void ResourceGroupwareBase::doClose()
164
 
{
165
 
  kDebug(5800) <<"ResourceGroupwareBase::doClose()";
166
 
 
167
 
  if ( mDownloadJob ) mDownloadJob->kill();
168
 
}
169
 
 
170
 
bool ResourceGroupwareBase::load()
171
 
{
172
 
  return asyncLoad();
173
 
}
174
 
 
175
 
bool ResourceGroupwareBase::asyncLoad()
176
 
{
177
 
  if ( mDownloadJob ) {
178
 
    kWarning() <<"Download still in progress";
179
 
    return false;
180
 
  }
181
 
 
182
 
  mAddrMap.clear();
183
 
  loadFromCache();
184
 
 
185
 
  mDownloadJob = createDownloadJob( mAdaptor );
186
 
  connect( mDownloadJob, SIGNAL( result( KPIM::GroupwareJob * ) ),
187
 
    SLOT( slotDownloadJobResult( KPIM::GroupwareJob * ) ) );
188
 
 
189
 
  return true;
190
 
}
191
 
 
192
 
void ResourceGroupwareBase::slotDownloadJobResult( KPIM::GroupwareJob *job )
193
 
{
194
 
  kDebug(5800) <<"ResourceGroupwareBase::slotJobResult():";
195
 
 
196
 
  if ( job->error() ) {
197
 
    kError() <<"job failed:" << job->errorString();
198
 
  } else {
199
 
    emit loadingFinished( this );
200
 
    if ( addressBook() )
201
 
      addressBook()->emitAddressBookChanged();
202
 
  }
203
 
 
204
 
  mDownloadJob = 0;
205
 
}
206
 
 
207
 
bool ResourceGroupwareBase::save( Ticket *ticket )
208
 
{
209
 
  return asyncSave( ticket );
210
 
}
211
 
 
212
 
bool ResourceGroupwareBase::asyncSave( Ticket* )
213
 
{
214
 
  if ( mUploadJob ) {
215
 
    // FIXME: If the user cancels, need to reset the mUploadJob variable to 0.
216
 
    kWarning() <<"Upload still in progress.";
217
 
    return false;
218
 
  }
219
 
 
220
 
  mUploadJob = createUploadJob( mAdaptor );
221
 
  connect( mUploadJob, SIGNAL( result( KPIM::GroupwareJob * ) ),
222
 
    SLOT( slotUploadJobResult( KPIM::GroupwareJob * ) ) );
223
 
 
224
 
  KABC::Addressee::List addr;
225
 
  KABC::Addressee::List::Iterator it;
226
 
  KPIM::GroupwareUploadItem::List addedItems, changedItems, deletedItems;
227
 
 
228
 
  addr = addedAddressees();
229
 
  for( it = addr.begin(); it != addr.end(); ++it ) {
230
 
    addedItems.append( adaptor()->newUploadItem( *it,
231
 
                                           KPIM::GroupwareUploadItem::Added ) );
232
 
  }
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
235
 
  // on the server
236
 
  addr = changedAddressees();
237
 
  for( it = addr.begin(); it != addr.end(); ++it ) {
238
 
    changedItems.append( adaptor()->newUploadItem( *it,
239
 
                                         KPIM::GroupwareUploadItem::Changed ) );
240
 
  }
241
 
  addr = deletedAddressees();
242
 
  for( it = addr.begin(); it != addr.end(); ++it ) {
243
 
    deletedItems.append( adaptor()->newUploadItem( *it,
244
 
                                         KPIM::GroupwareUploadItem::Deleted ) );
245
 
  }
246
 
 
247
 
  mUploadJob->setAddedItems( addedItems );
248
 
  mUploadJob->setChangedItems( changedItems );
249
 
  mUploadJob->setDeletedItems( deletedItems );
250
 
 
251
 
  return true;
252
 
}
253
 
 
254
 
void ResourceGroupwareBase::slotUploadJobResult( KPIM::GroupwareJob *job )
255
 
{
256
 
  kDebug(5800) <<"ResourceGroupwareBase::slotJobResult():";
257
 
 
258
 
  if ( job->error() ) {
259
 
    kError() <<"job failed:" << job->errorString();
260
 
  } else {
261
 
    // FIXME
262
 
  }
263
 
 
264
 
  mUploadJob = 0;
265
 
}
266
 
 
267
 
 
268
 
#include "kabc_resourcegroupwarebase.moc"