summaryrefslogtreecommitdiffabout
path: root/kabc/addressbook.cpp
Unidiff
Diffstat (limited to 'kabc/addressbook.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 6e8d027..3ec0795 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -1,777 +1,778 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28/*US 28/*US
29 29
30#include <qfile.h> 30#include <qfile.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qtimer.h> 32#include <qtimer.h>
33 33
34#include <kapplication.h> 34#include <kapplication.h>
35#include <kinstance.h> 35#include <kinstance.h>
36#include <kstandarddirs.h> 36#include <kstandarddirs.h>
37 37
38#include "errorhandler.h" 38#include "errorhandler.h"
39*/ 39*/
40#include <qptrlist.h> 40#include <qptrlist.h>
41 41
42#include <kglobal.h> 42#include <kglobal.h>
43#include <klocale.h> 43#include <klocale.h>
44#include <kdebug.h> 44#include <kdebug.h>
45#include <libkcal/syncdefines.h> 45#include <libkcal/syncdefines.h>
46#include "addressbook.h" 46#include "addressbook.h"
47#include "resource.h" 47#include "resource.h"
48 48
49//US #include "addressbook.moc" 49//US #include "addressbook.moc"
50 50
51using namespace KABC; 51using namespace KABC;
52 52
53struct AddressBook::AddressBookData 53struct AddressBook::AddressBookData
54{ 54{
55 Addressee::List mAddressees; 55 Addressee::List mAddressees;
56 Addressee::List mRemovedAddressees; 56 Addressee::List mRemovedAddressees;
57 Field::List mAllFields; 57 Field::List mAllFields;
58 KConfig *mConfig; 58 KConfig *mConfig;
59 KRES::Manager<Resource> *mManager; 59 KRES::Manager<Resource> *mManager;
60//US ErrorHandler *mErrorHandler; 60//US ErrorHandler *mErrorHandler;
61}; 61};
62 62
63struct AddressBook::Iterator::IteratorData 63struct AddressBook::Iterator::IteratorData
64{ 64{
65 Addressee::List::Iterator mIt; 65 Addressee::List::Iterator mIt;
66}; 66};
67 67
68struct AddressBook::ConstIterator::ConstIteratorData 68struct AddressBook::ConstIterator::ConstIteratorData
69{ 69{
70 Addressee::List::ConstIterator mIt; 70 Addressee::List::ConstIterator mIt;
71}; 71};
72 72
73AddressBook::Iterator::Iterator() 73AddressBook::Iterator::Iterator()
74{ 74{
75 d = new IteratorData; 75 d = new IteratorData;
76} 76}
77 77
78AddressBook::Iterator::Iterator( const AddressBook::Iterator &i ) 78AddressBook::Iterator::Iterator( const AddressBook::Iterator &i )
79{ 79{
80 d = new IteratorData; 80 d = new IteratorData;
81 d->mIt = i.d->mIt; 81 d->mIt = i.d->mIt;
82} 82}
83 83
84AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i ) 84AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i )
85{ 85{
86 if( this == &i ) return *this; // guard against self assignment 86 if( this == &i ) return *this; // guard against self assignment
87 delete d; // delete the old data the Iterator was completely constructed before 87 delete d; // delete the old data the Iterator was completely constructed before
88 d = new IteratorData; 88 d = new IteratorData;
89 d->mIt = i.d->mIt; 89 d->mIt = i.d->mIt;
90 return *this; 90 return *this;
91} 91}
92 92
93AddressBook::Iterator::~Iterator() 93AddressBook::Iterator::~Iterator()
94{ 94{
95 delete d; 95 delete d;
96} 96}
97 97
98const Addressee &AddressBook::Iterator::operator*() const 98const Addressee &AddressBook::Iterator::operator*() const
99{ 99{
100 return *(d->mIt); 100 return *(d->mIt);
101} 101}
102 102
103Addressee &AddressBook::Iterator::operator*() 103Addressee &AddressBook::Iterator::operator*()
104{ 104{
105 return *(d->mIt); 105 return *(d->mIt);
106} 106}
107 107
108Addressee *AddressBook::Iterator::operator->() 108Addressee *AddressBook::Iterator::operator->()
109{ 109{
110 return &(*(d->mIt)); 110 return &(*(d->mIt));
111} 111}
112 112
113AddressBook::Iterator &AddressBook::Iterator::operator++() 113AddressBook::Iterator &AddressBook::Iterator::operator++()
114{ 114{
115 (d->mIt)++; 115 (d->mIt)++;
116 return *this; 116 return *this;
117} 117}
118 118
119AddressBook::Iterator &AddressBook::Iterator::operator++(int) 119AddressBook::Iterator &AddressBook::Iterator::operator++(int)
120{ 120{
121 (d->mIt)++; 121 (d->mIt)++;
122 return *this; 122 return *this;
123} 123}
124 124
125AddressBook::Iterator &AddressBook::Iterator::operator--() 125AddressBook::Iterator &AddressBook::Iterator::operator--()
126{ 126{
127 (d->mIt)--; 127 (d->mIt)--;
128 return *this; 128 return *this;
129} 129}
130 130
131AddressBook::Iterator &AddressBook::Iterator::operator--(int) 131AddressBook::Iterator &AddressBook::Iterator::operator--(int)
132{ 132{
133 (d->mIt)--; 133 (d->mIt)--;
134 return *this; 134 return *this;
135} 135}
136 136
137bool AddressBook::Iterator::operator==( const Iterator &it ) 137bool AddressBook::Iterator::operator==( const Iterator &it )
138{ 138{
139 return ( d->mIt == it.d->mIt ); 139 return ( d->mIt == it.d->mIt );
140} 140}
141 141
142bool AddressBook::Iterator::operator!=( const Iterator &it ) 142bool AddressBook::Iterator::operator!=( const Iterator &it )
143{ 143{
144 return ( d->mIt != it.d->mIt ); 144 return ( d->mIt != it.d->mIt );
145} 145}
146 146
147 147
148AddressBook::ConstIterator::ConstIterator() 148AddressBook::ConstIterator::ConstIterator()
149{ 149{
150 d = new ConstIteratorData; 150 d = new ConstIteratorData;
151} 151}
152 152
153AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i ) 153AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i )
154{ 154{
155 d = new ConstIteratorData; 155 d = new ConstIteratorData;
156 d->mIt = i.d->mIt; 156 d->mIt = i.d->mIt;
157} 157}
158 158
159AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i ) 159AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i )
160{ 160{
161 if( this == &i ) return *this; // guard for self assignment 161 if( this == &i ) return *this; // guard for self assignment
162 delete d; // delete the old data because the Iterator was really constructed before 162 delete d; // delete the old data because the Iterator was really constructed before
163 d = new ConstIteratorData; 163 d = new ConstIteratorData;
164 d->mIt = i.d->mIt; 164 d->mIt = i.d->mIt;
165 return *this; 165 return *this;
166} 166}
167 167
168AddressBook::ConstIterator::~ConstIterator() 168AddressBook::ConstIterator::~ConstIterator()
169{ 169{
170 delete d; 170 delete d;
171} 171}
172 172
173const Addressee &AddressBook::ConstIterator::operator*() const 173const Addressee &AddressBook::ConstIterator::operator*() const
174{ 174{
175 return *(d->mIt); 175 return *(d->mIt);
176} 176}
177 177
178const Addressee* AddressBook::ConstIterator::operator->() const 178const Addressee* AddressBook::ConstIterator::operator->() const
179{ 179{
180 return &(*(d->mIt)); 180 return &(*(d->mIt));
181} 181}
182 182
183AddressBook::ConstIterator &AddressBook::ConstIterator::operator++() 183AddressBook::ConstIterator &AddressBook::ConstIterator::operator++()
184{ 184{
185 (d->mIt)++; 185 (d->mIt)++;
186 return *this; 186 return *this;
187} 187}
188 188
189AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int) 189AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int)
190{ 190{
191 (d->mIt)++; 191 (d->mIt)++;
192 return *this; 192 return *this;
193} 193}
194 194
195AddressBook::ConstIterator &AddressBook::ConstIterator::operator--() 195AddressBook::ConstIterator &AddressBook::ConstIterator::operator--()
196{ 196{
197 (d->mIt)--; 197 (d->mIt)--;
198 return *this; 198 return *this;
199} 199}
200 200
201AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int) 201AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int)
202{ 202{
203 (d->mIt)--; 203 (d->mIt)--;
204 return *this; 204 return *this;
205} 205}
206 206
207bool AddressBook::ConstIterator::operator==( const ConstIterator &it ) 207bool AddressBook::ConstIterator::operator==( const ConstIterator &it )
208{ 208{
209 return ( d->mIt == it.d->mIt ); 209 return ( d->mIt == it.d->mIt );
210} 210}
211 211
212bool AddressBook::ConstIterator::operator!=( const ConstIterator &it ) 212bool AddressBook::ConstIterator::operator!=( const ConstIterator &it )
213{ 213{
214 return ( d->mIt != it.d->mIt ); 214 return ( d->mIt != it.d->mIt );
215} 215}
216 216
217 217
218AddressBook::AddressBook() 218AddressBook::AddressBook()
219{ 219{
220 init(0, "contact"); 220 init(0, "contact");
221} 221}
222 222
223AddressBook::AddressBook( const QString &config ) 223AddressBook::AddressBook( const QString &config )
224{ 224{
225 init(config, "contact"); 225 init(config, "contact");
226} 226}
227 227
228AddressBook::AddressBook( const QString &config, const QString &family ) 228AddressBook::AddressBook( const QString &config, const QString &family )
229{ 229{
230 init(config, family); 230 init(config, family);
231 231
232} 232}
233 233
234// the default family is "contact" 234// the default family is "contact"
235void AddressBook::init(const QString &config, const QString &family ) 235void AddressBook::init(const QString &config, const QString &family )
236{ 236{
237 d = new AddressBookData; 237 d = new AddressBookData;
238 QString fami = family; 238 QString fami = family;
239 qDebug("new ab "); 239 qDebug("new ab ");
240 if (config != 0) { 240 if (config != 0) {
241 qDebug("config != 0 "); 241 qDebug("config != 0 ");
242 if ( family == "syncContact" ) { 242 if ( family == "syncContact" ) {
243 qDebug("creating sync config "); 243 qDebug("creating sync config ");
244 fami = "contact"; 244 fami = "contact";
245 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") ); 245 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") );
246 con->setGroup( "General" ); 246 con->setGroup( "General" );
247 con->writeEntry( "ResourceKeys", QString("sync") ); 247 con->writeEntry( "ResourceKeys", QString("sync") );
248 con->writeEntry( "Standard", QString("sync") ); 248 con->writeEntry( "Standard", QString("sync") );
249 con->setGroup( "Resource_sync" ); 249 con->setGroup( "Resource_sync" );
250 con->writeEntry( "FileFormat", QString("vcard") ); 250 con->writeEntry( "FileFormat", QString("vcard") );
251 con->writeEntry( "FileName", config ); 251 con->writeEntry( "FileName", config );
252 con->writeEntry( "ResourceIdentifier", QString("sync") ); 252 con->writeEntry( "ResourceIdentifier", QString("sync") );
253 con->writeEntry( "ResourceName", QString("sync_res") ); 253 con->writeEntry( "ResourceName", QString("sync_res") );
254 con->writeEntry( "ResourceType", QString("file") ); 254 con->writeEntry( "ResourceType", QString("file") );
255 //con->sync(); 255 //con->sync();
256 d->mConfig = con; 256 d->mConfig = con;
257 } 257 }
258 else 258 else
259 d->mConfig = new KConfig( locateLocal("config", config) ); 259 d->mConfig = new KConfig( locateLocal("config", config) );
260// qDebug("AddressBook::init 1 config=%s",config.latin1() ); 260// qDebug("AddressBook::init 1 config=%s",config.latin1() );
261 } 261 }
262 else { 262 else {
263 d->mConfig = 0; 263 d->mConfig = 0;
264// qDebug("AddressBook::init 1 config=0"); 264// qDebug("AddressBook::init 1 config=0");
265 } 265 }
266 266
267//US d->mErrorHandler = 0; 267//US d->mErrorHandler = 0;
268 d->mManager = new KRES::Manager<Resource>( fami, false ); 268 d->mManager = new KRES::Manager<Resource>( fami, false );
269 d->mManager->readConfig( d->mConfig ); 269 d->mManager->readConfig( d->mConfig );
270 if ( family == "syncContact" ) { 270 if ( family == "syncContact" ) {
271 KRES::Manager<Resource> *manager = d->mManager; 271 KRES::Manager<Resource> *manager = d->mManager;
272 KRES::Manager<Resource>::ActiveIterator it; 272 KRES::Manager<Resource>::ActiveIterator it;
273 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 273 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
274 (*it)->setAddressBook( this ); 274 (*it)->setAddressBook( this );
275 if ( !(*it)->open() ) 275 if ( !(*it)->open() )
276 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); 276 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
277 } 277 }
278 Resource *res = standardResource(); 278 Resource *res = standardResource();
279 if ( !res ) { 279 if ( !res ) {
280 qDebug("ERROR: no standard resource"); 280 qDebug("ERROR: no standard resource");
281 res = manager->createResource( "file" ); 281 res = manager->createResource( "file" );
282 if ( res ) 282 if ( res )
283 { 283 {
284 addResource( res ); 284 addResource( res );
285 } 285 }
286 else 286 else
287 qDebug(" No resource available!!!"); 287 qDebug(" No resource available!!!");
288 } 288 }
289 setStandardResource( res ); 289 setStandardResource( res );
290 manager->writeConfig(); 290 manager->writeConfig();
291 } 291 }
292 addCustomField( i18n( "Department" ), KABC::Field::Organization, 292 addCustomField( i18n( "Department" ), KABC::Field::Organization,
293 "X-Department", "KADDRESSBOOK" ); 293 "X-Department", "KADDRESSBOOK" );
294 addCustomField( i18n( "Profession" ), KABC::Field::Organization, 294 addCustomField( i18n( "Profession" ), KABC::Field::Organization,
295 "X-Profession", "KADDRESSBOOK" ); 295 "X-Profession", "KADDRESSBOOK" );
296 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 296 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
297 "X-AssistantsName", "KADDRESSBOOK" ); 297 "X-AssistantsName", "KADDRESSBOOK" );
298 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 298 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
299 "X-ManagersName", "KADDRESSBOOK" ); 299 "X-ManagersName", "KADDRESSBOOK" );
300 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 300 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
301 "X-SpousesName", "KADDRESSBOOK" ); 301 "X-SpousesName", "KADDRESSBOOK" );
302 addCustomField( i18n( "Office" ), KABC::Field::Personal, 302 addCustomField( i18n( "Office" ), KABC::Field::Personal,
303 "X-Office", "KADDRESSBOOK" ); 303 "X-Office", "KADDRESSBOOK" );
304 addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 304 addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
305 "X-IMAddress", "KADDRESSBOOK" ); 305 "X-IMAddress", "KADDRESSBOOK" );
306 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 306 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
307 "X-Anniversary", "KADDRESSBOOK" ); 307 "X-Anniversary", "KADDRESSBOOK" );
308 308
309 //US added this field to become compatible with Opie/qtopia addressbook 309 //US added this field to become compatible with Opie/qtopia addressbook
310 // values can be "female" or "male" or "". An empty field represents undefined. 310 // values can be "female" or "male" or "". An empty field represents undefined.
311 addCustomField( i18n( "Gender" ), KABC::Field::Personal, 311 addCustomField( i18n( "Gender" ), KABC::Field::Personal,
312 "X-Gender", "KADDRESSBOOK" ); 312 "X-Gender", "KADDRESSBOOK" );
313 addCustomField( i18n( "Children" ), KABC::Field::Personal, 313 addCustomField( i18n( "Children" ), KABC::Field::Personal,
314 "X-Children", "KADDRESSBOOK" ); 314 "X-Children", "KADDRESSBOOK" );
315 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 315 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
316 "X-FreeBusyUrl", "KADDRESSBOOK" ); 316 "X-FreeBusyUrl", "KADDRESSBOOK" );
317 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal, 317 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal,
318 "X-ExternalID", "KADDRESSBOOK" ); 318 "X-ExternalID", "KADDRESSBOOK" );
319} 319}
320 320
321AddressBook::~AddressBook() 321AddressBook::~AddressBook()
322{ 322{
323 delete d->mConfig; d->mConfig = 0; 323 delete d->mConfig; d->mConfig = 0;
324 delete d->mManager; d->mManager = 0; 324 delete d->mManager; d->mManager = 0;
325//US delete d->mErrorHandler; d->mErrorHandler = 0; 325//US delete d->mErrorHandler; d->mErrorHandler = 0;
326 delete d; d = 0; 326 delete d; d = 0;
327} 327}
328 328
329bool AddressBook::load() 329bool AddressBook::load()
330{ 330{
331 331
332 332
333 clear(); 333 clear();
334 334
335 KRES::Manager<Resource>::ActiveIterator it; 335 KRES::Manager<Resource>::ActiveIterator it;
336 bool ok = true; 336 bool ok = true;
337 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 337 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
338 if ( !(*it)->load() ) { 338 if ( !(*it)->load() ) {
339 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) ); 339 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) );
340 ok = false; 340 ok = false;
341 } 341 }
342 342
343 // mark all addressees as unchanged 343 // mark all addressees as unchanged
344 Addressee::List::Iterator addrIt; 344 Addressee::List::Iterator addrIt;
345 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) 345 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt )
346 (*addrIt).setChanged( false ); 346 (*addrIt).setChanged( false );
347 347
348 return ok; 348 return ok;
349} 349}
350 350
351bool AddressBook::save( Ticket *ticket ) 351bool AddressBook::save( Ticket *ticket )
352{ 352{
353 kdDebug(5700) << "AddressBook::save()"<< endl; 353 kdDebug(5700) << "AddressBook::save()"<< endl;
354 354
355 if ( ticket->resource() ) { 355 if ( ticket->resource() ) {
356 deleteRemovedAddressees(); 356 deleteRemovedAddressees();
357 return ticket->resource()->save( ticket ); 357 return ticket->resource()->save( ticket );
358 } 358 }
359 359
360 return false; 360 return false;
361} 361}
362bool AddressBook::saveAB() 362bool AddressBook::saveAB()
363{ 363{
364 bool ok = true; 364 bool ok = true;
365 365
366 deleteRemovedAddressees(); 366 deleteRemovedAddressees();
367 367
368 KRES::Manager<Resource>::ActiveIterator it; 368 KRES::Manager<Resource>::ActiveIterator it;
369 KRES::Manager<Resource> *manager = d->mManager; 369 KRES::Manager<Resource> *manager = d->mManager;
370 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 370 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
371 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 371 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
372 Ticket *ticket = requestSaveTicket( *it ); 372 Ticket *ticket = requestSaveTicket( *it );
373// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 373// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
374 if ( !ticket ) { 374 if ( !ticket ) {
375 error( i18n( "Unable to save to resource '%1'. It is locked." ) 375 error( i18n( "Unable to save to resource '%1'. It is locked." )
376 .arg( (*it)->resourceName() ) ); 376 .arg( (*it)->resourceName() ) );
377 return false; 377 return false;
378 } 378 }
379 379
380 //if ( !save( ticket ) ) 380 //if ( !save( ticket ) )
381 if ( ticket->resource() ) { 381 if ( ticket->resource() ) {
382 if ( ! ticket->resource()->save( ticket ) ) 382 if ( ! ticket->resource()->save( ticket ) )
383 ok = false; 383 ok = false;
384 } else 384 } else
385 ok = false; 385 ok = false;
386 386
387 } 387 }
388 } 388 }
389 return ok; 389 return ok;
390} 390}
391 391
392AddressBook::Iterator AddressBook::begin() 392AddressBook::Iterator AddressBook::begin()
393{ 393{
394 Iterator it = Iterator(); 394 Iterator it = Iterator();
395 it.d->mIt = d->mAddressees.begin(); 395 it.d->mIt = d->mAddressees.begin();
396 return it; 396 return it;
397} 397}
398 398
399AddressBook::ConstIterator AddressBook::begin() const 399AddressBook::ConstIterator AddressBook::begin() const
400{ 400{
401 ConstIterator it = ConstIterator(); 401 ConstIterator it = ConstIterator();
402 it.d->mIt = d->mAddressees.begin(); 402 it.d->mIt = d->mAddressees.begin();
403 return it; 403 return it;
404} 404}
405 405
406AddressBook::Iterator AddressBook::end() 406AddressBook::Iterator AddressBook::end()
407{ 407{
408 Iterator it = Iterator(); 408 Iterator it = Iterator();
409 it.d->mIt = d->mAddressees.end(); 409 it.d->mIt = d->mAddressees.end();
410 return it; 410 return it;
411} 411}
412 412
413AddressBook::ConstIterator AddressBook::end() const 413AddressBook::ConstIterator AddressBook::end() const
414{ 414{
415 ConstIterator it = ConstIterator(); 415 ConstIterator it = ConstIterator();
416 it.d->mIt = d->mAddressees.end(); 416 it.d->mIt = d->mAddressees.end();
417 return it; 417 return it;
418} 418}
419 419
420void AddressBook::clear() 420void AddressBook::clear()
421{ 421{
422 d->mAddressees.clear(); 422 d->mAddressees.clear();
423} 423}
424 424
425Ticket *AddressBook::requestSaveTicket( Resource *resource ) 425Ticket *AddressBook::requestSaveTicket( Resource *resource )
426{ 426{
427 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; 427 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl;
428 428
429 if ( !resource ) 429 if ( !resource )
430 { 430 {
431 qDebug("AddressBook::requestSaveTicket no resource" ); 431 qDebug("AddressBook::requestSaveTicket no resource" );
432 resource = standardResource(); 432 resource = standardResource();
433 } 433 }
434 434
435 KRES::Manager<Resource>::ActiveIterator it; 435 KRES::Manager<Resource>::ActiveIterator it;
436 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 436 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
437 if ( (*it) == resource ) { 437 if ( (*it) == resource ) {
438 if ( (*it)->readOnly() || !(*it)->isOpen() ) 438 if ( (*it)->readOnly() || !(*it)->isOpen() )
439 return 0; 439 return 0;
440 else 440 else
441 return (*it)->requestSaveTicket(); 441 return (*it)->requestSaveTicket();
442 } 442 }
443 } 443 }
444 444
445 return 0; 445 return 0;
446} 446}
447 447
448void AddressBook::insertAddressee( const Addressee &a ) 448void AddressBook::insertAddressee( const Addressee &a, bool setRev )
449{ 449{
450 Addressee::List::Iterator it; 450 Addressee::List::Iterator it;
451 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { 451 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
452 if ( a.uid() == (*it).uid() ) { 452 if ( a.uid() == (*it).uid() ) {
453 bool changed = false; 453 bool changed = false;
454 Addressee addr = a; 454 Addressee addr = a;
455 if ( addr != (*it) ) 455 if ( addr != (*it) )
456 changed = true; 456 changed = true;
457 457
458 (*it) = a; 458 (*it) = a;
459 if ( (*it).resource() == 0 ) 459 if ( (*it).resource() == 0 )
460 (*it).setResource( standardResource() ); 460 (*it).setResource( standardResource() );
461 461
462 if ( changed ) { 462 if ( changed ) {
463 (*it).setRevision( QDateTime::currentDateTime() ); 463 if ( setRev )
464 (*it).setRevision( QDateTime::currentDateTime() );
464 (*it).setChanged( true ); 465 (*it).setChanged( true );
465 } 466 }
466 467
467 return; 468 return;
468 } 469 }
469 } 470 }
470 d->mAddressees.append( a ); 471 d->mAddressees.append( a );
471 Addressee& addr = d->mAddressees.last(); 472 Addressee& addr = d->mAddressees.last();
472 if ( addr.resource() == 0 ) 473 if ( addr.resource() == 0 )
473 addr.setResource( standardResource() ); 474 addr.setResource( standardResource() );
474 475
475 addr.setChanged( true ); 476 addr.setChanged( true );
476} 477}
477 478
478void AddressBook::removeAddressee( const Addressee &a ) 479void AddressBook::removeAddressee( const Addressee &a )
479{ 480{
480 Iterator it; 481 Iterator it;
481 for ( it = begin(); it != end(); ++it ) { 482 for ( it = begin(); it != end(); ++it ) {
482 if ( a.uid() == (*it).uid() ) { 483 if ( a.uid() == (*it).uid() ) {
483 removeAddressee( it ); 484 removeAddressee( it );
484 return; 485 return;
485 } 486 }
486 } 487 }
487} 488}
488 489
489void AddressBook::removeAddressee( const Iterator &it ) 490void AddressBook::removeAddressee( const Iterator &it )
490{ 491{
491 d->mRemovedAddressees.append( (*it) ); 492 d->mRemovedAddressees.append( (*it) );
492 d->mAddressees.remove( it.d->mIt ); 493 d->mAddressees.remove( it.d->mIt );
493} 494}
494 495
495AddressBook::Iterator AddressBook::find( const Addressee &a ) 496AddressBook::Iterator AddressBook::find( const Addressee &a )
496{ 497{
497 Iterator it; 498 Iterator it;
498 for ( it = begin(); it != end(); ++it ) { 499 for ( it = begin(); it != end(); ++it ) {
499 if ( a.uid() == (*it).uid() ) { 500 if ( a.uid() == (*it).uid() ) {
500 return it; 501 return it;
501 } 502 }
502 } 503 }
503 return end(); 504 return end();
504} 505}
505 506
506Addressee AddressBook::findByUid( const QString &uid ) 507Addressee AddressBook::findByUid( const QString &uid )
507{ 508{
508 Iterator it; 509 Iterator it;
509 for ( it = begin(); it != end(); ++it ) { 510 for ( it = begin(); it != end(); ++it ) {
510 if ( uid == (*it).uid() ) { 511 if ( uid == (*it).uid() ) {
511 return *it; 512 return *it;
512 } 513 }
513 } 514 }
514 return Addressee(); 515 return Addressee();
515} 516}
516Addressee::List AddressBook::getExternLastSyncAddressees() 517Addressee::List AddressBook::getExternLastSyncAddressees()
517{ 518{
518 Addressee::List results; 519 Addressee::List results;
519 520
520 Iterator it; 521 Iterator it;
521 for ( it = begin(); it != end(); ++it ) { 522 for ( it = begin(); it != end(); ++it ) {
522 if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) { 523 if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) {
523 if ( (*it).familyName().left(3) == "E: " ) 524 if ( (*it).familyName().left(3) == "E: " )
524 results.append( *it ); 525 results.append( *it );
525 } 526 }
526 } 527 }
527 528
528 return results; 529 return results;
529} 530}
530void AddressBook::resetTempSyncStat() 531void AddressBook::resetTempSyncStat()
531{ 532{
532 Iterator it; 533 Iterator it;
533 for ( it = begin(); it != end(); ++it ) { 534 for ( it = begin(); it != end(); ++it ) {
534 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 535 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
535 } 536 }
536 537
537} 538}
538 539
539QStringList AddressBook:: uidList() 540QStringList AddressBook:: uidList()
540{ 541{
541 QStringList results; 542 QStringList results;
542 Iterator it; 543 Iterator it;
543 for ( it = begin(); it != end(); ++it ) { 544 for ( it = begin(); it != end(); ++it ) {
544 results.append( (*it).uid() ); 545 results.append( (*it).uid() );
545 } 546 }
546 return results; 547 return results;
547} 548}
548 549
549 550
550Addressee::List AddressBook::allAddressees() 551Addressee::List AddressBook::allAddressees()
551{ 552{
552 return d->mAddressees; 553 return d->mAddressees;
553} 554}
554 555
555Addressee::List AddressBook::findByName( const QString &name ) 556Addressee::List AddressBook::findByName( const QString &name )
556{ 557{
557 Addressee::List results; 558 Addressee::List results;
558 559
559 Iterator it; 560 Iterator it;
560 for ( it = begin(); it != end(); ++it ) { 561 for ( it = begin(); it != end(); ++it ) {
561 if ( name == (*it).realName() ) { 562 if ( name == (*it).realName() ) {
562 results.append( *it ); 563 results.append( *it );
563 } 564 }
564 } 565 }
565 566
566 return results; 567 return results;
567} 568}
568 569
569Addressee::List AddressBook::findByEmail( const QString &email ) 570Addressee::List AddressBook::findByEmail( const QString &email )
570{ 571{
571 Addressee::List results; 572 Addressee::List results;
572 QStringList mailList; 573 QStringList mailList;
573 574
574 Iterator it; 575 Iterator it;
575 for ( it = begin(); it != end(); ++it ) { 576 for ( it = begin(); it != end(); ++it ) {
576 mailList = (*it).emails(); 577 mailList = (*it).emails();
577 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 578 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
578 if ( email == (*ite) ) { 579 if ( email == (*ite) ) {
579 results.append( *it ); 580 results.append( *it );
580 } 581 }
581 } 582 }
582 } 583 }
583 584
584 return results; 585 return results;
585} 586}
586 587
587Addressee::List AddressBook::findByCategory( const QString &category ) 588Addressee::List AddressBook::findByCategory( const QString &category )
588{ 589{
589 Addressee::List results; 590 Addressee::List results;
590 591
591 Iterator it; 592 Iterator it;
592 for ( it = begin(); it != end(); ++it ) { 593 for ( it = begin(); it != end(); ++it ) {
593 if ( (*it).hasCategory( category) ) { 594 if ( (*it).hasCategory( category) ) {
594 results.append( *it ); 595 results.append( *it );
595 } 596 }
596 } 597 }
597 598
598 return results; 599 return results;
599} 600}
600 601
601void AddressBook::dump() const 602void AddressBook::dump() const
602{ 603{
603 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 604 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
604 605
605 ConstIterator it; 606 ConstIterator it;
606 for( it = begin(); it != end(); ++it ) { 607 for( it = begin(); it != end(); ++it ) {
607 (*it).dump(); 608 (*it).dump();
608 } 609 }
609 610
610 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 611 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
611} 612}
612 613
613QString AddressBook::identifier() 614QString AddressBook::identifier()
614{ 615{
615 QStringList identifier; 616 QStringList identifier;
616 617
617 618
618 KRES::Manager<Resource>::ActiveIterator it; 619 KRES::Manager<Resource>::ActiveIterator it;
619 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 620 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
620 if ( !(*it)->identifier().isEmpty() ) 621 if ( !(*it)->identifier().isEmpty() )
621 identifier.append( (*it)->identifier() ); 622 identifier.append( (*it)->identifier() );
622 } 623 }
623 624
624 return identifier.join( ":" ); 625 return identifier.join( ":" );
625} 626}
626 627
627Field::List AddressBook::fields( int category ) 628Field::List AddressBook::fields( int category )
628{ 629{
629 if ( d->mAllFields.isEmpty() ) { 630 if ( d->mAllFields.isEmpty() ) {
630 d->mAllFields = Field::allFields(); 631 d->mAllFields = Field::allFields();
631 } 632 }
632 633
633 if ( category == Field::All ) return d->mAllFields; 634 if ( category == Field::All ) return d->mAllFields;
634 635
635 Field::List result; 636 Field::List result;
636 Field::List::ConstIterator it; 637 Field::List::ConstIterator it;
637 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 638 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
638 if ( (*it)->category() & category ) result.append( *it ); 639 if ( (*it)->category() & category ) result.append( *it );
639 } 640 }
640 641
641 return result; 642 return result;
642} 643}
643 644
644bool AddressBook::addCustomField( const QString &label, int category, 645bool AddressBook::addCustomField( const QString &label, int category,
645 const QString &key, const QString &app ) 646 const QString &key, const QString &app )
646{ 647{
647 if ( d->mAllFields.isEmpty() ) { 648 if ( d->mAllFields.isEmpty() ) {
648 d->mAllFields = Field::allFields(); 649 d->mAllFields = Field::allFields();
649 } 650 }
650//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 651//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
651 QString a = app.isNull() ? KGlobal::getAppName() : app; 652 QString a = app.isNull() ? KGlobal::getAppName() : app;
652 653
653 QString k = key.isNull() ? label : key; 654 QString k = key.isNull() ? label : key;
654 655
655 Field *field = Field::createCustomField( label, category, k, a ); 656 Field *field = Field::createCustomField( label, category, k, a );
656 657
657 if ( !field ) return false; 658 if ( !field ) return false;
658 659
659 d->mAllFields.append( field ); 660 d->mAllFields.append( field );
660 661
661 return true; 662 return true;
662} 663}
663 664
664QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 665QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
665{ 666{
666 if (!ab.d) return s; 667 if (!ab.d) return s;
667 668
668 return s << ab.d->mAddressees; 669 return s << ab.d->mAddressees;
669} 670}
670 671
671QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 672QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
672{ 673{
673 if (!ab.d) return s; 674 if (!ab.d) return s;
674 675
675 s >> ab.d->mAddressees; 676 s >> ab.d->mAddressees;
676 677
677 return s; 678 return s;
678} 679}
679 680
680bool AddressBook::addResource( Resource *resource ) 681bool AddressBook::addResource( Resource *resource )
681{ 682{
682 if ( !resource->open() ) { 683 if ( !resource->open() ) {
683 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 684 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
684 return false; 685 return false;
685 } 686 }
686 687
687 resource->setAddressBook( this ); 688 resource->setAddressBook( this );
688 689
689 d->mManager->add( resource ); 690 d->mManager->add( resource );
690 return true; 691 return true;
691} 692}
692 693
693bool AddressBook::removeResource( Resource *resource ) 694bool AddressBook::removeResource( Resource *resource )
694{ 695{
695 resource->close(); 696 resource->close();
696 697
697 if ( resource == standardResource() ) 698 if ( resource == standardResource() )
698 d->mManager->setStandardResource( 0 ); 699 d->mManager->setStandardResource( 0 );
699 700
700 resource->setAddressBook( 0 ); 701 resource->setAddressBook( 0 );
701 702
702 d->mManager->remove( resource ); 703 d->mManager->remove( resource );
703 return true; 704 return true;
704} 705}
705 706
706QPtrList<Resource> AddressBook::resources() 707QPtrList<Resource> AddressBook::resources()
707{ 708{
708 QPtrList<Resource> list; 709 QPtrList<Resource> list;
709 710
710// qDebug("AddressBook::resources() 1"); 711// qDebug("AddressBook::resources() 1");
711 712
712 KRES::Manager<Resource>::ActiveIterator it; 713 KRES::Manager<Resource>::ActiveIterator it;
713 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 714 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
714 list.append( *it ); 715 list.append( *it );
715 716
716 return list; 717 return list;
717} 718}
718 719
719/*US 720/*US
720void AddressBook::setErrorHandler( ErrorHandler *handler ) 721void AddressBook::setErrorHandler( ErrorHandler *handler )
721{ 722{
722 delete d->mErrorHandler; 723 delete d->mErrorHandler;
723 d->mErrorHandler = handler; 724 d->mErrorHandler = handler;
724} 725}
725*/ 726*/
726 727
727void AddressBook::error( const QString& msg ) 728void AddressBook::error( const QString& msg )
728{ 729{
729/*US 730/*US
730 if ( !d->mErrorHandler ) // create default error handler 731 if ( !d->mErrorHandler ) // create default error handler
731 d->mErrorHandler = new ConsoleErrorHandler; 732 d->mErrorHandler = new ConsoleErrorHandler;
732 733
733 if ( d->mErrorHandler ) 734 if ( d->mErrorHandler )
734 d->mErrorHandler->error( msg ); 735 d->mErrorHandler->error( msg );
735 else 736 else
736 kdError(5700) << "no error handler defined" << endl; 737 kdError(5700) << "no error handler defined" << endl;
737*/ 738*/
738 kdDebug(5700) << "msg" << endl; 739 kdDebug(5700) << "msg" << endl;
739 qDebug(msg); 740 qDebug(msg);
740} 741}
741 742
742void AddressBook::deleteRemovedAddressees() 743void AddressBook::deleteRemovedAddressees()
743{ 744{
744 Addressee::List::Iterator it; 745 Addressee::List::Iterator it;
745 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 746 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
746 Resource *resource = (*it).resource(); 747 Resource *resource = (*it).resource();
747 if ( resource && !resource->readOnly() && resource->isOpen() ) 748 if ( resource && !resource->readOnly() && resource->isOpen() )
748 resource->removeAddressee( *it ); 749 resource->removeAddressee( *it );
749 } 750 }
750 751
751 d->mRemovedAddressees.clear(); 752 d->mRemovedAddressees.clear();
752} 753}
753 754
754void AddressBook::setStandardResource( Resource *resource ) 755void AddressBook::setStandardResource( Resource *resource )
755{ 756{
756// qDebug("AddressBook::setStandardResource 1"); 757// qDebug("AddressBook::setStandardResource 1");
757 d->mManager->setStandardResource( resource ); 758 d->mManager->setStandardResource( resource );
758} 759}
759 760
760Resource *AddressBook::standardResource() 761Resource *AddressBook::standardResource()
761{ 762{
762 return d->mManager->standardResource(); 763 return d->mManager->standardResource();
763} 764}
764 765
765KRES::Manager<Resource> *AddressBook::resourceManager() 766KRES::Manager<Resource> *AddressBook::resourceManager()
766{ 767{
767 return d->mManager; 768 return d->mManager;
768} 769}
769 770
770void AddressBook::cleanUp() 771void AddressBook::cleanUp()
771{ 772{
772 KRES::Manager<Resource>::ActiveIterator it; 773 KRES::Manager<Resource>::ActiveIterator it;
773 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 774 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
774 if ( !(*it)->readOnly() && (*it)->isOpen() ) 775 if ( !(*it)->readOnly() && (*it)->isOpen() )
775 (*it)->cleanUp(); 776 (*it)->cleanUp();
776 } 777 }
777} 778}