summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
authorzautrix <zautrix>2005-01-18 10:15:21 (UTC)
committer zautrix <zautrix>2005-01-18 10:15:21 (UTC)
commitfbc1ca53388337b66017973896725d51416aae1a (patch) (unidiff)
tree436dd042c407dd994976c8e460d4c85d527799b7 /kabc/addressee.cpp
parentf973a8310cc378cc86d96bfce3f08f06725a2b7d (diff)
downloadkdepimpi-fbc1ca53388337b66017973896725d51416aae1a.zip
kdepimpi-fbc1ca53388337b66017973896725d51416aae1a.tar.gz
kdepimpi-fbc1ca53388337b66017973896725d51416aae1a.tar.bz2
fix
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 82b4b9b..bfcfab5 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,722 +1,741 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#include <kconfig.h> 29#include <kconfig.h>
30 30
31#include <ksharedptr.h> 31#include <ksharedptr.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kapplication.h> 33#include <kapplication.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kidmanager.h> 35#include <kidmanager.h>
36//US 36//US
37#include <kstandarddirs.h> 37#include <kstandarddirs.h>
38#include <libkcal/syncdefines.h> 38#include <libkcal/syncdefines.h>
39 39
40//US #include "resource.h" 40//US #include "resource.h"
41#include "addressee.h" 41#include "addressee.h"
42 42
43using namespace KABC; 43using namespace KABC;
44 44
45static bool matchBinaryPattern( int value, int pattern ); 45static bool matchBinaryPattern( int value, int pattern );
46static bool matchBinaryPatternA( int value, int pattern ); 46static bool matchBinaryPatternA( int value, int pattern );
47static bool matchBinaryPatternP( int value, int pattern ); 47static bool matchBinaryPatternP( int value, int pattern );
48 48
49struct Addressee::AddresseeData : public KShared 49struct Addressee::AddresseeData : public KShared
50{ 50{
51 QString uid; 51 QString uid;
52 QString name; 52 QString name;
53 QString formattedName; 53 QString formattedName;
54 QString familyName; 54 QString familyName;
55 QString givenName; 55 QString givenName;
56 QString additionalName; 56 QString additionalName;
57 QString prefix; 57 QString prefix;
58 QString suffix; 58 QString suffix;
59 QString nickName; 59 QString nickName;
60 QDateTime birthday; 60 QDateTime birthday;
61 QString mailer; 61 QString mailer;
62 TimeZone timeZone; 62 TimeZone timeZone;
63 Geo geo; 63 Geo geo;
64 QString title; 64 QString title;
65 QString role; 65 QString role;
66 QString organization; 66 QString organization;
67 QString note; 67 QString note;
68 QString productId; 68 QString productId;
69 QDateTime revision; 69 QDateTime revision;
70 QString sortString; 70 QString sortString;
71 QString externalUID; 71 QString externalUID;
72 QString originalExternalUID; 72 QString originalExternalUID;
73 KURL url; 73 KURL url;
74 Secrecy secrecy; 74 Secrecy secrecy;
75 Picture logo; 75 Picture logo;
76 Picture photo; 76 Picture photo;
77 Sound sound; 77 Sound sound;
78 Agent agent; 78 Agent agent;
79 QString mExternalId; 79 QString mExternalId;
80 PhoneNumber::List phoneNumbers; 80 PhoneNumber::List phoneNumbers;
81 Address::List addresses; 81 Address::List addresses;
82 Key::List keys; 82 Key::List keys;
83 QStringList emails; 83 QStringList emails;
84 QStringList categories; 84 QStringList categories;
85 QStringList custom; 85 QStringList custom;
86 int mTempSyncStat; 86 int mTempSyncStat;
87 Resource *resource; 87 Resource *resource;
88 88
89 bool empty :1; 89 bool empty :1;
90 bool changed :1; 90 bool changed :1;
91 bool tagged :1; 91 bool tagged :1;
92}; 92};
93 93
94Addressee::Addressee() 94Addressee::Addressee()
95{ 95{
96 mData = new AddresseeData; 96 mData = new AddresseeData;
97 mData->empty = true; 97 mData->empty = true;
98 mData->changed = false; 98 mData->changed = false;
99 mData->resource = 0; 99 mData->resource = 0;
100 mData->mExternalId = ":"; 100 mData->mExternalId = ":";
101 mData->revision = QDateTime ( QDate( 2003,1,1)); 101 mData->revision = QDateTime ( QDate( 2003,1,1));
102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
103} 103}
104 104
105Addressee::~Addressee() 105Addressee::~Addressee()
106{ 106{
107} 107}
108 108
109Addressee::Addressee( const Addressee &a ) 109Addressee::Addressee( const Addressee &a )
110{ 110{
111 mData = a.mData; 111 mData = a.mData;
112} 112}
113 113
114Addressee &Addressee::operator=( const Addressee &a ) 114Addressee &Addressee::operator=( const Addressee &a )
115{ 115{
116 mData = a.mData; 116 mData = a.mData;
117 return (*this); 117 return (*this);
118} 118}
119 119
120Addressee Addressee::copy() 120Addressee Addressee::copy()
121{ 121{
122 Addressee a; 122 Addressee a;
123 *(a.mData) = *mData; 123 *(a.mData) = *mData;
124 return a; 124 return a;
125} 125}
126 126
127void Addressee::detach() 127void Addressee::detach()
128{ 128{
129 if ( mData.count() == 1 ) return; 129 if ( mData.count() == 1 ) return;
130 *this = copy(); 130 *this = copy();
131} 131}
132 132
133bool Addressee::operator==( const Addressee &a ) const 133bool Addressee::operator==( const Addressee &a ) const
134{ 134{
135 if ( uid() != a.uid() ) return false; 135 if ( uid() != a.uid() ) return false;
136 if ( mData->name != a.mData->name ) return false; 136 if ( mData->name != a.mData->name ) return false;
137 if ( mData->formattedName != a.mData->formattedName ) return false; 137 if ( mData->formattedName != a.mData->formattedName ) return false;
138 if ( mData->familyName != a.mData->familyName ) return false; 138 if ( mData->familyName != a.mData->familyName ) return false;
139 if ( mData->givenName != a.mData->givenName ) return false; 139 if ( mData->givenName != a.mData->givenName ) return false;
140 if ( mData->additionalName != a.mData->additionalName ) return false; 140 if ( mData->additionalName != a.mData->additionalName ) return false;
141 if ( mData->prefix != a.mData->prefix ) return false; 141 if ( mData->prefix != a.mData->prefix ) return false;
142 if ( mData->suffix != a.mData->suffix ) return false; 142 if ( mData->suffix != a.mData->suffix ) return false;
143 if ( mData->nickName != a.mData->nickName ) return false; 143 if ( mData->nickName != a.mData->nickName ) return false;
144 if ( mData->birthday != a.mData->birthday ) return false; 144 if ( mData->birthday != a.mData->birthday ) return false;
145 if ( mData->mailer != a.mData->mailer ) return false; 145 if ( mData->mailer != a.mData->mailer ) return false;
146 if ( mData->timeZone != a.mData->timeZone ) return false; 146 if ( mData->timeZone != a.mData->timeZone ) return false;
147 if ( mData->geo != a.mData->geo ) return false; 147 if ( mData->geo != a.mData->geo ) return false;
148 if ( mData->title != a.mData->title ) return false; 148 if ( mData->title != a.mData->title ) return false;
149 if ( mData->role != a.mData->role ) return false; 149 if ( mData->role != a.mData->role ) return false;
150 if ( mData->organization != a.mData->organization ) return false; 150 if ( mData->organization != a.mData->organization ) return false;
151 if ( mData->note != a.mData->note ) return false; 151 if ( mData->note != a.mData->note ) return false;
152 if ( mData->productId != a.mData->productId ) return false; 152 if ( mData->productId != a.mData->productId ) return false;
153 //if ( mData->revision != a.mData->revision ) return false; 153 //if ( mData->revision != a.mData->revision ) return false;
154 if ( mData->sortString != a.mData->sortString ) return false; 154 if ( mData->sortString != a.mData->sortString ) return false;
155 if ( mData->secrecy != a.mData->secrecy ) return false; 155 if ( mData->secrecy != a.mData->secrecy ) return false;
156 if ( mData->logo != a.mData->logo ) return false; 156 if ( mData->logo != a.mData->logo ) return false;
157 if ( mData->photo != a.mData->photo ) return false; 157 if ( mData->photo != a.mData->photo ) return false;
158 if ( mData->sound != a.mData->sound ) return false; 158 if ( mData->sound != a.mData->sound ) return false;
159 if ( mData->agent != a.mData->agent ) return false; 159 if ( mData->agent != a.mData->agent ) return false;
160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
161 ( mData->url != a.mData->url ) ) return false; 161 ( mData->url != a.mData->url ) ) return false;
162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
163 if ( mData->addresses != a.mData->addresses ) return false; 163 if ( mData->addresses != a.mData->addresses ) return false;
164 if ( mData->keys != a.mData->keys ) return false; 164 if ( mData->keys != a.mData->keys ) return false;
165 if ( mData->emails != a.mData->emails ) return false; 165 if ( mData->emails != a.mData->emails ) return false;
166 if ( mData->categories != a.mData->categories ) return false; 166 if ( mData->categories != a.mData->categories ) return false;
167 if ( mData->custom != a.mData->custom ) return false; 167 if ( mData->custom != a.mData->custom ) return false;
168 168
169 return true; 169 return true;
170} 170}
171 171
172bool Addressee::operator!=( const Addressee &a ) const 172bool Addressee::operator!=( const Addressee &a ) const
173{ 173{
174 return !( a == *this ); 174 return !( a == *this );
175} 175}
176 176
177bool Addressee::isEmpty() const 177bool Addressee::isEmpty() const
178{ 178{
179 return mData->empty; 179 return mData->empty;
180} 180}
181ulong Addressee::getCsum4List( const QStringList & attList) 181ulong Addressee::getCsum4List( const QStringList & attList)
182{ 182{
183 int max = attList.count(); 183 int max = attList.count();
184 ulong cSum = 0; 184 ulong cSum = 0;
185 int j,k,i; 185 int j,k,i;
186 int add; 186 int add;
187 for ( i = 0; i < max ; ++i ) { 187 for ( i = 0; i < max ; ++i ) {
188 QString s = attList[i]; 188 QString s = attList[i];
189 if ( ! s.isEmpty() ){ 189 if ( ! s.isEmpty() ){
190 j = s.length(); 190 j = s.length();
191 for ( k = 0; k < j; ++k ) { 191 for ( k = 0; k < j; ++k ) {
192 int mul = k +1; 192 int mul = k +1;
193 add = s[k].unicode (); 193 add = s[k].unicode ();
194 if ( k < 16 ) 194 if ( k < 16 )
195 mul = mul * mul; 195 mul = mul * mul;
196 int ii = i+1; 196 int ii = i+1;
197 add = add * mul *ii*ii*ii; 197 add = add * mul *ii*ii*ii;
198 cSum += add; 198 cSum += add;
199 } 199 }
200 } 200 }
201 201
202 } 202 }
203 //QString dump = attList.join(","); 203 //QString dump = attList.join(",");
204 //qDebug("csum: %d %s", cSum,dump.latin1()); 204 //qDebug("csum: %d %s", cSum,dump.latin1());
205 205
206 return cSum; 206 return cSum;
207 207
208} 208}
209void Addressee::computeCsum(const QString &dev) 209void Addressee::computeCsum(const QString &dev)
210{ 210{
211 QStringList l; 211 QStringList l;
212 //if ( !mData->name.isEmpty() ) l.append(mData->name); 212 //if ( !mData->name.isEmpty() ) l.append(mData->name);
213 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 213 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
214 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 214 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
215 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 215 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
216 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName ); 216 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName );
217 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 217 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
218 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 218 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
219 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 219 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
220 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 220 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
221 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 221 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
222 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 222 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
223 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 223 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
224 if ( !mData->title .isEmpty() ) l.append( mData->title ); 224 if ( !mData->title .isEmpty() ) l.append( mData->title );
225 if ( !mData->role.isEmpty() ) l.append( mData->role ); 225 if ( !mData->role.isEmpty() ) l.append( mData->role );
226 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 226 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
227 if ( !mData->note.isEmpty() ) l.append( mData->note ); 227 if ( !mData->note.isEmpty() ) l.append( mData->note );
228 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 228 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
229 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 229 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
230 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 230 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
231 // if ( !mData->logo.isEmpty() ) l.append( ); 231 // if ( !mData->logo.isEmpty() ) l.append( );
232 //if ( !mData->photo.isEmpty() ) l.append( ); 232 //if ( !mData->photo.isEmpty() ) l.append( );
233 //if ( !mData->sound.isEmpty() ) l.append( ); 233 //if ( !mData->sound.isEmpty() ) l.append( );
234 //if ( !mData->agent.isEmpty() ) l.append( ); 234 //if ( !mData->agent.isEmpty() ) l.append( );
235 if ( mData->url.isValid() ) 235 if ( mData->url.isValid() )
236 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() ); 236 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() );
237 KABC::PhoneNumber::List phoneNumbers; 237 KABC::PhoneNumber::List phoneNumbers;
238 KABC::PhoneNumber::List::Iterator phoneIter; 238 KABC::PhoneNumber::List::Iterator phoneIter;
239 239
240 QStringList t; 240 QStringList t;
241 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 241 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
242 ++phoneIter ) 242 ++phoneIter )
243 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 243 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
244 t.sort(); 244 t.sort();
245 uint iii; 245 uint iii;
246 for ( iii = 0; iii < t.count(); ++iii) 246 for ( iii = 0; iii < t.count(); ++iii)
247 l.append( t[iii] ); 247 l.append( t[iii] );
248 t = mData->emails; 248 t = mData->emails;
249 t.sort(); 249 t.sort();
250 for ( iii = 0; iii < t.count(); ++iii) 250 for ( iii = 0; iii < t.count(); ++iii)
251 l.append( t[iii] ); 251 l.append( t[iii] );
252 t = mData->categories; 252 t = mData->categories;
253 t.sort(); 253 t.sort();
254 for ( iii = 0; iii < t.count(); ++iii) 254 for ( iii = 0; iii < t.count(); ++iii)
255 l.append( t[iii] ); 255 l.append( t[iii] );
256 t = mData->custom; 256 t = mData->custom;
257 t.sort(); 257 t.sort();
258 for ( iii = 0; iii < t.count(); ++iii) 258 for ( iii = 0; iii < t.count(); ++iii)
259 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { 259 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) {
260 int find = t[iii].find (':')+1; 260 int find = t[iii].find (':')+1;
261 //qDebug("lennnn %d %d ", find, t[iii].length()); 261 //qDebug("lennnn %d %d ", find, t[iii].length());
262 if ( find < t[iii].length()) 262 if ( find < t[iii].length())
263 l.append( t[iii] ); 263 l.append( t[iii] );
264 264
265 } 265 }
266 KABC::Address::List::Iterator addressIter; 266 KABC::Address::List::Iterator addressIter;
267 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 267 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
268 ++addressIter ) { 268 ++addressIter ) {
269 t = (*addressIter).asList(); 269 t = (*addressIter).asList();
270 t.sort(); 270 t.sort();
271 for ( iii = 0; iii < t.count(); ++iii) 271 for ( iii = 0; iii < t.count(); ++iii)
272 l.append( t[iii] ); 272 l.append( t[iii] );
273 } 273 }
274 uint cs = getCsum4List(l); 274 uint cs = getCsum4List(l);
275 275
276#if 0 276#if 0
277 for ( iii = 0; iii < l.count(); ++iii) 277 for ( iii = 0; iii < l.count(); ++iii)
278 qDebug("%d***%s***",iii,l[iii].latin1()); 278 qDebug("%d***%s***",iii,l[iii].latin1());
279 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); 279 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
280#endif 280#endif
281 281
282 setCsum( dev, QString::number (cs )); 282 setCsum( dev, QString::number (cs ));
283} 283}
284 284
285void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 285void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
286{ 286{
287 // merge all standard non-outlook fields. 287 // merge all standard non-outlook fields.
288 //if isSubSet (e.g. mobile phone sync) merge all fields 288 //if isSubSet (e.g. mobile phone sync) merge all fields
289 289
290 detach(); 290 detach();
291 if ( isSubSet ) { 291 if ( isSubSet ) {
292 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 292 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
293 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 293 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
294 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 294 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
295 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 295 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
296 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 296 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
297 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; 297 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix;
298 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; 298 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix;
299 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; 299 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ;
300 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; 300 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ;
301 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; 301 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName;
302 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; 302 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ;
303 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; 303 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ;
304 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; 304 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy;
305 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ; 305 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
306 if ( !mData->birthday.isValid() ) 306 if ( !mData->birthday.isValid() )
307 if ( ad.mData->birthday.isValid()) 307 if ( ad.mData->birthday.isValid())
308 mData->birthday = ad.mData->birthday; 308 mData->birthday = ad.mData->birthday;
309 309
310 } 310 }
311 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; 311 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
312 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; 312 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
313 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; 313 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
314 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; 314 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId;
315 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; 315 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString;
316 QStringList t; 316 QStringList t;
317 QStringList tAD; 317 QStringList tAD;
318 uint iii; 318 uint iii;
319 319
320 // ********** phone numbers 320 // ********** phone numbers
321 if ( isSubSet ) { 321 if ( isSubSet ) {
322 PhoneNumber::List phoneAD = ad.phoneNumbers(); 322 PhoneNumber::List phoneAD = ad.phoneNumbers();
323 PhoneNumber::List::Iterator phoneItAD; 323 PhoneNumber::List::Iterator phoneItAD;
324 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 324 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
325 bool found = false; 325 bool found = false;
326 PhoneNumber::List::Iterator it; 326 PhoneNumber::List::Iterator it;
327 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 327 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
328 if ( ( *phoneItAD ).contains( (*it) ) ) { 328 if ( ( *phoneItAD ).contains( (*it) ) ) {
329 found = true; 329 found = true;
330 (*it).setType( ( *phoneItAD ).type() ); 330 (*it).setType( ( *phoneItAD ).type() );
331 (*it).setNumber( ( *phoneItAD ).number() ); 331 (*it).setNumber( ( *phoneItAD ).number() );
332 break; 332 break;
333 } 333 }
334 } 334 }
335 // if ( isSubSet && ! found ) 335 // if ( isSubSet && ! found )
336 if ( ! found ) // LR try this one... 336 if ( ! found ) // LR try this one...
337 mData->phoneNumbers.append( *phoneItAD ); 337 mData->phoneNumbers.append( *phoneItAD );
338 } 338 }
339 } else {
340 PhoneNumber::List phoneAD = ad.phoneNumbers();
341 PhoneNumber::List::Iterator phoneItAD;
342 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
343 bool found = false;
344 PhoneNumber::List::Iterator it;
345 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
346 if ( ( *phoneItAD ).contains( (*it) ) ) {
347 found = true;
348 (*it).setType( ( *phoneItAD ).type() );
349 (*it).setNumber( ( *phoneItAD ).number() );
350 break;
351 }
352 }
353 if ( ! found ) { // append numbers which do not have work or home type
354 if ( ! ( ( *phoneItAD ).type() & (PhoneNumber::Work | PhoneNumber::Home) ) )
355 mData->phoneNumbers.append( *phoneItAD );
356 }
357 }
339 } 358 }
340 if ( isSubSet ) { 359 if ( isSubSet ) {
341 // ************* emails; 360 // ************* emails;
342 t = mData->emails; 361 t = mData->emails;
343 tAD = ad.mData->emails; 362 tAD = ad.mData->emails;
344 for ( iii = 0; iii < tAD.count(); ++iii) 363 for ( iii = 0; iii < tAD.count(); ++iii)
345 if ( !t.contains(tAD[iii] ) ) 364 if ( !t.contains(tAD[iii] ) )
346 mData->emails.append( tAD[iii] ); 365 mData->emails.append( tAD[iii] );
347 } 366 }
348 367
349 // ************* categories; 368 // ************* categories;
350 if ( isSubSet ) { 369 if ( isSubSet ) {
351 t = mData->categories; 370 t = mData->categories;
352 tAD = ad.mData->categories; 371 tAD = ad.mData->categories;
353 for ( iii = 0; iii < tAD.count(); ++iii) 372 for ( iii = 0; iii < tAD.count(); ++iii)
354 if ( !t.contains(tAD[iii] ) ) 373 if ( !t.contains(tAD[iii] ) )
355 mData->categories.append( tAD[iii] ); 374 mData->categories.append( tAD[iii] );
356 } 375 }
357 QStringList::ConstIterator it; 376 QStringList::ConstIterator it;
358 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) { 377 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) {
359 QString qualifiedName = (*it).left( (*it).find( ":" )); 378 QString qualifiedName = (*it).left( (*it).find( ":" ));
360 bool found = false; 379 bool found = false;
361 QStringList::ConstIterator itL; 380 QStringList::ConstIterator itL;
362 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) { 381 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) {
363 if ( (*itL).startsWith( qualifiedName ) ) { 382 if ( (*itL).startsWith( qualifiedName ) ) {
364 found = true; 383 found = true;
365 break; 384 break;
366 } 385 }
367 } 386 }
368 if ( ! found ) { 387 if ( ! found ) {
369 mData->custom.append( *it ); 388 mData->custom.append( *it );
370 } 389 }
371 } 390 }
372 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo; 391 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo;
373 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo; 392 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo;
374 if ( !mData->sound.isIntern() ) { 393 if ( !mData->sound.isIntern() ) {
375 if ( mData->sound.url().isEmpty() ) { 394 if ( mData->sound.url().isEmpty() ) {
376 mData->sound = ad.mData->sound; 395 mData->sound = ad.mData->sound;
377 } 396 }
378 } 397 }
379 if ( !mData->agent.isIntern() ) { 398 if ( !mData->agent.isIntern() ) {
380 if ( mData->agent.url().isEmpty() ) { 399 if ( mData->agent.url().isEmpty() ) {
381 mData->agent = ad.mData->agent; 400 mData->agent = ad.mData->agent;
382 } 401 }
383 } 402 }
384 { 403 {
385 Key::List::Iterator itA; 404 Key::List::Iterator itA;
386 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) { 405 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) {
387 bool found = false; 406 bool found = false;
388 Key::List::Iterator it; 407 Key::List::Iterator it;
389 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 408 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
390 if ( (*it) == (*itA)) { 409 if ( (*it) == (*itA)) {
391 found = true; 410 found = true;
392 break; 411 break;
393 412
394 } 413 }
395 } 414 }
396 if ( ! found ) { 415 if ( ! found ) {
397 mData->keys.append( *itA ); 416 mData->keys.append( *itA );
398 } 417 }
399 } 418 }
400 } 419 }
401 if ( isSubSet ) { 420 if ( isSubSet ) {
402 KABC::Address::List::Iterator addressIterA; 421 KABC::Address::List::Iterator addressIterA;
403 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) { 422 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) {
404 bool found = false; 423 bool found = false;
405 KABC::Address::List::Iterator addressIter; 424 KABC::Address::List::Iterator addressIter;
406 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 425 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
407 ++addressIter ) { 426 ++addressIter ) {
408 if ( (*addressIter) == (*addressIterA)) { 427 if ( (*addressIter) == (*addressIterA)) {
409 found = true; 428 found = true;
410 (*addressIter).setType( (*addressIterA).type() ); 429 (*addressIter).setType( (*addressIterA).type() );
411 break; 430 break;
412 } 431 }
413 432
414 } 433 }
415 if ( isSubSet && ! found ) { 434 if ( isSubSet && ! found ) {
416 mData->addresses.append( *addressIterA ); 435 mData->addresses.append( *addressIterA );
417 } 436 }
418 } 437 }
419 } 438 }
420 //qDebug("merge contact %s ", ad.uid().latin1()); 439 //qDebug("merge contact %s ", ad.uid().latin1());
421 setUid( ad.uid() ); 440 setUid( ad.uid() );
422 setRevision( ad.revision() ); 441 setRevision( ad.revision() );
423} 442}
424 443
425bool Addressee::removeVoice() 444bool Addressee::removeVoice()
426{ 445{
427 PhoneNumber::List phoneN = phoneNumbers(); 446 PhoneNumber::List phoneN = phoneNumbers();
428 PhoneNumber::List::Iterator phoneIt; 447 PhoneNumber::List::Iterator phoneIt;
429 bool found = false; 448 bool found = false;
430 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 449 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
431 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 450 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
432 if ((*phoneIt).type() - PhoneNumber::Voice ) { 451 if ((*phoneIt).type() - PhoneNumber::Voice ) {
433 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 452 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
434 insertPhoneNumber( (*phoneIt) ); 453 insertPhoneNumber( (*phoneIt) );
435 found = true; 454 found = true;
436 } 455 }
437 } 456 }
438 457
439 } 458 }
440 return found; 459 return found;
441} 460}
442 461
443bool Addressee::containsAdr(const Addressee& ad ) 462bool Addressee::containsAdr(const Addressee& ad )
444{ 463{
445 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false; 464 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false;
446 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false; 465 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false;
447 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ; 466 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ;
448 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ; 467 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ;
449 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ; 468 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ;
450 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ; 469 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ;
451 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ; 470 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ;
452 471
453 // compare phone numbers 472 // compare phone numbers
454 PhoneNumber::List phoneN = ad.phoneNumbers(); 473 PhoneNumber::List phoneN = ad.phoneNumbers();
455 PhoneNumber::List::Iterator phoneIt; 474 PhoneNumber::List::Iterator phoneIt;
456 bool found = false; 475 bool found = false;
457 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 476 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
458 bool found = false; 477 bool found = false;
459 PhoneNumber::List phoneL = ad.phoneNumbers(); 478 PhoneNumber::List phoneL = ad.phoneNumbers();
460 PhoneNumber::List::Iterator phoneItL; 479 PhoneNumber::List::Iterator phoneItL;
461 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) { 480 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) {
462 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) { 481 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) {
463 found = true; 482 found = true;
464 break; 483 break;
465 } 484 }
466 } 485 }
467 if ( ! found ) 486 if ( ! found )
468 return false; 487 return false;
469 } 488 }
470 return true; 489 return true;
471 490
472} 491}
473void Addressee::simplifyAddresses() 492void Addressee::simplifyAddresses()
474{ 493{
475 494
476 495
477 Address::List list; 496 Address::List list;
478 Address::List::Iterator it; 497 Address::List::Iterator it;
479 Address::List::Iterator it2; 498 Address::List::Iterator it2;
480 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 499 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
481 it2 = it; 500 it2 = it;
482 ++it2; 501 ++it2;
483 for( ; it2 != mData->addresses.end(); ++it2 ) { 502 for( ; it2 != mData->addresses.end(); ++it2 ) {
484 if ( (*it) == (*it2) ) { 503 if ( (*it) == (*it2) ) {
485 list.append( *it ); 504 list.append( *it );
486 break; 505 break;
487 } 506 }
488 } 507 }
489 } 508 }
490 for( it = list.begin(); it != list.end(); ++it ) { 509 for( it = list.begin(); it != list.end(); ++it ) {
491 removeAddress( (*it) ); 510 removeAddress( (*it) );
492 } 511 }
493 512
494 list.clear(); 513 list.clear();
495 int max = 2; 514 int max = 2;
496 if ( mData->url.isValid() ) 515 if ( mData->url.isValid() )
497 max = 1; 516 max = 1;
498 if ( mData->addresses.count() <= max ) return ; 517 if ( mData->addresses.count() <= max ) return ;
499 int count = 0; 518 int count = 0;
500 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 519 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
501 if ( count >= max ) 520 if ( count >= max )
502 list.append( *it ); 521 list.append( *it );
503 ++count; 522 ++count;
504 } 523 }
505 for( it = list.begin(); it != list.end(); ++it ) { 524 for( it = list.begin(); it != list.end(); ++it ) {
506 removeAddress( (*it) ); 525 removeAddress( (*it) );
507 } 526 }
508} 527}
509 528
510// removes all emails but the first 529// removes all emails but the first
511// needed by phone sync 530// needed by phone sync
512void Addressee::simplifyEmails() 531void Addressee::simplifyEmails()
513{ 532{
514 if ( mData->emails.count() == 0 ) return ; 533 if ( mData->emails.count() == 0 ) return ;
515 QString email = mData->emails.first(); 534 QString email = mData->emails.first();
516 detach(); 535 detach();
517 mData->emails.clear(); 536 mData->emails.clear();
518 mData->emails.append( email ); 537 mData->emails.append( email );
519} 538}
520 539
521void Addressee::simplifyPhoneNumbers() 540void Addressee::simplifyPhoneNumbers()
522{ 541{
523 int max = 4; 542 int max = 4;
524 int inList = mData->phoneNumbers.count(); 543 int inList = mData->phoneNumbers.count();
525 KABC::PhoneNumber::List removeNumbers; 544 KABC::PhoneNumber::List removeNumbers;
526 KABC::PhoneNumber::List::Iterator phoneIter; 545 KABC::PhoneNumber::List::Iterator phoneIter;
527 if ( inList > max ) { 546 if ( inList > max ) {
528 // delete non-preferred numbers 547 // delete non-preferred numbers
529 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 548 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
530 ++phoneIter ) { 549 ++phoneIter ) {
531 if ( inList > max ) { 550 if ( inList > max ) {
532 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { 551 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) {
533 removeNumbers.append( ( *phoneIter ) ); 552 removeNumbers.append( ( *phoneIter ) );
534 --inList; 553 --inList;
535 } 554 }
536 } else 555 } else
537 break; 556 break;
538 } 557 }
539 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 558 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
540 ++phoneIter ) { 559 ++phoneIter ) {
541 removePhoneNumber(( *phoneIter )); 560 removePhoneNumber(( *phoneIter ));
542 } 561 }
543 // delete preferred numbers 562 // delete preferred numbers
544 if ( inList > max ) { 563 if ( inList > max ) {
545 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 564 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
546 ++phoneIter ) { 565 ++phoneIter ) {
547 if ( inList > max ) { 566 if ( inList > max ) {
548 removeNumbers.append( ( *phoneIter ) ); 567 removeNumbers.append( ( *phoneIter ) );
549 --inList; 568 --inList;
550 } else 569 } else
551 break; 570 break;
552 } 571 }
553 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 572 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
554 ++phoneIter ) { 573 ++phoneIter ) {
555 removePhoneNumber(( *phoneIter )); 574 removePhoneNumber(( *phoneIter ));
556 } 575 }
557 } 576 }
558 } 577 }
559 // remove non-numeric characters 578 // remove non-numeric characters
560 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 579 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
561 ++phoneIter ) { 580 ++phoneIter ) {
562 if ( ! ( *phoneIter ).simplifyNumber() ) 581 if ( ! ( *phoneIter ).simplifyNumber() )
563 removeNumbers.append( ( *phoneIter ) ); 582 removeNumbers.append( ( *phoneIter ) );
564 } 583 }
565 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 584 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
566 ++phoneIter ) { 585 ++phoneIter ) {
567 removePhoneNumber(( *phoneIter )); 586 removePhoneNumber(( *phoneIter ));
568 } 587 }
569} 588}
570void Addressee::simplifyPhoneNumberTypes() 589void Addressee::simplifyPhoneNumberTypes()
571{ 590{
572 KABC::PhoneNumber::List::Iterator phoneIter; 591 KABC::PhoneNumber::List::Iterator phoneIter;
573 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 592 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
574 ++phoneIter ) 593 ++phoneIter )
575 ( *phoneIter ).simplifyType(); 594 ( *phoneIter ).simplifyType();
576} 595}
577void Addressee::removeID(const QString &prof) 596void Addressee::removeID(const QString &prof)
578{ 597{
579 detach(); 598 detach();
580 if ( prof.isEmpty() ) 599 if ( prof.isEmpty() )
581 mData->mExternalId = ":"; 600 mData->mExternalId = ":";
582 else 601 else
583 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 602 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
584 603
585} 604}
586void Addressee::setID( const QString & prof , const QString & id ) 605void Addressee::setID( const QString & prof , const QString & id )
587{ 606{
588 detach(); 607 detach();
589 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 608 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
590 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 609 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
591} 610}
592void Addressee::setTempSyncStat( int id ) 611void Addressee::setTempSyncStat( int id )
593{ 612{
594 if ( mData->mTempSyncStat == id ) return; 613 if ( mData->mTempSyncStat == id ) return;
595 detach(); 614 detach();
596 mData->mTempSyncStat = id; 615 mData->mTempSyncStat = id;
597} 616}
598int Addressee::tempSyncStat() const 617int Addressee::tempSyncStat() const
599{ 618{
600 return mData->mTempSyncStat; 619 return mData->mTempSyncStat;
601} 620}
602 621
603const QString Addressee::getID( const QString & prof) const 622const QString Addressee::getID( const QString & prof) const
604{ 623{
605 return KIdManager::getId ( mData->mExternalId, prof ); 624 return KIdManager::getId ( mData->mExternalId, prof );
606} 625}
607 626
608void Addressee::setCsum( const QString & prof , const QString & id ) 627void Addressee::setCsum( const QString & prof , const QString & id )
609{ 628{
610 detach(); 629 detach();
611 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 630 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
612 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 631 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
613 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 632 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
614} 633}
615 634
616const QString Addressee::getCsum( const QString & prof) const 635const QString Addressee::getCsum( const QString & prof) const
617{ 636{
618 return KIdManager::getCsum ( mData->mExternalId, prof ); 637 return KIdManager::getCsum ( mData->mExternalId, prof );
619} 638}
620 639
621void Addressee::setIDStr( const QString & s ) 640void Addressee::setIDStr( const QString & s )
622{ 641{
623 detach(); 642 detach();
624 mData->mExternalId = s; 643 mData->mExternalId = s;
625} 644}
626 645
627const QString Addressee::IDStr() const 646const QString Addressee::IDStr() const
628{ 647{
629 return mData->mExternalId; 648 return mData->mExternalId;
630} 649}
631 650
632void Addressee::setExternalUID( const QString &id ) 651void Addressee::setExternalUID( const QString &id )
633{ 652{
634 if ( id == mData->externalUID ) return; 653 if ( id == mData->externalUID ) return;
635 detach(); 654 detach();
636 mData->empty = false; 655 mData->empty = false;
637 mData->externalUID = id; 656 mData->externalUID = id;
638} 657}
639 658
640const QString Addressee::externalUID() const 659const QString Addressee::externalUID() const
641{ 660{
642 return mData->externalUID; 661 return mData->externalUID;
643} 662}
644void Addressee::setOriginalExternalUID( const QString &id ) 663void Addressee::setOriginalExternalUID( const QString &id )
645{ 664{
646 if ( id == mData->originalExternalUID ) return; 665 if ( id == mData->originalExternalUID ) return;
647 detach(); 666 detach();
648 mData->empty = false; 667 mData->empty = false;
649 //qDebug("*******Set orig uid %s ", id.latin1()); 668 //qDebug("*******Set orig uid %s ", id.latin1());
650 mData->originalExternalUID = id; 669 mData->originalExternalUID = id;
651} 670}
652 671
653QString Addressee::originalExternalUID() const 672QString Addressee::originalExternalUID() const
654{ 673{
655 return mData->originalExternalUID; 674 return mData->originalExternalUID;
656} 675}
657 676
658void Addressee::setUid( const QString &id ) 677void Addressee::setUid( const QString &id )
659{ 678{
660 if ( id == mData->uid ) return; 679 if ( id == mData->uid ) return;
661 detach(); 680 detach();
662 //qDebug("****setuid %s ", id.latin1()); 681 //qDebug("****setuid %s ", id.latin1());
663 mData->empty = false; 682 mData->empty = false;
664 mData->uid = id; 683 mData->uid = id;
665} 684}
666 685
667const QString Addressee::uid() const 686const QString Addressee::uid() const
668{ 687{
669 if ( mData->uid.isEmpty() ) 688 if ( mData->uid.isEmpty() )
670 mData->uid = KApplication::randomString( 10 ); 689 mData->uid = KApplication::randomString( 10 );
671 690
672 return mData->uid; 691 return mData->uid;
673} 692}
674 693
675QString Addressee::uidLabel() 694QString Addressee::uidLabel()
676{ 695{
677 return i18n("Unique Identifier"); 696 return i18n("Unique Identifier");
678} 697}
679 698
680void Addressee::setName( const QString &name ) 699void Addressee::setName( const QString &name )
681{ 700{
682 if ( name == mData->name ) return; 701 if ( name == mData->name ) return;
683 detach(); 702 detach();
684 mData->empty = false; 703 mData->empty = false;
685 mData->name = name; 704 mData->name = name;
686} 705}
687 706
688QString Addressee::name() const 707QString Addressee::name() const
689{ 708{
690 return mData->name; 709 return mData->name;
691} 710}
692 711
693QString Addressee::nameLabel() 712QString Addressee::nameLabel()
694{ 713{
695 return i18n("Name"); 714 return i18n("Name");
696} 715}
697 716
698 717
699void Addressee::setFormattedName( const QString &formattedName ) 718void Addressee::setFormattedName( const QString &formattedName )
700{ 719{
701 if ( formattedName == mData->formattedName ) return; 720 if ( formattedName == mData->formattedName ) return;
702 detach(); 721 detach();
703 mData->empty = false; 722 mData->empty = false;
704 mData->formattedName = formattedName; 723 mData->formattedName = formattedName;
705} 724}
706 725
707QString Addressee::formattedName() const 726QString Addressee::formattedName() const
708{ 727{
709 return mData->formattedName; 728 return mData->formattedName;
710} 729}
711 730
712QString Addressee::formattedNameLabel() 731QString Addressee::formattedNameLabel()
713{ 732{
714 return i18n("Formatted Name"); 733 return i18n("Formatted Name");
715} 734}
716 735
717 736
718void Addressee::setFamilyName( const QString &familyName ) 737void Addressee::setFamilyName( const QString &familyName )
719{ 738{
720 if ( familyName == mData->familyName ) return; 739 if ( familyName == mData->familyName ) return;
721 detach(); 740 detach();
722 mData->empty = false; 741 mData->empty = false;