summaryrefslogtreecommitdiffabout
path: root/kabc/addressbook.cpp
Unidiff
Diffstat (limited to 'kabc/addressbook.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 19c26eb..8882259 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -1,1199 +1,1199 @@
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#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qfile.h> 42#include <qfile.h>
43#include <qregexp.h> 43#include <qregexp.h>
44 44
45#include <kglobal.h> 45#include <kglobal.h>
46#include <klocale.h> 46#include <klocale.h>
47#include <kmessagebox.h> 47#include <kmessagebox.h>
48#include <kdebug.h> 48#include <kdebug.h>
49#include <libkcal/syncdefines.h> 49#include <libkcal/syncdefines.h>
50#include <libkdepim/phoneaccess.h> 50#include <libkdepim/phoneaccess.h>
51#include "addressbook.h" 51#include "addressbook.h"
52#include "resource.h" 52#include "resource.h"
53#include "vcardconverter.h" 53#include "vcardconverter.h"
54#include "vcardparser/vcardtool.h" 54#include "vcardparser/vcardtool.h"
55 55
56//US #include "addressbook.moc" 56//US #include "addressbook.moc"
57 57
58using namespace KABC; 58using namespace KABC;
59 59
60struct AddressBook::AddressBookData 60struct AddressBook::AddressBookData
61{ 61{
62 Addressee::List mAddressees; 62 Addressee::List mAddressees;
63 Addressee::List mRemovedAddressees; 63 Addressee::List mRemovedAddressees;
64 Field::List mAllFields; 64 Field::List mAllFields;
65 KConfig *mConfig; 65 KConfig *mConfig;
66 KRES::Manager<Resource> *mManager; 66 KRES::Manager<Resource> *mManager;
67//US ErrorHandler *mErrorHandler; 67//US ErrorHandler *mErrorHandler;
68}; 68};
69 69
70struct AddressBook::Iterator::IteratorData 70struct AddressBook::Iterator::IteratorData
71{ 71{
72 Addressee::List::Iterator mIt; 72 Addressee::List::Iterator mIt;
73}; 73};
74 74
75struct AddressBook::ConstIterator::ConstIteratorData 75struct AddressBook::ConstIterator::ConstIteratorData
76{ 76{
77 Addressee::List::ConstIterator mIt; 77 Addressee::List::ConstIterator mIt;
78}; 78};
79 79
80AddressBook::Iterator::Iterator() 80AddressBook::Iterator::Iterator()
81{ 81{
82 d = new IteratorData; 82 d = new IteratorData;
83} 83}
84 84
85AddressBook::Iterator::Iterator( const AddressBook::Iterator &i ) 85AddressBook::Iterator::Iterator( const AddressBook::Iterator &i )
86{ 86{
87 d = new IteratorData; 87 d = new IteratorData;
88 d->mIt = i.d->mIt; 88 d->mIt = i.d->mIt;
89} 89}
90 90
91AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i ) 91AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i )
92{ 92{
93 if( this == &i ) return *this; // guard against self assignment 93 if( this == &i ) return *this; // guard against self assignment
94 delete d; // delete the old data the Iterator was completely constructed before 94 delete d; // delete the old data the Iterator was completely constructed before
95 d = new IteratorData; 95 d = new IteratorData;
96 d->mIt = i.d->mIt; 96 d->mIt = i.d->mIt;
97 return *this; 97 return *this;
98} 98}
99 99
100AddressBook::Iterator::~Iterator() 100AddressBook::Iterator::~Iterator()
101{ 101{
102 delete d; 102 delete d;
103} 103}
104 104
105const Addressee &AddressBook::Iterator::operator*() const 105const Addressee &AddressBook::Iterator::operator*() const
106{ 106{
107 return *(d->mIt); 107 return *(d->mIt);
108} 108}
109 109
110Addressee &AddressBook::Iterator::operator*() 110Addressee &AddressBook::Iterator::operator*()
111{ 111{
112 return *(d->mIt); 112 return *(d->mIt);
113} 113}
114 114
115Addressee *AddressBook::Iterator::operator->() 115Addressee *AddressBook::Iterator::operator->()
116{ 116{
117 return &(*(d->mIt)); 117 return &(*(d->mIt));
118} 118}
119 119
120AddressBook::Iterator &AddressBook::Iterator::operator++() 120AddressBook::Iterator &AddressBook::Iterator::operator++()
121{ 121{
122 (d->mIt)++; 122 (d->mIt)++;
123 return *this; 123 return *this;
124} 124}
125 125
126AddressBook::Iterator &AddressBook::Iterator::operator++(int) 126AddressBook::Iterator &AddressBook::Iterator::operator++(int)
127{ 127{
128 (d->mIt)++; 128 (d->mIt)++;
129 return *this; 129 return *this;
130} 130}
131 131
132AddressBook::Iterator &AddressBook::Iterator::operator--() 132AddressBook::Iterator &AddressBook::Iterator::operator--()
133{ 133{
134 (d->mIt)--; 134 (d->mIt)--;
135 return *this; 135 return *this;
136} 136}
137 137
138AddressBook::Iterator &AddressBook::Iterator::operator--(int) 138AddressBook::Iterator &AddressBook::Iterator::operator--(int)
139{ 139{
140 (d->mIt)--; 140 (d->mIt)--;
141 return *this; 141 return *this;
142} 142}
143 143
144bool AddressBook::Iterator::operator==( const Iterator &it ) 144bool AddressBook::Iterator::operator==( const Iterator &it )
145{ 145{
146 return ( d->mIt == it.d->mIt ); 146 return ( d->mIt == it.d->mIt );
147} 147}
148 148
149bool AddressBook::Iterator::operator!=( const Iterator &it ) 149bool AddressBook::Iterator::operator!=( const Iterator &it )
150{ 150{
151 return ( d->mIt != it.d->mIt ); 151 return ( d->mIt != it.d->mIt );
152} 152}
153 153
154 154
155AddressBook::ConstIterator::ConstIterator() 155AddressBook::ConstIterator::ConstIterator()
156{ 156{
157 d = new ConstIteratorData; 157 d = new ConstIteratorData;
158} 158}
159 159
160AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i ) 160AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i )
161{ 161{
162 d = new ConstIteratorData; 162 d = new ConstIteratorData;
163 d->mIt = i.d->mIt; 163 d->mIt = i.d->mIt;
164} 164}
165 165
166AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i ) 166AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i )
167{ 167{
168 if( this == &i ) return *this; // guard for self assignment 168 if( this == &i ) return *this; // guard for self assignment
169 delete d; // delete the old data because the Iterator was really constructed before 169 delete d; // delete the old data because the Iterator was really constructed before
170 d = new ConstIteratorData; 170 d = new ConstIteratorData;
171 d->mIt = i.d->mIt; 171 d->mIt = i.d->mIt;
172 return *this; 172 return *this;
173} 173}
174 174
175AddressBook::ConstIterator::~ConstIterator() 175AddressBook::ConstIterator::~ConstIterator()
176{ 176{
177 delete d; 177 delete d;
178} 178}
179 179
180const Addressee &AddressBook::ConstIterator::operator*() const 180const Addressee &AddressBook::ConstIterator::operator*() const
181{ 181{
182 return *(d->mIt); 182 return *(d->mIt);
183} 183}
184 184
185const Addressee* AddressBook::ConstIterator::operator->() const 185const Addressee* AddressBook::ConstIterator::operator->() const
186{ 186{
187 return &(*(d->mIt)); 187 return &(*(d->mIt));
188} 188}
189 189
190AddressBook::ConstIterator &AddressBook::ConstIterator::operator++() 190AddressBook::ConstIterator &AddressBook::ConstIterator::operator++()
191{ 191{
192 (d->mIt)++; 192 (d->mIt)++;
193 return *this; 193 return *this;
194} 194}
195 195
196AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int) 196AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int)
197{ 197{
198 (d->mIt)++; 198 (d->mIt)++;
199 return *this; 199 return *this;
200} 200}
201 201
202AddressBook::ConstIterator &AddressBook::ConstIterator::operator--() 202AddressBook::ConstIterator &AddressBook::ConstIterator::operator--()
203{ 203{
204 (d->mIt)--; 204 (d->mIt)--;
205 return *this; 205 return *this;
206} 206}
207 207
208AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int) 208AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int)
209{ 209{
210 (d->mIt)--; 210 (d->mIt)--;
211 return *this; 211 return *this;
212} 212}
213 213
214bool AddressBook::ConstIterator::operator==( const ConstIterator &it ) 214bool AddressBook::ConstIterator::operator==( const ConstIterator &it )
215{ 215{
216 return ( d->mIt == it.d->mIt ); 216 return ( d->mIt == it.d->mIt );
217} 217}
218 218
219bool AddressBook::ConstIterator::operator!=( const ConstIterator &it ) 219bool AddressBook::ConstIterator::operator!=( const ConstIterator &it )
220{ 220{
221 return ( d->mIt != it.d->mIt ); 221 return ( d->mIt != it.d->mIt );
222} 222}
223 223
224 224
225AddressBook::AddressBook() 225AddressBook::AddressBook()
226{ 226{
227 init(0, "contact"); 227 init(0, "contact");
228} 228}
229 229
230AddressBook::AddressBook( const QString &config ) 230AddressBook::AddressBook( const QString &config )
231{ 231{
232 init(config, "contact"); 232 init(config, "contact");
233} 233}
234 234
235AddressBook::AddressBook( const QString &config, const QString &family ) 235AddressBook::AddressBook( const QString &config, const QString &family )
236{ 236{
237 init(config, family); 237 init(config, family);
238 238
239} 239}
240 240
241// the default family is "contact" 241// the default family is "contact"
242void AddressBook::init(const QString &config, const QString &family ) 242void AddressBook::init(const QString &config, const QString &family )
243{ 243{
244 blockLSEchange = false; 244 blockLSEchange = false;
245 d = new AddressBookData; 245 d = new AddressBookData;
246 QString fami = family; 246 QString fami = family;
247 if (config != 0) { 247 if (config != 0) {
248 if ( family == "syncContact" ) { 248 if ( family == "syncContact" ) {
249 qDebug("creating sync config "); 249 qDebug("creating sync config ");
250 fami = "contact"; 250 fami = "contact";
251 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") ); 251 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") );
252 con->setGroup( "General" ); 252 con->setGroup( "General" );
253 con->writeEntry( "ResourceKeys", QString("sync") ); 253 con->writeEntry( "ResourceKeys", QString("sync") );
254 con->writeEntry( "Standard", QString("sync") ); 254 con->writeEntry( "Standard", QString("sync") );
255 con->setGroup( "Resource_sync" ); 255 con->setGroup( "Resource_sync" );
256 con->writeEntry( "FileName", config ); 256 con->writeEntry( "FileName", config );
257 con->writeEntry( "FileFormat", QString("vcard") ); 257 con->writeEntry( "FileFormat", QString("vcard") );
258 con->writeEntry( "ResourceIdentifier", QString("sync") ); 258 con->writeEntry( "ResourceIdentifier", QString("sync") );
259 con->writeEntry( "ResourceName", QString("sync_res") ); 259 con->writeEntry( "ResourceName", QString("sync_res") );
260 if ( config.right(4) == ".xml" ) 260 if ( config.right(4) == ".xml" )
261 con->writeEntry( "ResourceType", QString("qtopia") ); 261 con->writeEntry( "ResourceType", QString("qtopia") );
262 else if ( config == "sharp" ) { 262 else if ( config == "sharp" ) {
263 con->writeEntry( "ResourceType", QString("sharp") ); 263 con->writeEntry( "ResourceType", QString("sharp") );
264 } else { 264 } else {
265 con->writeEntry( "ResourceType", QString("file") ); 265 con->writeEntry( "ResourceType", QString("file") );
266 } 266 }
267 //con->sync(); 267 //con->sync();
268 d->mConfig = con; 268 d->mConfig = con;
269 } 269 }
270 else 270 else
271 d->mConfig = new KConfig( locateLocal("config", config) ); 271 d->mConfig = new KConfig( locateLocal("config", config) );
272// qDebug("AddressBook::init 1 config=%s",config.latin1() ); 272// qDebug("AddressBook::init 1 config=%s",config.latin1() );
273 } 273 }
274 else { 274 else {
275 d->mConfig = 0; 275 d->mConfig = 0;
276// qDebug("AddressBook::init 1 config=0"); 276// qDebug("AddressBook::init 1 config=0");
277 } 277 }
278 278
279//US d->mErrorHandler = 0; 279//US d->mErrorHandler = 0;
280 d->mManager = new KRES::Manager<Resource>( fami, false ); 280 d->mManager = new KRES::Manager<Resource>( fami, false );
281 d->mManager->readConfig( d->mConfig ); 281 d->mManager->readConfig( d->mConfig );
282 if ( family == "syncContact" ) { 282 if ( family == "syncContact" ) {
283 KRES::Manager<Resource> *manager = d->mManager; 283 KRES::Manager<Resource> *manager = d->mManager;
284 KRES::Manager<Resource>::ActiveIterator it; 284 KRES::Manager<Resource>::ActiveIterator it;
285 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 285 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
286 (*it)->setAddressBook( this ); 286 (*it)->setAddressBook( this );
287 if ( !(*it)->open() ) 287 if ( !(*it)->open() )
288 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); 288 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
289 } 289 }
290 Resource *res = standardResource(); 290 Resource *res = standardResource();
291 if ( !res ) { 291 if ( !res ) {
292 qDebug("ERROR: no standard resource"); 292 qDebug("ERROR: no standard resource");
293 res = manager->createResource( "file" ); 293 res = manager->createResource( "file" );
294 if ( res ) 294 if ( res )
295 { 295 {
296 addResource( res ); 296 addResource( res );
297 } 297 }
298 else 298 else
299 qDebug(" No resource available!!!"); 299 qDebug(" No resource available!!!");
300 } 300 }
301 setStandardResource( res ); 301 setStandardResource( res );
302 manager->writeConfig(); 302 manager->writeConfig();
303 } 303 }
304 addCustomField( i18n( "Department" ), KABC::Field::Organization, 304 addCustomField( i18n( "Department" ), KABC::Field::Organization,
305 "X-Department", "KADDRESSBOOK" ); 305 "X-Department", "KADDRESSBOOK" );
306 addCustomField( i18n( "Profession" ), KABC::Field::Organization, 306 addCustomField( i18n( "Profession" ), KABC::Field::Organization,
307 "X-Profession", "KADDRESSBOOK" ); 307 "X-Profession", "KADDRESSBOOK" );
308 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 308 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
309 "X-AssistantsName", "KADDRESSBOOK" ); 309 "X-AssistantsName", "KADDRESSBOOK" );
310 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 310 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
311 "X-ManagersName", "KADDRESSBOOK" ); 311 "X-ManagersName", "KADDRESSBOOK" );
312 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 312 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
313 "X-SpousesName", "KADDRESSBOOK" ); 313 "X-SpousesName", "KADDRESSBOOK" );
314 addCustomField( i18n( "Office" ), KABC::Field::Personal, 314 addCustomField( i18n( "Office" ), KABC::Field::Personal,
315 "X-Office", "KADDRESSBOOK" ); 315 "X-Office", "KADDRESSBOOK" );
316 addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 316 addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
317 "X-IMAddress", "KADDRESSBOOK" ); 317 "X-IMAddress", "KADDRESSBOOK" );
318 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 318 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
319 "X-Anniversary", "KADDRESSBOOK" ); 319 "X-Anniversary", "KADDRESSBOOK" );
320 320
321 //US added this field to become compatible with Opie/qtopia addressbook 321 //US added this field to become compatible with Opie/qtopia addressbook
322 // values can be "female" or "male" or "". An empty field represents undefined. 322 // values can be "female" or "male" or "". An empty field represents undefined.
323 addCustomField( i18n( "Gender" ), KABC::Field::Personal, 323 addCustomField( i18n( "Gender" ), KABC::Field::Personal,
324 "X-Gender", "KADDRESSBOOK" ); 324 "X-Gender", "KADDRESSBOOK" );
325 addCustomField( i18n( "Children" ), KABC::Field::Personal, 325 addCustomField( i18n( "Children" ), KABC::Field::Personal,
326 "X-Children", "KADDRESSBOOK" ); 326 "X-Children", "KADDRESSBOOK" );
327 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 327 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
328 "X-FreeBusyUrl", "KADDRESSBOOK" ); 328 "X-FreeBusyUrl", "KADDRESSBOOK" );
329 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal, 329 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal,
330 "X-ExternalID", "KADDRESSBOOK" ); 330 "X-ExternalID", "KADDRESSBOOK" );
331} 331}
332 332
333AddressBook::~AddressBook() 333AddressBook::~AddressBook()
334{ 334{
335 delete d->mConfig; d->mConfig = 0; 335 delete d->mConfig; d->mConfig = 0;
336 delete d->mManager; d->mManager = 0; 336 delete d->mManager; d->mManager = 0;
337//US delete d->mErrorHandler; d->mErrorHandler = 0; 337//US delete d->mErrorHandler; d->mErrorHandler = 0;
338 delete d; d = 0; 338 delete d; d = 0;
339} 339}
340 340
341bool AddressBook::load() 341bool AddressBook::load()
342{ 342{
343 343
344 clear(); 344 clear();
345 KRES::Manager<Resource>::ActiveIterator it; 345 KRES::Manager<Resource>::ActiveIterator it;
346 bool ok = true; 346 bool ok = true;
347 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 347 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
348 if ( !(*it)->load() ) { 348 if ( !(*it)->load() ) {
349 qDebug( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) ); 349 qDebug( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) );
350 ok = false; 350 ok = false;
351 } else { 351 } else {
352 qDebug( i18n("Resource loaded: '%1'").arg( (*it)->resourceName() ) ); 352 qDebug( i18n("Resource loaded: '%1'").arg( (*it)->resourceName() ) );
353 } 353 }
354 // mark all addressees as unchanged 354 // mark all addressees as unchanged
355 Addressee::List::Iterator addrIt; 355 Addressee::List::Iterator addrIt;
356 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) { 356 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) {
357 (*addrIt).setChanged( false ); 357 (*addrIt).setChanged( false );
358 QString id = (*addrIt).custom( "KADDRESSBOOK", "X-ExternalID" ); 358 QString id = (*addrIt).custom( "KADDRESSBOOK", "X-ExternalID" );
359 if ( !id.isEmpty() ) { 359 if ( !id.isEmpty() ) {
360 //qDebug("setId aa %s ", id.latin1()); 360 //qDebug("setId aa %s ", id.latin1());
361 (*addrIt).setIDStr(id ); 361 (*addrIt).setIDStr(id );
362 } 362 }
363 } 363 }
364 blockLSEchange = true; 364 blockLSEchange = true;
365 return ok; 365 return ok;
366} 366}
367 367
368bool AddressBook::save( Ticket *ticket ) 368bool AddressBook::save( Ticket *ticket )
369{ 369{
370 kdDebug(5700) << "AddressBook::save()"<< endl; 370 kdDebug(5700) << "AddressBook::save()"<< endl;
371 371
372 if ( ticket->resource() ) { 372 if ( ticket->resource() ) {
373 deleteRemovedAddressees(); 373 deleteRemovedAddressees();
374 return ticket->resource()->save( ticket ); 374 return ticket->resource()->save( ticket );
375 } 375 }
376 376
377 return false; 377 return false;
378} 378}
379void AddressBook::export2File( QString fileName ) 379void AddressBook::export2File( QString fileName )
380{ 380{
381 381
382 QFile outFile( fileName ); 382 QFile outFile( fileName );
383 if ( !outFile.open( IO_WriteOnly ) ) { 383 if ( !outFile.open( IO_WriteOnly ) ) {
384 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" ); 384 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" );
385 KMessageBox::error( 0, text.arg( fileName ) ); 385 KMessageBox::error( 0, text.arg( fileName ) );
386 return ; 386 return ;
387 } 387 }
388 QTextStream t( &outFile ); 388 QTextStream t( &outFile );
389 t.setEncoding( QTextStream::UnicodeUTF8 ); 389 t.setEncoding( QTextStream::UnicodeUTF8 );
390 Iterator it; 390 Iterator it;
391 KABC::VCardConverter::Version version; 391 KABC::VCardConverter::Version version;
392 version = KABC::VCardConverter::v3_0; 392 version = KABC::VCardConverter::v3_0;
393 for ( it = begin(); it != end(); ++it ) { 393 for ( it = begin(); it != end(); ++it ) {
394 if ( !(*it).IDStr().isEmpty() ) { 394 if ( !(*it).IDStr().isEmpty() ) {
395 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() ); 395 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() );
396 } 396 }
397 KABC::VCardConverter converter; 397 KABC::VCardConverter converter;
398 QString vcard; 398 QString vcard;
399 //Resource *resource() const; 399 //Resource *resource() const;
400 converter.addresseeToVCard( *it, vcard, version ); 400 converter.addresseeToVCard( *it, vcard, version );
401 t << vcard << "\r\n"; 401 t << vcard << "\r\n";
402 } 402 }
403 t << "\r\n\r\n"; 403 t << "\r\n\r\n";
404 outFile.close(); 404 outFile.close();
405} 405}
406// if QStringList uids is empty, all are exported 406// if QStringList uids is empty, all are exported
407bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName ) 407bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName )
408{ 408{
409 KABC::VCardConverter converter; 409 KABC::VCardConverter converter;
410 QString datastream; 410 QString datastream;
411 Iterator it; 411 Iterator it;
412 bool all = uids.isEmpty(); 412 bool all = uids.isEmpty();
413 for ( it = begin(); it != end(); ++it ) { 413 for ( it = begin(); it != end(); ++it ) {
414 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 414 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
415 if ( ! all ) { 415 if ( ! all ) {
416 if ( ! ( uids.contains((*it).uid() ) )) 416 if ( ! ( uids.contains((*it).uid() ) ))
417 continue; 417 continue;
418 } 418 }
419 KABC::Addressee a = ( *it ); 419 KABC::Addressee a = ( *it );
420 if ( a.isEmpty() ) 420 if ( a.isEmpty() )
421 continue; 421 continue;
422 a.simplifyEmails(); 422 a.simplifyEmails();
423 a.simplifyPhoneNumbers(); 423 a.simplifyPhoneNumbers();
424 a.simplifyPhoneNumberTypes(); 424 a.simplifyPhoneNumberTypes();
425 a.simplifyAddresses(); 425 a.simplifyAddresses();
426 426
427 QString vcard; 427 QString vcard;
428 QString vcardnew; 428 QString vcardnew;
429 converter.addresseeToVCard( a, vcard ); 429 converter.addresseeToVCard( a, vcard );
430 int start = 0; 430 int start = 0;
431 int next; 431 int next;
432 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 432 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
433 int semi = vcard.find(";", next); 433 int semi = vcard.find(";", next);
434 int dopp = vcard.find(":", next); 434 int dopp = vcard.find(":", next);
435 int sep; 435 int sep;
436 if ( semi < dopp && semi >= 0 ) 436 if ( semi < dopp && semi >= 0 )
437 sep = semi ; 437 sep = semi ;
438 else 438 else
439 sep = dopp; 439 sep = dopp;
440 vcardnew +=vcard.mid( start, next - start); 440 vcardnew +=vcard.mid( start, next - start);
441 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper(); 441 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper();
442 start = sep; 442 start = sep;
443 } 443 }
444 vcardnew += vcard.mid( start,vcard.length() ); 444 vcardnew += vcard.mid( start,vcard.length() );
445 vcard = ""; 445 vcard = "";
446 start = 0; 446 start = 0;
447 while ( (next = vcardnew.find("ADR", start) )>= 0 ) { 447 while ( (next = vcardnew.find("ADR", start) )>= 0 ) {
448 int sep = vcardnew.find(":", next); 448 int sep = vcardnew.find(":", next);
449 vcard +=vcardnew.mid( start, next - start+3); 449 vcard +=vcardnew.mid( start, next - start+3);
450 start = sep; 450 start = sep;
451 } 451 }
452 vcard += vcardnew.mid( start,vcardnew.length() ); 452 vcard += vcardnew.mid( start,vcardnew.length() );
453 vcard.replace ( QRegExp(";;;") , "" ); 453 vcard.replace ( QRegExp(";;;") , "" );
454 vcard.replace ( QRegExp(";;") , "" ); 454 vcard.replace ( QRegExp(";;") , "" );
455 datastream += vcard; 455 datastream += vcard;
456 456
457 } 457 }
458 458
459 QFile outFile(fileName); 459 QFile outFile(fileName);
460 if ( outFile.open(IO_WriteOnly) ) { 460 if ( outFile.open(IO_WriteOnly) ) {
461 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 461 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
462 QTextStream t( &outFile ); // use a text stream 462 QTextStream t( &outFile ); // use a text stream
463 t.setEncoding( QTextStream::UnicodeUTF8 ); 463 t.setEncoding( QTextStream::UnicodeUTF8 );
464 t <<datastream; 464 t <<datastream;
465 t << "\r\n\r\n"; 465 t << "\r\n\r\n";
466 outFile.close(); 466 outFile.close();
467 467
468 } else { 468 } else {
469 qDebug("Error open temp file "); 469 qDebug("Error open temp file ");
470 return false; 470 return false;
471 } 471 }
472 return true; 472 return true;
473 473
474} 474}
475void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld ) 475void AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld )
476{ 476{
477 477
478 if ( removeOld ) 478 if ( removeOld )
479 setUntagged(); 479 setUntagged();
480 KABC::Addressee::List list; 480 KABC::Addressee::List list;
481 QFile file( fileName ); 481 QFile file( fileName );
482 file.open( IO_ReadOnly ); 482 file.open( IO_ReadOnly );
483 QByteArray rawData = file.readAll(); 483 QByteArray rawData = file.readAll();
484 file.close(); 484 file.close();
485 QString data; 485 QString data;
486 if ( replaceLabel ) { 486 if ( replaceLabel ) {
487 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 ); 487 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 );
488 data.replace ( QRegExp("LABEL") , "ADR" ); 488 data.replace ( QRegExp("LABEL") , "ADR" );
489 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" ); 489 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" );
490 } else 490 } else
491 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 491 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
492 KABC::VCardTool tool; 492 KABC::VCardTool tool;
493 list = tool.parseVCards( data ); 493 list = tool.parseVCards( data );
494 KABC::Addressee::List::Iterator it; 494 KABC::Addressee::List::Iterator it;
495 for ( it = list.begin(); it != list.end(); ++it ) { 495 for ( it = list.begin(); it != list.end(); ++it ) {
496 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" ); 496 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" );
497 if ( !id.isEmpty() ) 497 if ( !id.isEmpty() )
498 (*it).setIDStr(id ); 498 (*it).setIDStr(id );
499 (*it).setResource( 0 ); 499 (*it).setResource( 0 );
500 if ( replaceLabel ) 500 if ( replaceLabel )
501 (*it).removeVoice(); 501 (*it).removeVoice();
502 if ( removeOld ) 502 if ( removeOld )
503 (*it).setTagged( true ); 503 (*it).setTagged( true );
504 insertAddressee( (*it), false, true ); 504 insertAddressee( (*it), false, true );
505 } 505 }
506 if ( removeOld ) 506 if ( removeOld )
507 removeUntagged(); 507 removeUntagged();
508} 508}
509void AddressBook::setUntagged() 509void AddressBook::setUntagged()
510{ 510{
511 Iterator ait; 511 Iterator ait;
512 for ( ait = begin(); ait != end(); ++ait ) { 512 for ( ait = begin(); ait != end(); ++ait ) {
513 (*ait).setTagged( false ); 513 (*ait).setTagged( false );
514 } 514 }
515} 515}
516void AddressBook::removeUntagged() 516void AddressBook::removeUntagged()
517{ 517{
518 Iterator ait; 518 Iterator ait;
519 bool todelete = false; 519 bool todelete = false;
520 Iterator todel; 520 Iterator todel;
521 for ( ait = begin(); ait != end(); ++ait ) { 521 for ( ait = begin(); ait != end(); ++ait ) {
522 if ( todelete ) 522 if ( todelete )
523 removeAddressee( todel ); 523 removeAddressee( todel );
524 if (!(*ait).tagged()) { 524 if (!(*ait).tagged()) {
525 todelete = true; 525 todelete = true;
526 todel = ait; 526 todel = ait;
527 } else 527 } else
528 todelete = false; 528 todelete = false;
529 } 529 }
530 if ( todelete ) 530 if ( todelete )
531 removeAddressee( todel ); 531 removeAddressee( todel );
532 deleteRemovedAddressees(); 532 deleteRemovedAddressees();
533} 533}
534void AddressBook::smplifyAddressees() 534void AddressBook::smplifyAddressees()
535{ 535{
536 Iterator ait; 536 Iterator ait;
537 for ( ait = begin(); ait != end(); ++ait ) { 537 for ( ait = begin(); ait != end(); ++ait ) {
538 (*ait).simplifyEmails(); 538 (*ait).simplifyEmails();
539 (*ait).simplifyPhoneNumbers(); 539 (*ait).simplifyPhoneNumbers();
540 (*ait).simplifyPhoneNumberTypes(); 540 (*ait).simplifyPhoneNumberTypes();
541 (*ait).simplifyAddresses(); 541 (*ait).simplifyAddresses();
542 } 542 }
543} 543}
544void AddressBook::preparePhoneSync( QString currentSyncDevice, bool isPreSync ) 544void AddressBook::preparePhoneSync( QString currentSyncDevice, bool isPreSync )
545{ 545{
546 Iterator ait; 546 Iterator ait;
547 for ( ait = begin(); ait != end(); ++ait ) { 547 for ( ait = begin(); ait != end(); ++ait ) {
548 QString id = (*ait).IDStr(); 548 QString id = (*ait).IDStr();
549 (*ait).setIDStr( ":"); 549 (*ait).setIDStr( ":");
550 (*ait).setExternalUID( id ); 550 (*ait).setExternalUID( id );
551 (*ait).setOriginalExternalUID( id ); 551 (*ait).setOriginalExternalUID( id );
552 if ( isPreSync ) 552 if ( isPreSync )
553 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 553 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
554 else { 554 else {
555 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 555 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
556 (*ait).setID( currentSyncDevice,id ); 556 (*ait).setID( currentSyncDevice,id );
557 557
558 } 558 }
559 } 559 }
560} 560}
561void AddressBook::findNewExtIds( QString fileName, QString currentSyncDevice ) 561void AddressBook::findNewExtIds( QString fileName, QString currentSyncDevice )
562{ 562{
563 563
564 setUntagged(); 564 setUntagged();
565 KABC::Addressee::List list; 565 KABC::Addressee::List list;
566 QFile file( fileName ); 566 QFile file( fileName );
567 file.open( IO_ReadOnly ); 567 file.open( IO_ReadOnly );
568 QByteArray rawData = file.readAll(); 568 QByteArray rawData = file.readAll();
569 file.close(); 569 file.close();
570 QString data; 570 QString data;
571 571
572 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 572 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
573 KABC::VCardTool tool; 573 KABC::VCardTool tool;
574 list = tool.parseVCards( data ); 574 list = tool.parseVCards( data );
575 KABC::Addressee::List::Iterator it; 575 KABC::Addressee::List::Iterator it;
576 for ( it = list.begin(); it != list.end(); ++it ) { 576 for ( it = list.begin(); it != list.end(); ++it ) {
577 Iterator ait; 577 Iterator ait;
578 for ( ait = begin(); ait != end(); ++ait ) { 578 for ( ait = begin(); ait != end(); ++ait ) {
579 if ( !(*ait).tagged() ) { 579 if ( !(*ait).tagged() ) {
580 if ( (*ait).containsAdr(*it)) { 580 if ( (*ait).containsAdr(*it)) {
581 (*ait).setTagged(true); 581 (*ait).setTagged(true);
582 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" ); 582 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" );
583 (*it).setIDStr( ":"); 583 (*it).setIDStr( ":");
584 (*it).setID( currentSyncDevice,id ); 584 (*it).setID( currentSyncDevice,id );
585 (*it).setExternalUID( id ); 585 (*it).setExternalUID( id );
586 (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 586 (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
587 (*it).setUid( ( (*ait).uid() )); 587 (*it).setUid( ( (*ait).uid() ));
588 break; 588 break;
589 } 589 }
590 } 590 }
591 591
592 } 592 }
593 if ( ait == end() ) 593 if ( ait == end() )
594 qDebug("ERROR:: no ext ID found for uid: %s", (*it).uid().latin1()); 594 qDebug("ERROR:: no ext ID found for uid: %s", (*it).uid().latin1());
595 } 595 }
596 clear(); 596 clear();
597 for ( it = list.begin(); it != list.end(); ++it ) { 597 for ( it = list.begin(); it != list.end(); ++it ) {
598 insertAddressee( (*it) ); 598 insertAddressee( (*it) );
599 } 599 }
600} 600}
601 601
602bool AddressBook::saveABphone( QString fileName ) 602bool AddressBook::saveABphone( QString fileName )
603{ 603{
604 //smplifyAddressees(); 604 //smplifyAddressees();
605 qDebug("saveABphone:: saving AB... "); 605 qDebug("saveABphone:: saving AB... ");
606 if ( ! export2PhoneFormat( QStringList() ,fileName ) ) 606 if ( ! export2PhoneFormat( QStringList() ,fileName ) )
607 return false; 607 return false;
608 qDebug("saveABphone:: writing to phone... "); 608 qDebug("saveABphone:: writing to phone... ");
609 if ( !PhoneAccess::writeToPhone( fileName) ) { 609 if ( !PhoneAccess::writeToPhone( fileName) ) {
610 return false; 610 return false;
611 } 611 }
612 qDebug("saveABphone:: re-reading from phone... "); 612 qDebug("saveABphone:: re-reading from phone... ");
613 if ( !PhoneAccess::readFromPhone( fileName) ) { 613 if ( !PhoneAccess::readFromPhone( fileName) ) {
614 return false; 614 return false;
615 } 615 }
616 return true; 616 return true;
617} 617}
618bool AddressBook::saveAB() 618bool AddressBook::saveAB()
619{ 619{
620 bool ok = true; 620 bool ok = true;
621 621
622 deleteRemovedAddressees(); 622 deleteRemovedAddressees();
623 Iterator ait; 623 Iterator ait;
624 for ( ait = begin(); ait != end(); ++ait ) { 624 for ( ait = begin(); ait != end(); ++ait ) {
625 if ( !(*ait).IDStr().isEmpty() ) { 625 if ( !(*ait).IDStr().isEmpty() ) {
626 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() ); 626 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() );
627 } 627 }
628 } 628 }
629 KRES::Manager<Resource>::ActiveIterator it; 629 KRES::Manager<Resource>::ActiveIterator it;
630 KRES::Manager<Resource> *manager = d->mManager; 630 KRES::Manager<Resource> *manager = d->mManager;
631 qDebug("SaveAB::saving..." ); 631 qDebug("SaveAB::saving..." );
632 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 632 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
633 qDebug("SaveAB::checking resource..." ); 633 qDebug("SaveAB::checking resource..." );
634 if ( (*it)->readOnly() ) 634 if ( (*it)->readOnly() )
635 qDebug("resource is readonly." ); 635 qDebug("resource is readonly." );
636 if ( (*it)->isOpen() ) 636 if ( (*it)->isOpen() )
637 qDebug("resource is open" ); 637 qDebug("resource is open" );
638 638
639 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 639 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
640 Ticket *ticket = requestSaveTicket( *it ); 640 Ticket *ticket = requestSaveTicket( *it );
641 qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 641 qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
642 if ( !ticket ) { 642 if ( !ticket ) {
643 qDebug( i18n( "Unable to save to resource '%1'. It is locked." ) 643 qDebug( i18n( "Unable to save to resource '%1'. It is locked." )
644 .arg( (*it)->resourceName() ) ); 644 .arg( (*it)->resourceName() ) );
645 return false; 645 return false;
646 } 646 }
647 647
648 //if ( !save( ticket ) ) 648 //if ( !save( ticket ) )
649 if ( ticket->resource() ) { 649 if ( ticket->resource() ) {
650 QString name = ticket->resource()->resourceName(); 650 QString name = ticket->resource()->resourceName();
651 if ( ! ticket->resource()->save( ticket ) ) 651 if ( ! ticket->resource()->save( ticket ) )
652 ok = false; 652 ok = false;
653 else 653 else
654 qDebug("StdAddressBook::resource saved '%s'", name.latin1() ); 654 qDebug("StdAddressBook::resource saved '%s'", name.latin1() );
655 655
656 } else 656 } else
657 ok = false; 657 ok = false;
658 658
659 } 659 }
660 } 660 }
661 return ok; 661 return ok;
662} 662}
663 663
664AddressBook::Iterator AddressBook::begin() 664AddressBook::Iterator AddressBook::begin()
665{ 665{
666 Iterator it = Iterator(); 666 Iterator it = Iterator();
667 it.d->mIt = d->mAddressees.begin(); 667 it.d->mIt = d->mAddressees.begin();
668 return it; 668 return it;
669} 669}
670 670
671AddressBook::ConstIterator AddressBook::begin() const 671AddressBook::ConstIterator AddressBook::begin() const
672{ 672{
673 ConstIterator it = ConstIterator(); 673 ConstIterator it = ConstIterator();
674 it.d->mIt = d->mAddressees.begin(); 674 it.d->mIt = d->mAddressees.begin();
675 return it; 675 return it;
676} 676}
677 677
678AddressBook::Iterator AddressBook::end() 678AddressBook::Iterator AddressBook::end()
679{ 679{
680 Iterator it = Iterator(); 680 Iterator it = Iterator();
681 it.d->mIt = d->mAddressees.end(); 681 it.d->mIt = d->mAddressees.end();
682 return it; 682 return it;
683} 683}
684 684
685AddressBook::ConstIterator AddressBook::end() const 685AddressBook::ConstIterator AddressBook::end() const
686{ 686{
687 ConstIterator it = ConstIterator(); 687 ConstIterator it = ConstIterator();
688 it.d->mIt = d->mAddressees.end(); 688 it.d->mIt = d->mAddressees.end();
689 return it; 689 return it;
690} 690}
691 691
692void AddressBook::clear() 692void AddressBook::clear()
693{ 693{
694 d->mAddressees.clear(); 694 d->mAddressees.clear();
695} 695}
696 696
697Ticket *AddressBook::requestSaveTicket( Resource *resource ) 697Ticket *AddressBook::requestSaveTicket( Resource *resource )
698{ 698{
699 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; 699 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl;
700 700
701 if ( !resource ) 701 if ( !resource )
702 { 702 {
703 qDebug("AddressBook::requestSaveTicket no resource" ); 703 qDebug("AddressBook::requestSaveTicket no resource" );
704 resource = standardResource(); 704 resource = standardResource();
705 } 705 }
706 706
707 KRES::Manager<Resource>::ActiveIterator it; 707 KRES::Manager<Resource>::ActiveIterator it;
708 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 708 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
709 if ( (*it) == resource ) { 709 if ( (*it) == resource ) {
710 if ( (*it)->readOnly() || !(*it)->isOpen() ) 710 if ( (*it)->readOnly() || !(*it)->isOpen() )
711 return 0; 711 return 0;
712 else 712 else
713 return (*it)->requestSaveTicket(); 713 return (*it)->requestSaveTicket();
714 } 714 }
715 } 715 }
716 716
717 return 0; 717 return 0;
718} 718}
719//void insertAddressee( const Addressee &, bool setRev = true, bool takeResource = false); 719//void insertAddressee( const Addressee &, bool setRev = true, bool takeResource = false);
720void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource ) 720void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource )
721{ 721{
722 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) { 722 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) {
723 //qDebug("block insert "); 723 //qDebug("block insert ");
724 return; 724 return;
725 } 725 }
726 //qDebug("inserting.... %s ",a.uid().latin1() ); 726 //qDebug("inserting.... %s ",a.uid().latin1() );
727 bool found = false; 727 bool found = false;
728 Addressee::List::Iterator it; 728 Addressee::List::Iterator it;
729 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { 729 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
730 if ( a.uid() == (*it).uid() ) { 730 if ( a.uid() == (*it).uid() ) {
731 731
732 bool changed = false; 732 bool changed = false;
733 Addressee addr = a; 733 Addressee addr = a;
734 if ( addr != (*it) ) 734 if ( addr != (*it) )
735 changed = true; 735 changed = true;
736 736
737 if ( takeResource ) { 737 if ( takeResource ) {
738 Resource * res = (*it).resource(); 738 Resource * res = (*it).resource();
739 (*it) = a; 739 (*it) = a;
740 (*it).setResource( res ); 740 (*it).setResource( res );
741 } else { 741 } else {
742 (*it) = a; 742 (*it) = a;
743 if ( (*it).resource() == 0 ) 743 if ( (*it).resource() == 0 )
744 (*it).setResource( standardResource() ); 744 (*it).setResource( standardResource() );
745 } 745 }
746 if ( changed ) { 746 if ( changed ) {
747 if ( setRev ) { 747 if ( setRev ) {
748 748
749 // get rid of micro seconds 749 // get rid of micro seconds
750 QDateTime dt = QDateTime::currentDateTime(); 750 QDateTime dt = QDateTime::currentDateTime();
751 QTime t = dt.time(); 751 QTime t = dt.time();
752 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 752 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
753 (*it).setRevision( dt ); 753 (*it).setRevision( dt );
754 } 754 }
755 (*it).setChanged( true ); 755 (*it).setChanged( true );
756 } 756 }
757 757
758 found = true; 758 found = true;
759 } else { 759 } else {
760 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 760 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
761 QString name = (*it).uid().mid( 19 ); 761 QString name = (*it).uid().mid( 19 );
762 Addressee b = a; 762 Addressee b = a;
763 QString id = b.getID( name ); 763 QString id = b.getID( name );
764 if ( ! id.isEmpty() ) { 764 if ( ! id.isEmpty() ) {
765 QString des = (*it).note(); 765 QString des = (*it).note();
766 int startN; 766 int startN;
767 if( (startN = des.find( id ) ) >= 0 ) { 767 if( (startN = des.find( id ) ) >= 0 ) {
768 int endN = des.find( ",", startN+1 ); 768 int endN = des.find( ",", startN+1 );
769 des = des.left( startN ) + des.mid( endN+1 ); 769 des = des.left( startN ) + des.mid( endN+1 );
770 (*it).setNote( des ); 770 (*it).setNote( des );
771 } 771 }
772 } 772 }
773 } 773 }
774 } 774 }
775 } 775 }
776 if ( found ) 776 if ( found )
777 return; 777 return;
778 d->mAddressees.append( a ); 778 d->mAddressees.append( a );
779 Addressee& addr = d->mAddressees.last(); 779 Addressee& addr = d->mAddressees.last();
780 if ( addr.resource() == 0 ) 780 if ( addr.resource() == 0 )
781 addr.setResource( standardResource() ); 781 addr.setResource( standardResource() );
782 782
783 addr.setChanged( true ); 783 addr.setChanged( true );
784} 784}
785 785
786void AddressBook::removeAddressee( const Addressee &a ) 786void AddressBook::removeAddressee( const Addressee &a )
787{ 787{
788 Iterator it; 788 Iterator it;
789 Iterator it2; 789 Iterator it2;
790 bool found = false; 790 bool found = false;
791 for ( it = begin(); it != end(); ++it ) { 791 for ( it = begin(); it != end(); ++it ) {
792 if ( a.uid() == (*it).uid() ) { 792 if ( a.uid() == (*it).uid() ) {
793 found = true; 793 found = true;
794 it2 = it; 794 it2 = it;
795 } else { 795 } else {
796 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 796 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
797 QString name = (*it).uid().mid( 19 ); 797 QString name = (*it).uid().mid( 19 );
798 Addressee b = a; 798 Addressee b = a;
799 QString id = b.getID( name ); 799 QString id = b.getID( name );
800 if ( ! id.isEmpty() ) { 800 if ( ! id.isEmpty() ) {
801 QString des = (*it).note(); 801 QString des = (*it).note();
802 if( des.find( id ) < 0 ) { 802 if( des.find( id ) < 0 ) {
803 des += id + ","; 803 des += id + ",";
804 (*it).setNote( des ); 804 (*it).setNote( des );
805 } 805 }
806 } 806 }
807 } 807 }
808 808
809 } 809 }
810 } 810 }
811 811
812 if ( found ) 812 if ( found )
813 removeAddressee( it2 ); 813 removeAddressee( it2 );
814 814
815} 815}
816 816
817void AddressBook::removeSyncAddressees( bool removeDeleted ) 817void AddressBook::removeSyncAddressees( bool removeDeleted )
818{ 818{
819 Iterator it = begin(); 819 Iterator it = begin();
820 Iterator it2 ; 820 Iterator it2 ;
821 QDateTime dt ( QDate( 2004,1,1) ); 821 QDateTime dt ( QDate( 2004,1,1) );
822 while ( it != end() ) { 822 while ( it != end() ) {
823 (*it).setRevision( dt ); 823 (*it).setRevision( dt );
824 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" ); 824 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" );
825 (*it).setIDStr(""); 825 (*it).setIDStr("");
826 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) { 826 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) {
827 it2 = it; 827 it2 = it;
828 //qDebug("removing %s ",(*it).uid().latin1() ); 828 //qDebug("removing %s ",(*it).uid().latin1() );
829 ++it; 829 ++it;
830 removeAddressee( it2 ); 830 removeAddressee( it2 );
831 } else { 831 } else {
832 //qDebug("skipping %s ",(*it).uid().latin1() ); 832 //qDebug("skipping %s ",(*it).uid().latin1() );
833 ++it; 833 ++it;
834 } 834 }
835 } 835 }
836 deleteRemovedAddressees(); 836 deleteRemovedAddressees();
837} 837}
838 838
839void AddressBook::removeAddressee( const Iterator &it ) 839void AddressBook::removeAddressee( const Iterator &it )
840{ 840{
841 d->mRemovedAddressees.append( (*it) ); 841 d->mRemovedAddressees.append( (*it) );
842 d->mAddressees.remove( it.d->mIt ); 842 d->mAddressees.remove( it.d->mIt );
843} 843}
844 844
845AddressBook::Iterator AddressBook::find( const Addressee &a ) 845AddressBook::Iterator AddressBook::find( const Addressee &a )
846{ 846{
847 Iterator it; 847 Iterator it;
848 for ( it = begin(); it != end(); ++it ) { 848 for ( it = begin(); it != end(); ++it ) {
849 if ( a.uid() == (*it).uid() ) { 849 if ( a.uid() == (*it).uid() ) {
850 return it; 850 return it;
851 } 851 }
852 } 852 }
853 return end(); 853 return end();
854} 854}
855 855
856Addressee AddressBook::findByUid( const QString &uid ) 856Addressee AddressBook::findByUid( const QString &uid )
857{ 857{
858 Iterator it; 858 Iterator it;
859 for ( it = begin(); it != end(); ++it ) { 859 for ( it = begin(); it != end(); ++it ) {
860 if ( uid == (*it).uid() ) { 860 if ( uid == (*it).uid() ) {
861 return *it; 861 return *it;
862 } 862 }
863 } 863 }
864 return Addressee(); 864 return Addressee();
865} 865}
866void AddressBook::preExternSync( AddressBook* aBook, const QString& csd ) 866void AddressBook::preExternSync( AddressBook* aBook, const QString& csd , bool isSubset )
867{ 867{
868 //qDebug("AddressBook::preExternSync "); 868 //qDebug("AddressBook::preExternSync ");
869 AddressBook::Iterator it; 869 AddressBook::Iterator it;
870 for ( it = begin(); it != end(); ++it ) { 870 for ( it = begin(); it != end(); ++it ) {
871 (*it).setID( csd, (*it).externalUID() ); 871 (*it).setID( csd, (*it).externalUID() );
872 (*it).computeCsum( csd ); 872 (*it).computeCsum( csd );
873 } 873 }
874 mergeAB( aBook ,csd ); 874 mergeAB( aBook ,csd, isSubset );
875} 875}
876void AddressBook::postExternSync( AddressBook* aBook , const QString& csd) 876void AddressBook::postExternSync( AddressBook* aBook , const QString& csd)
877{ 877{
878 //qDebug("AddressBook::postExternSync "); 878 //qDebug("AddressBook::postExternSync ");
879 AddressBook::Iterator it; 879 AddressBook::Iterator it;
880 for ( it = begin(); it != end(); ++it ) { 880 for ( it = begin(); it != end(); ++it ) {
881 // qDebug("check uid %s ", (*it).uid().latin1() ); 881 // qDebug("check uid %s ", (*it).uid().latin1() );
882 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID || 882 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ||
883 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) { 883 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) {
884 Addressee ad = aBook->findByUid( ( (*it).uid() )); 884 Addressee ad = aBook->findByUid( ( (*it).uid() ));
885 if ( ad.isEmpty() ) { 885 if ( ad.isEmpty() ) {
886 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1()); 886 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1());
887 } else { 887 } else {
888 (*it).computeCsum( csd ); 888 (*it).computeCsum( csd );
889 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) 889 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID )
890 ad.setID( csd, (*it).externalUID() ); 890 ad.setID( csd, (*it).externalUID() );
891 ad.setCsum( csd, (*it).getCsum( csd ) ); 891 ad.setCsum( csd, (*it).getCsum( csd ) );
892 aBook->insertAddressee( ad ); 892 aBook->insertAddressee( ad );
893 } 893 }
894 } 894 }
895 } 895 }
896} 896}
897 897
898bool AddressBook::containsExternalUid( const QString& uid ) 898bool AddressBook::containsExternalUid( const QString& uid )
899{ 899{
900 Iterator it; 900 Iterator it;
901 for ( it = begin(); it != end(); ++it ) { 901 for ( it = begin(); it != end(); ++it ) {
902 if ( uid == (*it).externalUID( ) ) 902 if ( uid == (*it).externalUID( ) )
903 return true; 903 return true;
904 } 904 }
905 return false; 905 return false;
906} 906}
907Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile ) 907Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile )
908{ 908{
909 Iterator it; 909 Iterator it;
910 for ( it = begin(); it != end(); ++it ) { 910 for ( it = begin(); it != end(); ++it ) {
911 if ( uid == (*it).getID( profile ) ) 911 if ( uid == (*it).getID( profile ) )
912 return (*it); 912 return (*it);
913 } 913 }
914 return Addressee(); 914 return Addressee();
915} 915}
916void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) 916void AddressBook::mergeAB( AddressBook *aBook, const QString& profile , bool isSubset )
917{ 917{
918 Iterator it; 918 Iterator it;
919 Addressee ad; 919 Addressee ad;
920 for ( it = begin(); it != end(); ++it ) { 920 for ( it = begin(); it != end(); ++it ) {
921 ad = aBook->findByExternUid( (*it).externalUID(), profile ); 921 ad = aBook->findByExternUid( (*it).externalUID(), profile );
922 if ( !ad.isEmpty() ) { 922 if ( !ad.isEmpty() ) {
923 (*it).mergeContact( ad ); 923 (*it).mergeContact( ad ,isSubset);
924 } 924 }
925 } 925 }
926#if 0 926#if 0
927 // test only 927 // test only
928 for ( it = begin(); it != end(); ++it ) { 928 for ( it = begin(); it != end(); ++it ) {
929 929
930 qDebug("uid %s ", (*it).uid().latin1()); 930 qDebug("uid %s ", (*it).uid().latin1());
931 } 931 }
932#endif 932#endif
933} 933}
934 934
935#if 0 935#if 0
936Addressee::List AddressBook::getExternLastSyncAddressees() 936Addressee::List AddressBook::getExternLastSyncAddressees()
937{ 937{
938 Addressee::List results; 938 Addressee::List results;
939 939
940 Iterator it; 940 Iterator it;
941 for ( it = begin(); it != end(); ++it ) { 941 for ( it = begin(); it != end(); ++it ) {
942 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { 942 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
943 if ( (*it).familyName().left(4) == "!E: " ) 943 if ( (*it).familyName().left(4) == "!E: " )
944 results.append( *it ); 944 results.append( *it );
945 } 945 }
946 } 946 }
947 947
948 return results; 948 return results;
949} 949}
950#endif 950#endif
951void AddressBook::resetTempSyncStat() 951void AddressBook::resetTempSyncStat()
952{ 952{
953 Iterator it; 953 Iterator it;
954 for ( it = begin(); it != end(); ++it ) { 954 for ( it = begin(); it != end(); ++it ) {
955 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 955 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
956 } 956 }
957 957
958} 958}
959 959
960QStringList AddressBook:: uidList() 960QStringList AddressBook:: uidList()
961{ 961{
962 QStringList results; 962 QStringList results;
963 Iterator it; 963 Iterator it;
964 for ( it = begin(); it != end(); ++it ) { 964 for ( it = begin(); it != end(); ++it ) {
965 results.append( (*it).uid() ); 965 results.append( (*it).uid() );
966 } 966 }
967 return results; 967 return results;
968} 968}
969 969
970 970
971Addressee::List AddressBook::allAddressees() 971Addressee::List AddressBook::allAddressees()
972{ 972{
973 return d->mAddressees; 973 return d->mAddressees;
974 974
975} 975}
976 976
977Addressee::List AddressBook::findByName( const QString &name ) 977Addressee::List AddressBook::findByName( const QString &name )
978{ 978{
979 Addressee::List results; 979 Addressee::List results;
980 980
981 Iterator it; 981 Iterator it;
982 for ( it = begin(); it != end(); ++it ) { 982 for ( it = begin(); it != end(); ++it ) {
983 if ( name == (*it).realName() ) { 983 if ( name == (*it).realName() ) {
984 results.append( *it ); 984 results.append( *it );
985 } 985 }
986 } 986 }
987 987
988 return results; 988 return results;
989} 989}
990 990
991Addressee::List AddressBook::findByEmail( const QString &email ) 991Addressee::List AddressBook::findByEmail( const QString &email )
992{ 992{
993 Addressee::List results; 993 Addressee::List results;
994 QStringList mailList; 994 QStringList mailList;
995 995
996 Iterator it; 996 Iterator it;
997 for ( it = begin(); it != end(); ++it ) { 997 for ( it = begin(); it != end(); ++it ) {
998 mailList = (*it).emails(); 998 mailList = (*it).emails();
999 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 999 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
1000 if ( email == (*ite) ) { 1000 if ( email == (*ite) ) {
1001 results.append( *it ); 1001 results.append( *it );
1002 } 1002 }
1003 } 1003 }
1004 } 1004 }
1005 1005
1006 return results; 1006 return results;
1007} 1007}
1008 1008
1009Addressee::List AddressBook::findByCategory( const QString &category ) 1009Addressee::List AddressBook::findByCategory( const QString &category )
1010{ 1010{
1011 Addressee::List results; 1011 Addressee::List results;
1012 1012
1013 Iterator it; 1013 Iterator it;
1014 for ( it = begin(); it != end(); ++it ) { 1014 for ( it = begin(); it != end(); ++it ) {
1015 if ( (*it).hasCategory( category) ) { 1015 if ( (*it).hasCategory( category) ) {
1016 results.append( *it ); 1016 results.append( *it );
1017 } 1017 }
1018 } 1018 }
1019 1019
1020 return results; 1020 return results;
1021} 1021}
1022 1022
1023void AddressBook::dump() const 1023void AddressBook::dump() const
1024{ 1024{
1025 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 1025 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
1026 1026
1027 ConstIterator it; 1027 ConstIterator it;
1028 for( it = begin(); it != end(); ++it ) { 1028 for( it = begin(); it != end(); ++it ) {
1029 (*it).dump(); 1029 (*it).dump();
1030 } 1030 }
1031 1031
1032 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 1032 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
1033} 1033}
1034 1034
1035QString AddressBook::identifier() 1035QString AddressBook::identifier()
1036{ 1036{
1037 QStringList identifier; 1037 QStringList identifier;
1038 1038
1039 1039
1040 KRES::Manager<Resource>::ActiveIterator it; 1040 KRES::Manager<Resource>::ActiveIterator it;
1041 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 1041 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
1042 if ( !(*it)->identifier().isEmpty() ) 1042 if ( !(*it)->identifier().isEmpty() )
1043 identifier.append( (*it)->identifier() ); 1043 identifier.append( (*it)->identifier() );
1044 } 1044 }
1045 1045
1046 return identifier.join( ":" ); 1046 return identifier.join( ":" );
1047} 1047}
1048 1048
1049Field::List AddressBook::fields( int category ) 1049Field::List AddressBook::fields( int category )
1050{ 1050{
1051 if ( d->mAllFields.isEmpty() ) { 1051 if ( d->mAllFields.isEmpty() ) {
1052 d->mAllFields = Field::allFields(); 1052 d->mAllFields = Field::allFields();
1053 } 1053 }
1054 1054
1055 if ( category == Field::All ) return d->mAllFields; 1055 if ( category == Field::All ) return d->mAllFields;
1056 1056
1057 Field::List result; 1057 Field::List result;
1058 Field::List::ConstIterator it; 1058 Field::List::ConstIterator it;
1059 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 1059 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
1060 if ( (*it)->category() & category ) result.append( *it ); 1060 if ( (*it)->category() & category ) result.append( *it );
1061 } 1061 }
1062 1062
1063 return result; 1063 return result;
1064} 1064}
1065 1065
1066bool AddressBook::addCustomField( const QString &label, int category, 1066bool AddressBook::addCustomField( const QString &label, int category,
1067 const QString &key, const QString &app ) 1067 const QString &key, const QString &app )
1068{ 1068{
1069 if ( d->mAllFields.isEmpty() ) { 1069 if ( d->mAllFields.isEmpty() ) {
1070 d->mAllFields = Field::allFields(); 1070 d->mAllFields = Field::allFields();
1071 } 1071 }
1072//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 1072//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
1073 QString a = app.isNull() ? KGlobal::getAppName() : app; 1073 QString a = app.isNull() ? KGlobal::getAppName() : app;
1074 1074
1075 QString k = key.isNull() ? label : key; 1075 QString k = key.isNull() ? label : key;
1076 1076
1077 Field *field = Field::createCustomField( label, category, k, a ); 1077 Field *field = Field::createCustomField( label, category, k, a );
1078 1078
1079 if ( !field ) return false; 1079 if ( !field ) return false;
1080 1080
1081 d->mAllFields.append( field ); 1081 d->mAllFields.append( field );
1082 1082
1083 return true; 1083 return true;
1084} 1084}
1085 1085
1086QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 1086QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
1087{ 1087{
1088 if (!ab.d) return s; 1088 if (!ab.d) return s;
1089 1089
1090 return s << ab.d->mAddressees; 1090 return s << ab.d->mAddressees;
1091} 1091}
1092 1092
1093QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 1093QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
1094{ 1094{
1095 if (!ab.d) return s; 1095 if (!ab.d) return s;
1096 1096
1097 s >> ab.d->mAddressees; 1097 s >> ab.d->mAddressees;
1098 1098
1099 return s; 1099 return s;
1100} 1100}
1101 1101
1102bool AddressBook::addResource( Resource *resource ) 1102bool AddressBook::addResource( Resource *resource )
1103{ 1103{
1104 if ( !resource->open() ) { 1104 if ( !resource->open() ) {
1105 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 1105 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
1106 return false; 1106 return false;
1107 } 1107 }
1108 1108
1109 resource->setAddressBook( this ); 1109 resource->setAddressBook( this );
1110 1110
1111 d->mManager->add( resource ); 1111 d->mManager->add( resource );
1112 return true; 1112 return true;
1113} 1113}
1114 1114
1115bool AddressBook::removeResource( Resource *resource ) 1115bool AddressBook::removeResource( Resource *resource )
1116{ 1116{
1117 resource->close(); 1117 resource->close();
1118 1118
1119 if ( resource == standardResource() ) 1119 if ( resource == standardResource() )
1120 d->mManager->setStandardResource( 0 ); 1120 d->mManager->setStandardResource( 0 );
1121 1121
1122 resource->setAddressBook( 0 ); 1122 resource->setAddressBook( 0 );
1123 1123
1124 d->mManager->remove( resource ); 1124 d->mManager->remove( resource );
1125 return true; 1125 return true;
1126} 1126}
1127 1127
1128QPtrList<Resource> AddressBook::resources() 1128QPtrList<Resource> AddressBook::resources()
1129{ 1129{
1130 QPtrList<Resource> list; 1130 QPtrList<Resource> list;
1131 1131
1132// qDebug("AddressBook::resources() 1"); 1132// qDebug("AddressBook::resources() 1");
1133 1133
1134 KRES::Manager<Resource>::ActiveIterator it; 1134 KRES::Manager<Resource>::ActiveIterator it;
1135 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 1135 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
1136 list.append( *it ); 1136 list.append( *it );
1137 1137
1138 return list; 1138 return list;
1139} 1139}
1140 1140
1141/*US 1141/*US
1142void AddressBook::setErrorHandler( ErrorHandler *handler ) 1142void AddressBook::setErrorHandler( ErrorHandler *handler )
1143{ 1143{
1144 delete d->mErrorHandler; 1144 delete d->mErrorHandler;
1145 d->mErrorHandler = handler; 1145 d->mErrorHandler = handler;
1146} 1146}
1147*/ 1147*/
1148 1148
1149void AddressBook::error( const QString& msg ) 1149void AddressBook::error( const QString& msg )
1150{ 1150{
1151/*US 1151/*US
1152 if ( !d->mErrorHandler ) // create default error handler 1152 if ( !d->mErrorHandler ) // create default error handler
1153 d->mErrorHandler = new ConsoleErrorHandler; 1153 d->mErrorHandler = new ConsoleErrorHandler;
1154 1154
1155 if ( d->mErrorHandler ) 1155 if ( d->mErrorHandler )
1156 d->mErrorHandler->error( msg ); 1156 d->mErrorHandler->error( msg );
1157 else 1157 else
1158 kdError(5700) << "no error handler defined" << endl; 1158 kdError(5700) << "no error handler defined" << endl;
1159*/ 1159*/
1160 kdDebug(5700) << "msg" << endl; 1160 kdDebug(5700) << "msg" << endl;
1161 qDebug(msg); 1161 qDebug(msg);
1162} 1162}
1163 1163
1164void AddressBook::deleteRemovedAddressees() 1164void AddressBook::deleteRemovedAddressees()
1165{ 1165{
1166 Addressee::List::Iterator it; 1166 Addressee::List::Iterator it;
1167 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 1167 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
1168 Resource *resource = (*it).resource(); 1168 Resource *resource = (*it).resource();
1169 if ( resource && !resource->readOnly() && resource->isOpen() ) 1169 if ( resource && !resource->readOnly() && resource->isOpen() )
1170 resource->removeAddressee( *it ); 1170 resource->removeAddressee( *it );
1171 } 1171 }
1172 1172
1173 d->mRemovedAddressees.clear(); 1173 d->mRemovedAddressees.clear();
1174} 1174}
1175 1175
1176void AddressBook::setStandardResource( Resource *resource ) 1176void AddressBook::setStandardResource( Resource *resource )
1177{ 1177{
1178// qDebug("AddressBook::setStandardResource 1"); 1178// qDebug("AddressBook::setStandardResource 1");
1179 d->mManager->setStandardResource( resource ); 1179 d->mManager->setStandardResource( resource );
1180} 1180}
1181 1181
1182Resource *AddressBook::standardResource() 1182Resource *AddressBook::standardResource()
1183{ 1183{
1184 return d->mManager->standardResource(); 1184 return d->mManager->standardResource();
1185} 1185}
1186 1186
1187KRES::Manager<Resource> *AddressBook::resourceManager() 1187KRES::Manager<Resource> *AddressBook::resourceManager()
1188{ 1188{
1189 return d->mManager; 1189 return d->mManager;
1190} 1190}
1191 1191
1192void AddressBook::cleanUp() 1192void AddressBook::cleanUp()
1193{ 1193{
1194 KRES::Manager<Resource>::ActiveIterator it; 1194 KRES::Manager<Resource>::ActiveIterator it;
1195 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 1195 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
1196 if ( !(*it)->readOnly() && (*it)->isOpen() ) 1196 if ( !(*it)->readOnly() && (*it)->isOpen() )
1197 (*it)->cleanUp(); 1197 (*it)->cleanUp();
1198 } 1198 }
1199} 1199}