summaryrefslogtreecommitdiffabout
path: root/kabc/addressbook.cpp
Unidiff
Diffstat (limited to 'kabc/addressbook.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index d03dea3..16e1653 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -1,783 +1,788 @@
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, bool setRev ) 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 if ( setRev && (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
454 return;
455 }
453 bool changed = false; 456 bool changed = false;
454 Addressee addr = a; 457 Addressee addr = a;
455 if ( addr != (*it) ) 458 if ( addr != (*it) )
456 changed = true; 459 changed = true;
457 460
458 (*it) = a; 461 (*it) = a;
459 if ( (*it).resource() == 0 ) 462 if ( (*it).resource() == 0 )
460 (*it).setResource( standardResource() ); 463 (*it).setResource( standardResource() );
461 464
462 if ( changed ) { 465 if ( changed ) {
463 if ( setRev ) { 466 if ( setRev ) {
467
464 // get rid of micro seconds 468 // get rid of micro seconds
465 QDateTime dt = QDateTime::currentDateTime(); 469 QDateTime dt = QDateTime::currentDateTime();
466 QTime t = dt.time(); 470 QTime t = dt.time();
467 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 471 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
468 (*it).setRevision( dt ); 472 (*it).setRevision( dt );
469 } 473 }
470 (*it).setChanged( true ); 474 (*it).setChanged( true );
471 } 475 }
472 476
473 return; 477 return;
474 } 478 }
475 } 479 }
476 d->mAddressees.append( a ); 480 d->mAddressees.append( a );
477 Addressee& addr = d->mAddressees.last(); 481 Addressee& addr = d->mAddressees.last();
478 if ( addr.resource() == 0 ) 482 if ( addr.resource() == 0 )
479 addr.setResource( standardResource() ); 483 addr.setResource( standardResource() );
480 484
481 addr.setChanged( true ); 485 addr.setChanged( true );
482} 486}
483 487
484void AddressBook::removeAddressee( const Addressee &a ) 488void AddressBook::removeAddressee( const Addressee &a )
485{ 489{
486 Iterator it; 490 Iterator it;
487 for ( it = begin(); it != end(); ++it ) { 491 for ( it = begin(); it != end(); ++it ) {
488 if ( a.uid() == (*it).uid() ) { 492 if ( a.uid() == (*it).uid() ) {
489 removeAddressee( it ); 493 removeAddressee( it );
490 return; 494 return;
491 } 495 }
492 } 496 }
493} 497}
494 498
495void AddressBook::removeAddressee( const Iterator &it ) 499void AddressBook::removeAddressee( const Iterator &it )
496{ 500{
497 d->mRemovedAddressees.append( (*it) ); 501 d->mRemovedAddressees.append( (*it) );
498 d->mAddressees.remove( it.d->mIt ); 502 d->mAddressees.remove( it.d->mIt );
499} 503}
500 504
501AddressBook::Iterator AddressBook::find( const Addressee &a ) 505AddressBook::Iterator AddressBook::find( const Addressee &a )
502{ 506{
503 Iterator it; 507 Iterator it;
504 for ( it = begin(); it != end(); ++it ) { 508 for ( it = begin(); it != end(); ++it ) {
505 if ( a.uid() == (*it).uid() ) { 509 if ( a.uid() == (*it).uid() ) {
506 return it; 510 return it;
507 } 511 }
508 } 512 }
509 return end(); 513 return end();
510} 514}
511 515
512Addressee AddressBook::findByUid( const QString &uid ) 516Addressee AddressBook::findByUid( const QString &uid )
513{ 517{
514 Iterator it; 518 Iterator it;
515 for ( it = begin(); it != end(); ++it ) { 519 for ( it = begin(); it != end(); ++it ) {
516 if ( uid == (*it).uid() ) { 520 if ( uid == (*it).uid() ) {
517 return *it; 521 return *it;
518 } 522 }
519 } 523 }
520 return Addressee(); 524 return Addressee();
521} 525}
522Addressee::List AddressBook::getExternLastSyncAddressees() 526Addressee::List AddressBook::getExternLastSyncAddressees()
523{ 527{
524 Addressee::List results; 528 Addressee::List results;
525 529
526 Iterator it; 530 Iterator it;
527 for ( it = begin(); it != end(); ++it ) { 531 for ( it = begin(); it != end(); ++it ) {
528 if ( (*it).uid().left( 20 ) == "last-syncAddressee-" ) { 532 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
529 if ( (*it).familyName().left(3) == "E: " ) 533 if ( (*it).familyName().left(3) == "E: " )
530 results.append( *it ); 534 results.append( *it );
531 } 535 }
532 } 536 }
533 537
534 return results; 538 return results;
535} 539}
536void AddressBook::resetTempSyncStat() 540void AddressBook::resetTempSyncStat()
537{ 541{
538 Iterator it; 542 Iterator it;
539 for ( it = begin(); it != end(); ++it ) { 543 for ( it = begin(); it != end(); ++it ) {
540 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 544 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
541 } 545 }
542 546
543} 547}
544 548
545QStringList AddressBook:: uidList() 549QStringList AddressBook:: uidList()
546{ 550{
547 QStringList results; 551 QStringList results;
548 Iterator it; 552 Iterator it;
549 for ( it = begin(); it != end(); ++it ) { 553 for ( it = begin(); it != end(); ++it ) {
550 results.append( (*it).uid() ); 554 results.append( (*it).uid() );
551 } 555 }
552 return results; 556 return results;
553} 557}
554 558
555 559
556Addressee::List AddressBook::allAddressees() 560Addressee::List AddressBook::allAddressees()
557{ 561{
558 return d->mAddressees; 562 return d->mAddressees;
563
559} 564}
560 565
561Addressee::List AddressBook::findByName( const QString &name ) 566Addressee::List AddressBook::findByName( const QString &name )
562{ 567{
563 Addressee::List results; 568 Addressee::List results;
564 569
565 Iterator it; 570 Iterator it;
566 for ( it = begin(); it != end(); ++it ) { 571 for ( it = begin(); it != end(); ++it ) {
567 if ( name == (*it).realName() ) { 572 if ( name == (*it).realName() ) {
568 results.append( *it ); 573 results.append( *it );
569 } 574 }
570 } 575 }
571 576
572 return results; 577 return results;
573} 578}
574 579
575Addressee::List AddressBook::findByEmail( const QString &email ) 580Addressee::List AddressBook::findByEmail( const QString &email )
576{ 581{
577 Addressee::List results; 582 Addressee::List results;
578 QStringList mailList; 583 QStringList mailList;
579 584
580 Iterator it; 585 Iterator it;
581 for ( it = begin(); it != end(); ++it ) { 586 for ( it = begin(); it != end(); ++it ) {
582 mailList = (*it).emails(); 587 mailList = (*it).emails();
583 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 588 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
584 if ( email == (*ite) ) { 589 if ( email == (*ite) ) {
585 results.append( *it ); 590 results.append( *it );
586 } 591 }
587 } 592 }
588 } 593 }
589 594
590 return results; 595 return results;
591} 596}
592 597
593Addressee::List AddressBook::findByCategory( const QString &category ) 598Addressee::List AddressBook::findByCategory( const QString &category )
594{ 599{
595 Addressee::List results; 600 Addressee::List results;
596 601
597 Iterator it; 602 Iterator it;
598 for ( it = begin(); it != end(); ++it ) { 603 for ( it = begin(); it != end(); ++it ) {
599 if ( (*it).hasCategory( category) ) { 604 if ( (*it).hasCategory( category) ) {
600 results.append( *it ); 605 results.append( *it );
601 } 606 }
602 } 607 }
603 608
604 return results; 609 return results;
605} 610}
606 611
607void AddressBook::dump() const 612void AddressBook::dump() const
608{ 613{
609 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 614 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
610 615
611 ConstIterator it; 616 ConstIterator it;
612 for( it = begin(); it != end(); ++it ) { 617 for( it = begin(); it != end(); ++it ) {
613 (*it).dump(); 618 (*it).dump();
614 } 619 }
615 620
616 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 621 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
617} 622}
618 623
619QString AddressBook::identifier() 624QString AddressBook::identifier()
620{ 625{
621 QStringList identifier; 626 QStringList identifier;
622 627
623 628
624 KRES::Manager<Resource>::ActiveIterator it; 629 KRES::Manager<Resource>::ActiveIterator it;
625 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 630 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
626 if ( !(*it)->identifier().isEmpty() ) 631 if ( !(*it)->identifier().isEmpty() )
627 identifier.append( (*it)->identifier() ); 632 identifier.append( (*it)->identifier() );
628 } 633 }
629 634
630 return identifier.join( ":" ); 635 return identifier.join( ":" );
631} 636}
632 637
633Field::List AddressBook::fields( int category ) 638Field::List AddressBook::fields( int category )
634{ 639{
635 if ( d->mAllFields.isEmpty() ) { 640 if ( d->mAllFields.isEmpty() ) {
636 d->mAllFields = Field::allFields(); 641 d->mAllFields = Field::allFields();
637 } 642 }
638 643
639 if ( category == Field::All ) return d->mAllFields; 644 if ( category == Field::All ) return d->mAllFields;
640 645
641 Field::List result; 646 Field::List result;
642 Field::List::ConstIterator it; 647 Field::List::ConstIterator it;
643 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 648 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
644 if ( (*it)->category() & category ) result.append( *it ); 649 if ( (*it)->category() & category ) result.append( *it );
645 } 650 }
646 651
647 return result; 652 return result;
648} 653}
649 654
650bool AddressBook::addCustomField( const QString &label, int category, 655bool AddressBook::addCustomField( const QString &label, int category,
651 const QString &key, const QString &app ) 656 const QString &key, const QString &app )
652{ 657{
653 if ( d->mAllFields.isEmpty() ) { 658 if ( d->mAllFields.isEmpty() ) {
654 d->mAllFields = Field::allFields(); 659 d->mAllFields = Field::allFields();
655 } 660 }
656//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 661//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
657 QString a = app.isNull() ? KGlobal::getAppName() : app; 662 QString a = app.isNull() ? KGlobal::getAppName() : app;
658 663
659 QString k = key.isNull() ? label : key; 664 QString k = key.isNull() ? label : key;
660 665
661 Field *field = Field::createCustomField( label, category, k, a ); 666 Field *field = Field::createCustomField( label, category, k, a );
662 667
663 if ( !field ) return false; 668 if ( !field ) return false;
664 669
665 d->mAllFields.append( field ); 670 d->mAllFields.append( field );
666 671
667 return true; 672 return true;
668} 673}
669 674
670QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 675QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
671{ 676{
672 if (!ab.d) return s; 677 if (!ab.d) return s;
673 678
674 return s << ab.d->mAddressees; 679 return s << ab.d->mAddressees;
675} 680}
676 681
677QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 682QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
678{ 683{
679 if (!ab.d) return s; 684 if (!ab.d) return s;
680 685
681 s >> ab.d->mAddressees; 686 s >> ab.d->mAddressees;
682 687
683 return s; 688 return s;
684} 689}
685 690
686bool AddressBook::addResource( Resource *resource ) 691bool AddressBook::addResource( Resource *resource )
687{ 692{
688 if ( !resource->open() ) { 693 if ( !resource->open() ) {
689 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 694 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
690 return false; 695 return false;
691 } 696 }
692 697
693 resource->setAddressBook( this ); 698 resource->setAddressBook( this );
694 699
695 d->mManager->add( resource ); 700 d->mManager->add( resource );
696 return true; 701 return true;
697} 702}
698 703
699bool AddressBook::removeResource( Resource *resource ) 704bool AddressBook::removeResource( Resource *resource )
700{ 705{
701 resource->close(); 706 resource->close();
702 707
703 if ( resource == standardResource() ) 708 if ( resource == standardResource() )
704 d->mManager->setStandardResource( 0 ); 709 d->mManager->setStandardResource( 0 );
705 710
706 resource->setAddressBook( 0 ); 711 resource->setAddressBook( 0 );
707 712
708 d->mManager->remove( resource ); 713 d->mManager->remove( resource );
709 return true; 714 return true;
710} 715}
711 716
712QPtrList<Resource> AddressBook::resources() 717QPtrList<Resource> AddressBook::resources()
713{ 718{
714 QPtrList<Resource> list; 719 QPtrList<Resource> list;
715 720
716// qDebug("AddressBook::resources() 1"); 721// qDebug("AddressBook::resources() 1");
717 722
718 KRES::Manager<Resource>::ActiveIterator it; 723 KRES::Manager<Resource>::ActiveIterator it;
719 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 724 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
720 list.append( *it ); 725 list.append( *it );
721 726
722 return list; 727 return list;
723} 728}
724 729
725/*US 730/*US
726void AddressBook::setErrorHandler( ErrorHandler *handler ) 731void AddressBook::setErrorHandler( ErrorHandler *handler )
727{ 732{
728 delete d->mErrorHandler; 733 delete d->mErrorHandler;
729 d->mErrorHandler = handler; 734 d->mErrorHandler = handler;
730} 735}
731*/ 736*/
732 737
733void AddressBook::error( const QString& msg ) 738void AddressBook::error( const QString& msg )
734{ 739{
735/*US 740/*US
736 if ( !d->mErrorHandler ) // create default error handler 741 if ( !d->mErrorHandler ) // create default error handler
737 d->mErrorHandler = new ConsoleErrorHandler; 742 d->mErrorHandler = new ConsoleErrorHandler;
738 743
739 if ( d->mErrorHandler ) 744 if ( d->mErrorHandler )
740 d->mErrorHandler->error( msg ); 745 d->mErrorHandler->error( msg );
741 else 746 else
742 kdError(5700) << "no error handler defined" << endl; 747 kdError(5700) << "no error handler defined" << endl;
743*/ 748*/
744 kdDebug(5700) << "msg" << endl; 749 kdDebug(5700) << "msg" << endl;
745 qDebug(msg); 750 qDebug(msg);
746} 751}
747 752
748void AddressBook::deleteRemovedAddressees() 753void AddressBook::deleteRemovedAddressees()
749{ 754{
750 Addressee::List::Iterator it; 755 Addressee::List::Iterator it;
751 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 756 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
752 Resource *resource = (*it).resource(); 757 Resource *resource = (*it).resource();
753 if ( resource && !resource->readOnly() && resource->isOpen() ) 758 if ( resource && !resource->readOnly() && resource->isOpen() )
754 resource->removeAddressee( *it ); 759 resource->removeAddressee( *it );
755 } 760 }
756 761
757 d->mRemovedAddressees.clear(); 762 d->mRemovedAddressees.clear();
758} 763}
759 764
760void AddressBook::setStandardResource( Resource *resource ) 765void AddressBook::setStandardResource( Resource *resource )
761{ 766{
762// qDebug("AddressBook::setStandardResource 1"); 767// qDebug("AddressBook::setStandardResource 1");
763 d->mManager->setStandardResource( resource ); 768 d->mManager->setStandardResource( resource );
764} 769}
765 770
766Resource *AddressBook::standardResource() 771Resource *AddressBook::standardResource()
767{ 772{
768 return d->mManager->standardResource(); 773 return d->mManager->standardResource();
769} 774}
770 775
771KRES::Manager<Resource> *AddressBook::resourceManager() 776KRES::Manager<Resource> *AddressBook::resourceManager()
772{ 777{
773 return d->mManager; 778 return d->mManager;
774} 779}
775 780
776void AddressBook::cleanUp() 781void AddressBook::cleanUp()
777{ 782{
778 KRES::Manager<Resource>::ActiveIterator it; 783 KRES::Manager<Resource>::ActiveIterator it;
779 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 784 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
780 if ( !(*it)->readOnly() && (*it)->isOpen() ) 785 if ( !(*it)->readOnly() && (*it)->isOpen() )
781 (*it)->cleanUp(); 786 (*it)->cleanUp();
782 } 787 }
783} 788}