summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 2785131..df0fba4 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -1,1219 +1,1240 @@
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 ); 280 d->mManager = new KRES::Manager<Resource>( fami );
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}
379// exports all Addressees, which are syncable 379// exports all Addressees, which are syncable
380void AddressBook::export2File( QString fileName ) 380void AddressBook::export2File( QString fileName )
381{ 381{
382 382
383 QFile outFile( fileName ); 383 QFile outFile( fileName );
384 if ( !outFile.open( IO_WriteOnly ) ) { 384 if ( !outFile.open( IO_WriteOnly ) ) {
385 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" ); 385 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" );
386 KMessageBox::error( 0, text.arg( fileName ) ); 386 KMessageBox::error( 0, text.arg( fileName ) );
387 return ; 387 return ;
388 } 388 }
389 QTextStream t( &outFile ); 389 QTextStream t( &outFile );
390 t.setEncoding( QTextStream::UnicodeUTF8 ); 390 t.setEncoding( QTextStream::UnicodeUTF8 );
391 Iterator it; 391 Iterator it;
392 KABC::VCardConverter::Version version; 392 KABC::VCardConverter::Version version;
393 version = KABC::VCardConverter::v3_0; 393 version = KABC::VCardConverter::v3_0;
394 for ( it = begin(); it != end(); ++it ) { 394 for ( it = begin(); it != end(); ++it ) {
395 if ( (*it).resource() && (*it).resource()->includeInSync() ) { 395 if ( (*it).resource() && (*it).resource()->includeInSync() ) {
396 if ( !(*it).IDStr().isEmpty() ) { 396 if ( !(*it).IDStr().isEmpty() ) {
397 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() ); 397 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() );
398 } 398 }
399 KABC::VCardConverter converter; 399 KABC::VCardConverter converter;
400 QString vcard; 400 QString vcard;
401 //Resource *resource() const; 401 //Resource *resource() const;
402 converter.addresseeToVCard( *it, vcard, version ); 402 converter.addresseeToVCard( *it, vcard, version );
403 t << vcard << "\r\n"; 403 t << vcard << "\r\n";
404 } 404 }
405 } 405 }
406 t << "\r\n\r\n"; 406 t << "\r\n\r\n";
407 outFile.close(); 407 outFile.close();
408} 408}
409// if QStringList uids is empty, all are exported 409// if QStringList uids is empty, all are exported
410bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName ) 410bool AddressBook::export2PhoneFormat( QStringList uids ,QString fileName )
411{ 411{
412 KABC::VCardConverter converter; 412 KABC::VCardConverter converter;
413 QString datastream; 413 QString datastream;
414 Iterator it; 414 Iterator it;
415 bool all = uids.isEmpty(); 415 bool all = uids.isEmpty();
416 for ( it = begin(); it != end(); ++it ) { 416 for ( it = begin(); it != end(); ++it ) {
417 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 417 // for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
418 if ( ! all ) { 418 if ( ! all ) {
419 if ( ! ( uids.contains((*it).uid() ) )) 419 if ( ! ( uids.contains((*it).uid() ) ))
420 continue; 420 continue;
421 } 421 }
422 KABC::Addressee a = ( *it ); 422 KABC::Addressee a = ( *it );
423 if ( a.isEmpty() ) 423 if ( a.isEmpty() )
424 continue; 424 continue;
425 if ( all && a.resource() && !a.resource()->includeInSync() ) 425 if ( all && a.resource() && !a.resource()->includeInSync() )
426 continue; 426 continue;
427 a.simplifyEmails(); 427 a.simplifyEmails();
428 a.simplifyPhoneNumbers(); 428 a.simplifyPhoneNumbers();
429 a.simplifyPhoneNumberTypes(); 429 a.simplifyPhoneNumberTypes();
430 a.simplifyAddresses(); 430 a.simplifyAddresses();
431 431
432 QString vcard; 432 QString vcard;
433 QString vcardnew; 433 QString vcardnew;
434 converter.addresseeToVCard( a, vcard ); 434 converter.addresseeToVCard( a, vcard );
435 int start = 0; 435 int start = 0;
436 int next; 436 int next;
437 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 437 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
438 int semi = vcard.find(";", next); 438 int semi = vcard.find(";", next);
439 int dopp = vcard.find(":", next); 439 int dopp = vcard.find(":", next);
440 int sep; 440 int sep;
441 if ( semi < dopp && semi >= 0 ) 441 if ( semi < dopp && semi >= 0 )
442 sep = semi ; 442 sep = semi ;
443 else 443 else
444 sep = dopp; 444 sep = dopp;
445 vcardnew +=vcard.mid( start, next - start); 445 vcardnew +=vcard.mid( start, next - start);
446 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper(); 446 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper();
447 start = sep; 447 start = sep;
448 } 448 }
449 vcardnew += vcard.mid( start,vcard.length() ); 449 vcardnew += vcard.mid( start,vcard.length() );
450 vcard = ""; 450 vcard = "";
451 start = 0; 451 start = 0;
452 while ( (next = vcardnew.find("ADR", start) )>= 0 ) { 452 while ( (next = vcardnew.find("ADR", start) )>= 0 ) {
453 int sep = vcardnew.find(":", next); 453 int sep = vcardnew.find(":", next);
454 vcard +=vcardnew.mid( start, next - start+3); 454 vcard +=vcardnew.mid( start, next - start+3);
455 start = sep; 455 start = sep;
456 } 456 }
457 vcard += vcardnew.mid( start,vcardnew.length() ); 457 vcard += vcardnew.mid( start,vcardnew.length() );
458 vcard.replace ( QRegExp(";;;") , "" ); 458 vcard.replace ( QRegExp(";;;") , "" );
459 vcard.replace ( QRegExp(";;") , "" ); 459 vcard.replace ( QRegExp(";;") , "" );
460 datastream += vcard; 460 datastream += vcard;
461 461
462 } 462 }
463 463
464 QFile outFile(fileName); 464 QFile outFile(fileName);
465 if ( outFile.open(IO_WriteOnly) ) { 465 if ( outFile.open(IO_WriteOnly) ) {
466 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 466 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
467 QTextStream t( &outFile ); // use a text stream 467 QTextStream t( &outFile ); // use a text stream
468 t.setEncoding( QTextStream::UnicodeUTF8 ); 468 t.setEncoding( QTextStream::UnicodeUTF8 );
469 t <<datastream; 469 t <<datastream;
470 t << "\r\n\r\n"; 470 t << "\r\n\r\n";
471 outFile.close(); 471 outFile.close();
472 472
473 } else { 473 } else {
474 qDebug("Error open temp file "); 474 qDebug("Error open temp file ");
475 return false; 475 return false;
476 } 476 }
477 return true; 477 return true;
478 478
479} 479}
480int AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld ) 480int AddressBook::importFromFile( QString fileName, bool replaceLabel, bool removeOld )
481{ 481{
482 482
483 if ( removeOld ) 483 if ( removeOld )
484 setUntagged( true ); 484 setUntagged( true );
485 KABC::Addressee::List list; 485 KABC::Addressee::List list;
486 QFile file( fileName ); 486 QFile file( fileName );
487 file.open( IO_ReadOnly ); 487 file.open( IO_ReadOnly );
488 QByteArray rawData = file.readAll(); 488 QByteArray rawData = file.readAll();
489 file.close(); 489 file.close();
490 QString data; 490 QString data;
491 if ( replaceLabel ) { 491 if ( replaceLabel ) {
492 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 ); 492 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 );
493 data.replace ( QRegExp("LABEL") , "ADR" ); 493 data.replace ( QRegExp("LABEL") , "ADR" );
494 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" ); 494 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" );
495 } else 495 } else
496 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 496 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
497 KABC::VCardTool tool; 497 KABC::VCardTool tool;
498 list = tool.parseVCards( data ); 498 list = tool.parseVCards( data );
499 KABC::Addressee::List::Iterator it; 499 KABC::Addressee::List::Iterator it;
500 for ( it = list.begin(); it != list.end(); ++it ) { 500 for ( it = list.begin(); it != list.end(); ++it ) {
501 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" ); 501 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" );
502 if ( !id.isEmpty() ) 502 if ( !id.isEmpty() )
503 (*it).setIDStr(id ); 503 (*it).setIDStr(id );
504 (*it).setResource( 0 ); 504 (*it).setResource( 0 );
505 if ( replaceLabel ) 505 if ( replaceLabel )
506 (*it).removeVoice(); 506 (*it).removeVoice();
507 if ( removeOld ) 507 if ( removeOld )
508 (*it).setTagged( true ); 508 (*it).setTagged( true );
509 insertAddressee( (*it), false, true ); 509 insertAddressee( (*it), false, true );
510 } 510 }
511 if ( removeOld ) 511 if ( removeOld )
512 removeUntagged(); 512 removeUntagged();
513 return list.count(); 513 return list.count();
514} 514}
515void AddressBook::setUntagged(bool setNonSyncTagged) // = false) 515void AddressBook::setUntagged(bool setNonSyncTagged) // = false)
516{ 516{
517 Iterator ait; 517 Iterator ait;
518 for ( ait = begin(); ait != end(); ++ait ) { 518 for ( ait = begin(); ait != end(); ++ait ) {
519 if ( setNonSyncTagged ) { 519 if ( setNonSyncTagged ) {
520 if ( (*ait).resource() && ! (*ait).resource()->includeInSync() ) { 520 if ( (*ait).resource() && ! (*ait).resource()->includeInSync() ) {
521 (*ait).setTagged( true ); 521 (*ait).setTagged( true );
522 } else 522 } else
523 (*ait).setTagged( false ); 523 (*ait).setTagged( false );
524 } else 524 } else
525 (*ait).setTagged( false ); 525 (*ait).setTagged( false );
526 } 526 }
527} 527}
528void AddressBook::removeUntagged() 528void AddressBook::removeUntagged()
529{ 529{
530 Iterator ait; 530 Iterator ait;
531 bool todelete = false; 531 bool todelete = false;
532 Iterator todel; 532 Iterator todel;
533 for ( ait = begin(); ait != end(); ++ait ) { 533 for ( ait = begin(); ait != end(); ++ait ) {
534 if ( todelete ) 534 if ( todelete )
535 removeAddressee( todel ); 535 removeAddressee( todel );
536 if (!(*ait).tagged()) { 536 if (!(*ait).tagged()) {
537 todelete = true; 537 todelete = true;
538 todel = ait; 538 todel = ait;
539 } else 539 } else
540 todelete = false; 540 todelete = false;
541 } 541 }
542 if ( todelete ) 542 if ( todelete )
543 removeAddressee( todel ); 543 removeAddressee( todel );
544 deleteRemovedAddressees(); 544 deleteRemovedAddressees();
545} 545}
546void AddressBook::smplifyAddressees() 546void AddressBook::smplifyAddressees()
547{ 547{
548 Iterator ait; 548 Iterator ait;
549 for ( ait = begin(); ait != end(); ++ait ) { 549 for ( ait = begin(); ait != end(); ++ait ) {
550 (*ait).simplifyEmails(); 550 (*ait).simplifyEmails();
551 (*ait).simplifyPhoneNumbers(); 551 (*ait).simplifyPhoneNumbers();
552 (*ait).simplifyPhoneNumberTypes(); 552 (*ait).simplifyPhoneNumberTypes();
553 (*ait).simplifyAddresses(); 553 (*ait).simplifyAddresses();
554 } 554 }
555} 555}
556void AddressBook::removeSyncInfo( QString syncProfile) 556void AddressBook::removeSyncInfo( QString syncProfile)
557{ 557{
558 Iterator ait; 558 Iterator ait;
559 for ( ait = begin(); ait != end(); ++ait ) { 559 for ( ait = begin(); ait != end(); ++ait ) {
560 (*ait).removeID( syncProfile ); 560 (*ait).removeID( syncProfile );
561 }
562 if ( syncProfile.isEmpty() ) {
563 Iterator it = begin();
564 Iterator it2 ;
565 QDateTime dt ( QDate( 2004,1,1) );
566 while ( it != end() ) {
567 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
568 it2 = it;
569 //qDebug("removing %s ",(*it).uid().latin1() );
570 ++it;
571 removeAddressee( it2 );
572 } else {
573 //qDebug("skipping %s ",(*it).uid().latin1() );
574 ++it;
575 }
576 }
577 } else {
578 Addressee lse;
579 lse = mAddressBook->findByUid( "last-syncAddressee-"+ syncProfile );
580 if ( ! lse.isEmpty() )
581 removeAddressee( lse );
561 } 582 }
562 583
563} 584}
564void AddressBook::preparePhoneSync( QString currentSyncDevice, bool isPreSync ) 585void AddressBook::preparePhoneSync( QString currentSyncDevice, bool isPreSync )
565{ 586{
566 Iterator ait; 587 Iterator ait;
567 for ( ait = begin(); ait != end(); ++ait ) { 588 for ( ait = begin(); ait != end(); ++ait ) {
568 QString id = (*ait).IDStr(); 589 QString id = (*ait).IDStr();
569 (*ait).setIDStr( ":"); 590 (*ait).setIDStr( ":");
570 (*ait).setExternalUID( id ); 591 (*ait).setExternalUID( id );
571 (*ait).setOriginalExternalUID( id ); 592 (*ait).setOriginalExternalUID( id );
572 if ( isPreSync ) 593 if ( isPreSync )
573 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 594 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
574 else { 595 else {
575 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 596 (*ait).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
576 (*ait).setID( currentSyncDevice,id ); 597 (*ait).setID( currentSyncDevice,id );
577 598
578 } 599 }
579 } 600 }
580} 601}
581void AddressBook::findNewExtIds( QString fileName, QString currentSyncDevice ) 602void AddressBook::findNewExtIds( QString fileName, QString currentSyncDevice )
582{ 603{
583 604
584 setUntagged(); 605 setUntagged();
585 KABC::Addressee::List list; 606 KABC::Addressee::List list;
586 QFile file( fileName ); 607 QFile file( fileName );
587 file.open( IO_ReadOnly ); 608 file.open( IO_ReadOnly );
588 QByteArray rawData = file.readAll(); 609 QByteArray rawData = file.readAll();
589 file.close(); 610 file.close();
590 QString data; 611 QString data;
591 612
592 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 613 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
593 KABC::VCardTool tool; 614 KABC::VCardTool tool;
594 list = tool.parseVCards( data ); 615 list = tool.parseVCards( data );
595 KABC::Addressee::List::Iterator it; 616 KABC::Addressee::List::Iterator it;
596 for ( it = list.begin(); it != list.end(); ++it ) { 617 for ( it = list.begin(); it != list.end(); ++it ) {
597 Iterator ait; 618 Iterator ait;
598 for ( ait = begin(); ait != end(); ++ait ) { 619 for ( ait = begin(); ait != end(); ++ait ) {
599 if ( !(*ait).tagged() ) { 620 if ( !(*ait).tagged() ) {
600 if ( (*ait).containsAdr(*it)) { 621 if ( (*ait).containsAdr(*it)) {
601 (*ait).setTagged(true); 622 (*ait).setTagged(true);
602 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" ); 623 QString id = (*it).custom( "KADDRESSBOOK", "X-ExternalID" );
603 (*it).setIDStr( ":"); 624 (*it).setIDStr( ":");
604 (*it).setID( currentSyncDevice,id ); 625 (*it).setID( currentSyncDevice,id );
605 (*it).setExternalUID( id ); 626 (*it).setExternalUID( id );
606 (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 627 (*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
607 (*it).setUid( ( (*ait).uid() )); 628 (*it).setUid( ( (*ait).uid() ));
608 break; 629 break;
609 } 630 }
610 } 631 }
611 632
612 } 633 }
613 if ( ait == end() ) 634 if ( ait == end() )
614 qDebug("ERROR:: no ext ID found for uid: %s", (*it).uid().latin1()); 635 qDebug("ERROR:: no ext ID found for uid: %s", (*it).uid().latin1());
615 } 636 }
616 clear(); 637 clear();
617 for ( it = list.begin(); it != list.end(); ++it ) { 638 for ( it = list.begin(); it != list.end(); ++it ) {
618 insertAddressee( (*it) ); 639 insertAddressee( (*it) );
619 } 640 }
620} 641}
621 642
622bool AddressBook::saveABphone( QString fileName ) 643bool AddressBook::saveABphone( QString fileName )
623{ 644{
624 //smplifyAddressees(); 645 //smplifyAddressees();
625 qDebug("saveABphone:: saving AB... "); 646 qDebug("saveABphone:: saving AB... ");
626 if ( ! export2PhoneFormat( QStringList() ,fileName ) ) 647 if ( ! export2PhoneFormat( QStringList() ,fileName ) )
627 return false; 648 return false;
628 qDebug("saveABphone:: writing to phone... "); 649 qDebug("saveABphone:: writing to phone... ");
629 if ( !PhoneAccess::writeToPhone( fileName) ) { 650 if ( !PhoneAccess::writeToPhone( fileName) ) {
630 return false; 651 return false;
631 } 652 }
632 qDebug("saveABphone:: re-reading from phone... "); 653 qDebug("saveABphone:: re-reading from phone... ");
633 if ( !PhoneAccess::readFromPhone( fileName) ) { 654 if ( !PhoneAccess::readFromPhone( fileName) ) {
634 return false; 655 return false;
635 } 656 }
636 return true; 657 return true;
637} 658}
638bool AddressBook::saveAB() 659bool AddressBook::saveAB()
639{ 660{
640 bool ok = true; 661 bool ok = true;
641 662
642 deleteRemovedAddressees(); 663 deleteRemovedAddressees();
643 Iterator ait; 664 Iterator ait;
644 for ( ait = begin(); ait != end(); ++ait ) { 665 for ( ait = begin(); ait != end(); ++ait ) {
645 if ( !(*ait).IDStr().isEmpty() ) { 666 if ( !(*ait).IDStr().isEmpty() ) {
646 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() ); 667 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() );
647 } 668 }
648 } 669 }
649 KRES::Manager<Resource>::ActiveIterator it; 670 KRES::Manager<Resource>::ActiveIterator it;
650 KRES::Manager<Resource> *manager = d->mManager; 671 KRES::Manager<Resource> *manager = d->mManager;
651 qDebug("SaveAB::saving..." ); 672 qDebug("SaveAB::saving..." );
652 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 673 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
653 qDebug("SaveAB::checking resource..." ); 674 qDebug("SaveAB::checking resource..." );
654 if ( (*it)->readOnly() ) 675 if ( (*it)->readOnly() )
655 qDebug("resource is readonly." ); 676 qDebug("resource is readonly." );
656 if ( (*it)->isOpen() ) 677 if ( (*it)->isOpen() )
657 qDebug("resource is open" ); 678 qDebug("resource is open" );
658 679
659 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 680 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
660 Ticket *ticket = requestSaveTicket( *it ); 681 Ticket *ticket = requestSaveTicket( *it );
661 qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 682 qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
662 if ( !ticket ) { 683 if ( !ticket ) {
663 qDebug( i18n( "Unable to save to resource '%1'. It is locked." ) 684 qDebug( i18n( "Unable to save to resource '%1'. It is locked." )
664 .arg( (*it)->resourceName() ) ); 685 .arg( (*it)->resourceName() ) );
665 return false; 686 return false;
666 } 687 }
667 688
668 //if ( !save( ticket ) ) 689 //if ( !save( ticket ) )
669 if ( ticket->resource() ) { 690 if ( ticket->resource() ) {
670 QString name = ticket->resource()->resourceName(); 691 QString name = ticket->resource()->resourceName();
671 if ( ! ticket->resource()->save( ticket ) ) 692 if ( ! ticket->resource()->save( ticket ) )
672 ok = false; 693 ok = false;
673 else 694 else
674 qDebug("StdAddressBook::resource saved '%s'", name.latin1() ); 695 qDebug("StdAddressBook::resource saved '%s'", name.latin1() );
675 696
676 } else 697 } else
677 ok = false; 698 ok = false;
678 699
679 } 700 }
680 } 701 }
681 return ok; 702 return ok;
682} 703}
683 704
684AddressBook::Iterator AddressBook::begin() 705AddressBook::Iterator AddressBook::begin()
685{ 706{
686 Iterator it = Iterator(); 707 Iterator it = Iterator();
687 it.d->mIt = d->mAddressees.begin(); 708 it.d->mIt = d->mAddressees.begin();
688 return it; 709 return it;
689} 710}
690 711
691AddressBook::ConstIterator AddressBook::begin() const 712AddressBook::ConstIterator AddressBook::begin() const
692{ 713{
693 ConstIterator it = ConstIterator(); 714 ConstIterator it = ConstIterator();
694 it.d->mIt = d->mAddressees.begin(); 715 it.d->mIt = d->mAddressees.begin();
695 return it; 716 return it;
696} 717}
697 718
698AddressBook::Iterator AddressBook::end() 719AddressBook::Iterator AddressBook::end()
699{ 720{
700 Iterator it = Iterator(); 721 Iterator it = Iterator();
701 it.d->mIt = d->mAddressees.end(); 722 it.d->mIt = d->mAddressees.end();
702 return it; 723 return it;
703} 724}
704 725
705AddressBook::ConstIterator AddressBook::end() const 726AddressBook::ConstIterator AddressBook::end() const
706{ 727{
707 ConstIterator it = ConstIterator(); 728 ConstIterator it = ConstIterator();
708 it.d->mIt = d->mAddressees.end(); 729 it.d->mIt = d->mAddressees.end();
709 return it; 730 return it;
710} 731}
711 732
712void AddressBook::clear() 733void AddressBook::clear()
713{ 734{
714 d->mAddressees.clear(); 735 d->mAddressees.clear();
715} 736}
716 737
717Ticket *AddressBook::requestSaveTicket( Resource *resource ) 738Ticket *AddressBook::requestSaveTicket( Resource *resource )
718{ 739{
719 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; 740 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl;
720 741
721 if ( !resource ) 742 if ( !resource )
722 { 743 {
723 qDebug("AddressBook::requestSaveTicket no resource" ); 744 qDebug("AddressBook::requestSaveTicket no resource" );
724 resource = standardResource(); 745 resource = standardResource();
725 } 746 }
726 747
727 KRES::Manager<Resource>::ActiveIterator it; 748 KRES::Manager<Resource>::ActiveIterator it;
728 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 749 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
729 if ( (*it) == resource ) { 750 if ( (*it) == resource ) {
730 if ( (*it)->readOnly() || !(*it)->isOpen() ) 751 if ( (*it)->readOnly() || !(*it)->isOpen() )
731 return 0; 752 return 0;
732 else 753 else
733 return (*it)->requestSaveTicket(); 754 return (*it)->requestSaveTicket();
734 } 755 }
735 } 756 }
736 757
737 return 0; 758 return 0;
738} 759}
739//void insertAddressee( const Addressee &, bool setRev = true, bool takeResource = false); 760//void insertAddressee( const Addressee &, bool setRev = true, bool takeResource = false);
740void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource ) 761void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource )
741{ 762{
742 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) { 763 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) {
743 //qDebug("block insert "); 764 //qDebug("block insert ");
744 return; 765 return;
745 } 766 }
746 //qDebug("inserting.... %s ",a.uid().latin1() ); 767 //qDebug("inserting.... %s ",a.uid().latin1() );
747 bool found = false; 768 bool found = false;
748 Addressee::List::Iterator it; 769 Addressee::List::Iterator it;
749 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { 770 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
750 if ( a.uid() == (*it).uid() ) { 771 if ( a.uid() == (*it).uid() ) {
751 772
752 bool changed = false; 773 bool changed = false;
753 Addressee addr = a; 774 Addressee addr = a;
754 if ( addr != (*it) ) 775 if ( addr != (*it) )
755 changed = true; 776 changed = true;
756 777
757 if ( takeResource ) { 778 if ( takeResource ) {
758 Resource * res = (*it).resource(); 779 Resource * res = (*it).resource();
759 (*it) = a; 780 (*it) = a;
760 (*it).setResource( res ); 781 (*it).setResource( res );
761 } else { 782 } else {
762 (*it) = a; 783 (*it) = a;
763 if ( (*it).resource() == 0 ) 784 if ( (*it).resource() == 0 )
764 (*it).setResource( standardResource() ); 785 (*it).setResource( standardResource() );
765 } 786 }
766 if ( changed ) { 787 if ( changed ) {
767 if ( setRev ) { 788 if ( setRev ) {
768 789
769 // get rid of micro seconds 790 // get rid of micro seconds
770 QDateTime dt = QDateTime::currentDateTime(); 791 QDateTime dt = QDateTime::currentDateTime();
771 QTime t = dt.time(); 792 QTime t = dt.time();
772 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 793 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
773 (*it).setRevision( dt ); 794 (*it).setRevision( dt );
774 } 795 }
775 (*it).setChanged( true ); 796 (*it).setChanged( true );
776 } 797 }
777 798
778 found = true; 799 found = true;
779 } else { 800 } else {
780 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 801 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
781 QString name = (*it).uid().mid( 19 ); 802 QString name = (*it).uid().mid( 19 );
782 Addressee b = a; 803 Addressee b = a;
783 QString id = b.getID( name ); 804 QString id = b.getID( name );
784 if ( ! id.isEmpty() ) { 805 if ( ! id.isEmpty() ) {
785 QString des = (*it).note(); 806 QString des = (*it).note();
786 int startN; 807 int startN;
787 if( (startN = des.find( id ) ) >= 0 ) { 808 if( (startN = des.find( id ) ) >= 0 ) {
788 int endN = des.find( ",", startN+1 ); 809 int endN = des.find( ",", startN+1 );
789 des = des.left( startN ) + des.mid( endN+1 ); 810 des = des.left( startN ) + des.mid( endN+1 );
790 (*it).setNote( des ); 811 (*it).setNote( des );
791 } 812 }
792 } 813 }
793 } 814 }
794 } 815 }
795 } 816 }
796 if ( found ) 817 if ( found )
797 return; 818 return;
798 d->mAddressees.append( a ); 819 d->mAddressees.append( a );
799 Addressee& addr = d->mAddressees.last(); 820 Addressee& addr = d->mAddressees.last();
800 if ( addr.resource() == 0 ) 821 if ( addr.resource() == 0 )
801 addr.setResource( standardResource() ); 822 addr.setResource( standardResource() );
802 823
803 addr.setChanged( true ); 824 addr.setChanged( true );
804} 825}
805 826
806void AddressBook::removeAddressee( const Addressee &a ) 827void AddressBook::removeAddressee( const Addressee &a )
807{ 828{
808 Iterator it; 829 Iterator it;
809 Iterator it2; 830 Iterator it2;
810 bool found = false; 831 bool found = false;
811 for ( it = begin(); it != end(); ++it ) { 832 for ( it = begin(); it != end(); ++it ) {
812 if ( a.uid() == (*it).uid() ) { 833 if ( a.uid() == (*it).uid() ) {
813 found = true; 834 found = true;
814 it2 = it; 835 it2 = it;
815 } else { 836 } else {
816 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 837 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
817 QString name = (*it).uid().mid( 19 ); 838 QString name = (*it).uid().mid( 19 );
818 Addressee b = a; 839 Addressee b = a;
819 QString id = b.getID( name ); 840 QString id = b.getID( name );
820 if ( ! id.isEmpty() ) { 841 if ( ! id.isEmpty() ) {
821 QString des = (*it).note(); 842 QString des = (*it).note();
822 if( des.find( id ) < 0 ) { 843 if( des.find( id ) < 0 ) {
823 des += id + ","; 844 des += id + ",";
824 (*it).setNote( des ); 845 (*it).setNote( des );
825 } 846 }
826 } 847 }
827 } 848 }
828 849
829 } 850 }
830 } 851 }
831 852
832 if ( found ) 853 if ( found )
833 removeAddressee( it2 ); 854 removeAddressee( it2 );
834 855
835} 856}
836 857
837void AddressBook::removeSyncAddressees( bool removeDeleted ) 858void AddressBook::removeSyncAddressees( bool removeDeleted )
838{ 859{
839 Iterator it = begin(); 860 Iterator it = begin();
840 Iterator it2 ; 861 Iterator it2 ;
841 QDateTime dt ( QDate( 2004,1,1) ); 862 QDateTime dt ( QDate( 2004,1,1) );
842 while ( it != end() ) { 863 while ( it != end() ) {
843 (*it).setRevision( dt ); 864 (*it).setRevision( dt );
844 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" ); 865 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" );
845 (*it).setIDStr(""); 866 (*it).setIDStr("");
846 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) { 867 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) {
847 it2 = it; 868 it2 = it;
848 //qDebug("removing %s ",(*it).uid().latin1() ); 869 //qDebug("removing %s ",(*it).uid().latin1() );
849 ++it; 870 ++it;
850 removeAddressee( it2 ); 871 removeAddressee( it2 );
851 } else { 872 } else {
852 //qDebug("skipping %s ",(*it).uid().latin1() ); 873 //qDebug("skipping %s ",(*it).uid().latin1() );
853 ++it; 874 ++it;
854 } 875 }
855 } 876 }
856 deleteRemovedAddressees(); 877 deleteRemovedAddressees();
857} 878}
858 879
859void AddressBook::removeAddressee( const Iterator &it ) 880void AddressBook::removeAddressee( const Iterator &it )
860{ 881{
861 d->mRemovedAddressees.append( (*it) ); 882 d->mRemovedAddressees.append( (*it) );
862 d->mAddressees.remove( it.d->mIt ); 883 d->mAddressees.remove( it.d->mIt );
863} 884}
864 885
865AddressBook::Iterator AddressBook::find( const Addressee &a ) 886AddressBook::Iterator AddressBook::find( const Addressee &a )
866{ 887{
867 Iterator it; 888 Iterator it;
868 for ( it = begin(); it != end(); ++it ) { 889 for ( it = begin(); it != end(); ++it ) {
869 if ( a.uid() == (*it).uid() ) { 890 if ( a.uid() == (*it).uid() ) {
870 return it; 891 return it;
871 } 892 }
872 } 893 }
873 return end(); 894 return end();
874} 895}
875 896
876Addressee AddressBook::findByUid( const QString &uid ) 897Addressee AddressBook::findByUid( const QString &uid )
877{ 898{
878 Iterator it; 899 Iterator it;
879 for ( it = begin(); it != end(); ++it ) { 900 for ( it = begin(); it != end(); ++it ) {
880 if ( uid == (*it).uid() ) { 901 if ( uid == (*it).uid() ) {
881 return *it; 902 return *it;
882 } 903 }
883 } 904 }
884 return Addressee(); 905 return Addressee();
885} 906}
886void AddressBook::preExternSync( AddressBook* aBook, const QString& csd , bool isSubset ) 907void AddressBook::preExternSync( AddressBook* aBook, const QString& csd , bool isSubset )
887{ 908{
888 //qDebug("AddressBook::preExternSync "); 909 //qDebug("AddressBook::preExternSync ");
889 AddressBook::Iterator it; 910 AddressBook::Iterator it;
890 for ( it = begin(); it != end(); ++it ) { 911 for ( it = begin(); it != end(); ++it ) {
891 (*it).setID( csd, (*it).externalUID() ); 912 (*it).setID( csd, (*it).externalUID() );
892 (*it).computeCsum( csd ); 913 (*it).computeCsum( csd );
893 } 914 }
894 mergeAB( aBook ,csd, isSubset ); 915 mergeAB( aBook ,csd, isSubset );
895} 916}
896void AddressBook::postExternSync( AddressBook* aBook , const QString& csd) 917void AddressBook::postExternSync( AddressBook* aBook , const QString& csd)
897{ 918{
898 //qDebug("AddressBook::postExternSync "); 919 //qDebug("AddressBook::postExternSync ");
899 AddressBook::Iterator it; 920 AddressBook::Iterator it;
900 for ( it = begin(); it != end(); ++it ) { 921 for ( it = begin(); it != end(); ++it ) {
901 // qDebug("check uid %s ", (*it).uid().latin1() ); 922 // qDebug("check uid %s ", (*it).uid().latin1() );
902 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID || 923 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ||
903 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) { 924 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) {
904 Addressee ad = aBook->findByUid( ( (*it).uid() )); 925 Addressee ad = aBook->findByUid( ( (*it).uid() ));
905 if ( ad.isEmpty() ) { 926 if ( ad.isEmpty() ) {
906 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1()); 927 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1());
907 } else { 928 } else {
908 (*it).computeCsum( csd ); 929 (*it).computeCsum( csd );
909 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) 930 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID )
910 ad.setID( csd, (*it).externalUID() ); 931 ad.setID( csd, (*it).externalUID() );
911 ad.setCsum( csd, (*it).getCsum( csd ) ); 932 ad.setCsum( csd, (*it).getCsum( csd ) );
912 aBook->insertAddressee( ad ); 933 aBook->insertAddressee( ad );
913 } 934 }
914 } 935 }
915 } 936 }
916} 937}
917 938
918bool AddressBook::containsExternalUid( const QString& uid ) 939bool AddressBook::containsExternalUid( const QString& uid )
919{ 940{
920 Iterator it; 941 Iterator it;
921 for ( it = begin(); it != end(); ++it ) { 942 for ( it = begin(); it != end(); ++it ) {
922 if ( uid == (*it).externalUID( ) ) 943 if ( uid == (*it).externalUID( ) )
923 return true; 944 return true;
924 } 945 }
925 return false; 946 return false;
926} 947}
927Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile ) 948Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile )
928{ 949{
929 Iterator it; 950 Iterator it;
930 for ( it = begin(); it != end(); ++it ) { 951 for ( it = begin(); it != end(); ++it ) {
931 if ( uid == (*it).getID( profile ) ) 952 if ( uid == (*it).getID( profile ) )
932 return (*it); 953 return (*it);
933 } 954 }
934 return Addressee(); 955 return Addressee();
935} 956}
936void AddressBook::mergeAB( AddressBook *aBook, const QString& profile , bool isSubset ) 957void AddressBook::mergeAB( AddressBook *aBook, const QString& profile , bool isSubset )
937{ 958{
938 Iterator it; 959 Iterator it;
939 Addressee ad; 960 Addressee ad;
940 for ( it = begin(); it != end(); ++it ) { 961 for ( it = begin(); it != end(); ++it ) {
941 ad = aBook->findByExternUid( (*it).externalUID(), profile ); 962 ad = aBook->findByExternUid( (*it).externalUID(), profile );
942 if ( !ad.isEmpty() ) { 963 if ( !ad.isEmpty() ) {
943 (*it).mergeContact( ad ,isSubset); 964 (*it).mergeContact( ad ,isSubset);
944 } 965 }
945 } 966 }
946#if 0 967#if 0
947 // test only 968 // test only
948 for ( it = begin(); it != end(); ++it ) { 969 for ( it = begin(); it != end(); ++it ) {
949 970
950 qDebug("uid %s ", (*it).uid().latin1()); 971 qDebug("uid %s ", (*it).uid().latin1());
951 } 972 }
952#endif 973#endif
953} 974}
954 975
955#if 0 976#if 0
956Addressee::List AddressBook::getExternLastSyncAddressees() 977Addressee::List AddressBook::getExternLastSyncAddressees()
957{ 978{
958 Addressee::List results; 979 Addressee::List results;
959 980
960 Iterator it; 981 Iterator it;
961 for ( it = begin(); it != end(); ++it ) { 982 for ( it = begin(); it != end(); ++it ) {
962 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { 983 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
963 if ( (*it).familyName().left(4) == "!E: " ) 984 if ( (*it).familyName().left(4) == "!E: " )
964 results.append( *it ); 985 results.append( *it );
965 } 986 }
966 } 987 }
967 988
968 return results; 989 return results;
969} 990}
970#endif 991#endif
971void AddressBook::resetTempSyncStat() 992void AddressBook::resetTempSyncStat()
972{ 993{
973 Iterator it; 994 Iterator it;
974 for ( it = begin(); it != end(); ++it ) { 995 for ( it = begin(); it != end(); ++it ) {
975 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 996 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
976 } 997 }
977 998
978} 999}
979 1000
980QStringList AddressBook:: uidList() 1001QStringList AddressBook:: uidList()
981{ 1002{
982 QStringList results; 1003 QStringList results;
983 Iterator it; 1004 Iterator it;
984 for ( it = begin(); it != end(); ++it ) { 1005 for ( it = begin(); it != end(); ++it ) {
985 results.append( (*it).uid() ); 1006 results.append( (*it).uid() );
986 } 1007 }
987 return results; 1008 return results;
988} 1009}
989 1010
990 1011
991Addressee::List AddressBook::allAddressees() 1012Addressee::List AddressBook::allAddressees()
992{ 1013{
993 return d->mAddressees; 1014 return d->mAddressees;
994 1015
995} 1016}
996 1017
997Addressee::List AddressBook::findByName( const QString &name ) 1018Addressee::List AddressBook::findByName( const QString &name )
998{ 1019{
999 Addressee::List results; 1020 Addressee::List results;
1000 1021
1001 Iterator it; 1022 Iterator it;
1002 for ( it = begin(); it != end(); ++it ) { 1023 for ( it = begin(); it != end(); ++it ) {
1003 if ( name == (*it).realName() ) { 1024 if ( name == (*it).realName() ) {
1004 results.append( *it ); 1025 results.append( *it );
1005 } 1026 }
1006 } 1027 }
1007 1028
1008 return results; 1029 return results;
1009} 1030}
1010 1031
1011Addressee::List AddressBook::findByEmail( const QString &email ) 1032Addressee::List AddressBook::findByEmail( const QString &email )
1012{ 1033{
1013 Addressee::List results; 1034 Addressee::List results;
1014 QStringList mailList; 1035 QStringList mailList;
1015 1036
1016 Iterator it; 1037 Iterator it;
1017 for ( it = begin(); it != end(); ++it ) { 1038 for ( it = begin(); it != end(); ++it ) {
1018 mailList = (*it).emails(); 1039 mailList = (*it).emails();
1019 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 1040 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
1020 if ( email == (*ite) ) { 1041 if ( email == (*ite) ) {
1021 results.append( *it ); 1042 results.append( *it );
1022 } 1043 }
1023 } 1044 }
1024 } 1045 }
1025 1046
1026 return results; 1047 return results;
1027} 1048}
1028 1049
1029Addressee::List AddressBook::findByCategory( const QString &category ) 1050Addressee::List AddressBook::findByCategory( const QString &category )
1030{ 1051{
1031 Addressee::List results; 1052 Addressee::List results;
1032 1053
1033 Iterator it; 1054 Iterator it;
1034 for ( it = begin(); it != end(); ++it ) { 1055 for ( it = begin(); it != end(); ++it ) {
1035 if ( (*it).hasCategory( category) ) { 1056 if ( (*it).hasCategory( category) ) {
1036 results.append( *it ); 1057 results.append( *it );
1037 } 1058 }
1038 } 1059 }
1039 1060
1040 return results; 1061 return results;
1041} 1062}
1042 1063
1043void AddressBook::dump() const 1064void AddressBook::dump() const
1044{ 1065{
1045 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 1066 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
1046 1067
1047 ConstIterator it; 1068 ConstIterator it;
1048 for( it = begin(); it != end(); ++it ) { 1069 for( it = begin(); it != end(); ++it ) {
1049 (*it).dump(); 1070 (*it).dump();
1050 } 1071 }
1051 1072
1052 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 1073 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
1053} 1074}
1054 1075
1055QString AddressBook::identifier() 1076QString AddressBook::identifier()
1056{ 1077{
1057 QStringList identifier; 1078 QStringList identifier;
1058 1079
1059 1080
1060 KRES::Manager<Resource>::ActiveIterator it; 1081 KRES::Manager<Resource>::ActiveIterator it;
1061 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 1082 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
1062 if ( !(*it)->identifier().isEmpty() ) 1083 if ( !(*it)->identifier().isEmpty() )
1063 identifier.append( (*it)->identifier() ); 1084 identifier.append( (*it)->identifier() );
1064 } 1085 }
1065 1086
1066 return identifier.join( ":" ); 1087 return identifier.join( ":" );
1067} 1088}
1068 1089
1069Field::List AddressBook::fields( int category ) 1090Field::List AddressBook::fields( int category )
1070{ 1091{
1071 if ( d->mAllFields.isEmpty() ) { 1092 if ( d->mAllFields.isEmpty() ) {
1072 d->mAllFields = Field::allFields(); 1093 d->mAllFields = Field::allFields();
1073 } 1094 }
1074 1095
1075 if ( category == Field::All ) return d->mAllFields; 1096 if ( category == Field::All ) return d->mAllFields;
1076 1097
1077 Field::List result; 1098 Field::List result;
1078 Field::List::ConstIterator it; 1099 Field::List::ConstIterator it;
1079 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 1100 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
1080 if ( (*it)->category() & category ) result.append( *it ); 1101 if ( (*it)->category() & category ) result.append( *it );
1081 } 1102 }
1082 1103
1083 return result; 1104 return result;
1084} 1105}
1085 1106
1086bool AddressBook::addCustomField( const QString &label, int category, 1107bool AddressBook::addCustomField( const QString &label, int category,
1087 const QString &key, const QString &app ) 1108 const QString &key, const QString &app )
1088{ 1109{
1089 if ( d->mAllFields.isEmpty() ) { 1110 if ( d->mAllFields.isEmpty() ) {
1090 d->mAllFields = Field::allFields(); 1111 d->mAllFields = Field::allFields();
1091 } 1112 }
1092//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 1113//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
1093 QString a = app.isNull() ? KGlobal::getAppName() : app; 1114 QString a = app.isNull() ? KGlobal::getAppName() : app;
1094 1115
1095 QString k = key.isNull() ? label : key; 1116 QString k = key.isNull() ? label : key;
1096 1117
1097 Field *field = Field::createCustomField( label, category, k, a ); 1118 Field *field = Field::createCustomField( label, category, k, a );
1098 1119
1099 if ( !field ) return false; 1120 if ( !field ) return false;
1100 1121
1101 d->mAllFields.append( field ); 1122 d->mAllFields.append( field );
1102 1123
1103 return true; 1124 return true;
1104} 1125}
1105 1126
1106QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 1127QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
1107{ 1128{
1108 if (!ab.d) return s; 1129 if (!ab.d) return s;
1109 1130
1110 return s << ab.d->mAddressees; 1131 return s << ab.d->mAddressees;
1111} 1132}
1112 1133
1113QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 1134QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
1114{ 1135{
1115 if (!ab.d) return s; 1136 if (!ab.d) return s;
1116 1137
1117 s >> ab.d->mAddressees; 1138 s >> ab.d->mAddressees;
1118 1139
1119 return s; 1140 return s;
1120} 1141}
1121 1142
1122bool AddressBook::addResource( Resource *resource ) 1143bool AddressBook::addResource( Resource *resource )
1123{ 1144{
1124 if ( !resource->open() ) { 1145 if ( !resource->open() ) {
1125 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 1146 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
1126 return false; 1147 return false;
1127 } 1148 }
1128 1149
1129 resource->setAddressBook( this ); 1150 resource->setAddressBook( this );
1130 1151
1131 d->mManager->add( resource ); 1152 d->mManager->add( resource );
1132 return true; 1153 return true;
1133} 1154}
1134 1155
1135bool AddressBook::removeResource( Resource *resource ) 1156bool AddressBook::removeResource( Resource *resource )
1136{ 1157{
1137 resource->close(); 1158 resource->close();
1138 1159
1139 if ( resource == standardResource() ) 1160 if ( resource == standardResource() )
1140 d->mManager->setStandardResource( 0 ); 1161 d->mManager->setStandardResource( 0 );
1141 1162
1142 resource->setAddressBook( 0 ); 1163 resource->setAddressBook( 0 );
1143 1164
1144 d->mManager->remove( resource ); 1165 d->mManager->remove( resource );
1145 return true; 1166 return true;
1146} 1167}
1147 1168
1148QPtrList<Resource> AddressBook::resources() 1169QPtrList<Resource> AddressBook::resources()
1149{ 1170{
1150 QPtrList<Resource> list; 1171 QPtrList<Resource> list;
1151 1172
1152// qDebug("AddressBook::resources() 1"); 1173// qDebug("AddressBook::resources() 1");
1153 1174
1154 KRES::Manager<Resource>::ActiveIterator it; 1175 KRES::Manager<Resource>::ActiveIterator it;
1155 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 1176 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
1156 list.append( *it ); 1177 list.append( *it );
1157 1178
1158 return list; 1179 return list;
1159} 1180}
1160 1181
1161/*US 1182/*US
1162void AddressBook::setErrorHandler( ErrorHandler *handler ) 1183void AddressBook::setErrorHandler( ErrorHandler *handler )
1163{ 1184{
1164 delete d->mErrorHandler; 1185 delete d->mErrorHandler;
1165 d->mErrorHandler = handler; 1186 d->mErrorHandler = handler;
1166} 1187}
1167*/ 1188*/
1168 1189
1169void AddressBook::error( const QString& msg ) 1190void AddressBook::error( const QString& msg )
1170{ 1191{
1171/*US 1192/*US
1172 if ( !d->mErrorHandler ) // create default error handler 1193 if ( !d->mErrorHandler ) // create default error handler
1173 d->mErrorHandler = new ConsoleErrorHandler; 1194 d->mErrorHandler = new ConsoleErrorHandler;
1174 1195
1175 if ( d->mErrorHandler ) 1196 if ( d->mErrorHandler )
1176 d->mErrorHandler->error( msg ); 1197 d->mErrorHandler->error( msg );
1177 else 1198 else
1178 kdError(5700) << "no error handler defined" << endl; 1199 kdError(5700) << "no error handler defined" << endl;
1179*/ 1200*/
1180 kdDebug(5700) << "msg" << endl; 1201 kdDebug(5700) << "msg" << endl;
1181 qDebug(msg); 1202 qDebug(msg);
1182} 1203}
1183 1204
1184void AddressBook::deleteRemovedAddressees() 1205void AddressBook::deleteRemovedAddressees()
1185{ 1206{
1186 Addressee::List::Iterator it; 1207 Addressee::List::Iterator it;
1187 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 1208 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
1188 Resource *resource = (*it).resource(); 1209 Resource *resource = (*it).resource();
1189 if ( resource && !resource->readOnly() && resource->isOpen() ) 1210 if ( resource && !resource->readOnly() && resource->isOpen() )
1190 resource->removeAddressee( *it ); 1211 resource->removeAddressee( *it );
1191 } 1212 }
1192 1213
1193 d->mRemovedAddressees.clear(); 1214 d->mRemovedAddressees.clear();
1194} 1215}
1195 1216
1196void AddressBook::setStandardResource( Resource *resource ) 1217void AddressBook::setStandardResource( Resource *resource )
1197{ 1218{
1198// qDebug("AddressBook::setStandardResource 1"); 1219// qDebug("AddressBook::setStandardResource 1");
1199 d->mManager->setStandardResource( resource ); 1220 d->mManager->setStandardResource( resource );
1200} 1221}
1201 1222
1202Resource *AddressBook::standardResource() 1223Resource *AddressBook::standardResource()
1203{ 1224{
1204 return d->mManager->standardResource(); 1225 return d->mManager->standardResource();
1205} 1226}
1206 1227
1207KRES::Manager<Resource> *AddressBook::resourceManager() 1228KRES::Manager<Resource> *AddressBook::resourceManager()
1208{ 1229{
1209 return d->mManager; 1230 return d->mManager;
1210} 1231}
1211 1232
1212void AddressBook::cleanUp() 1233void AddressBook::cleanUp()
1213{ 1234{
1214 KRES::Manager<Resource>::ActiveIterator it; 1235 KRES::Manager<Resource>::ActiveIterator it;
1215 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 1236 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
1216 if ( !(*it)->readOnly() && (*it)->isOpen() ) 1237 if ( !(*it)->readOnly() && (*it)->isOpen() )
1217 (*it)->cleanUp(); 1238 (*it)->cleanUp();
1218 } 1239 }
1219} 1240}