summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2004-09-19 20:14:28 (UTC)
committer zautrix <zautrix>2004-09-19 20:14:28 (UTC)
commitafa28a62314117555d6b32291188eedd1a576284 (patch) (unidiff)
treeea97a247de30a7a34480bc395e1996ab99247361 /kabc
parente0d8e062c9d8092e47dcadd88b30614ebff43c0c (diff)
downloadkdepimpi-afa28a62314117555d6b32291188eedd1a576284.zip
kdepimpi-afa28a62314117555d6b32291188eedd1a576284.tar.gz
kdepimpi-afa28a62314117555d6b32291188eedd1a576284.tar.bz2
more AB sync
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp13
-rw-r--r--kabc/addressee.h2
-rw-r--r--kabc/plugins/qtopia/qtopiaE.pro2
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.cpp7
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.h1
-rw-r--r--kabc/plugins/qtopia/resourceqtopia.cpp78
6 files changed, 75 insertions, 28 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 3a2dc5f..fda62f1 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,1834 +1,1847 @@
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 );
46 46
47struct Addressee::AddresseeData : public KShared 47struct Addressee::AddresseeData : public KShared
48{ 48{
49 QString uid; 49 QString uid;
50 QString name; 50 QString name;
51 QString formattedName; 51 QString formattedName;
52 QString familyName; 52 QString familyName;
53 QString givenName; 53 QString givenName;
54 QString additionalName; 54 QString additionalName;
55 QString prefix; 55 QString prefix;
56 QString suffix; 56 QString suffix;
57 QString nickName; 57 QString nickName;
58 QDateTime birthday; 58 QDateTime birthday;
59 QString mailer; 59 QString mailer;
60 TimeZone timeZone; 60 TimeZone timeZone;
61 Geo geo; 61 Geo geo;
62 QString title; 62 QString title;
63 QString role; 63 QString role;
64 QString organization; 64 QString organization;
65 QString note; 65 QString note;
66 QString productId; 66 QString productId;
67 QDateTime revision; 67 QDateTime revision;
68 QString sortString; 68 QString sortString;
69 QString externalUID; 69 QString externalUID;
70 QString originalExternalUID;
70 KURL url; 71 KURL url;
71 Secrecy secrecy; 72 Secrecy secrecy;
72 Picture logo; 73 Picture logo;
73 Picture photo; 74 Picture photo;
74 Sound sound; 75 Sound sound;
75 Agent agent; 76 Agent agent;
76 QString mExternalId; 77 QString mExternalId;
77 PhoneNumber::List phoneNumbers; 78 PhoneNumber::List phoneNumbers;
78 Address::List addresses; 79 Address::List addresses;
79 Key::List keys; 80 Key::List keys;
80 QStringList emails; 81 QStringList emails;
81 QStringList categories; 82 QStringList categories;
82 QStringList custom; 83 QStringList custom;
83 int mTempSyncStat; 84 int mTempSyncStat;
84 Resource *resource; 85 Resource *resource;
85 86
86 bool empty :1; 87 bool empty :1;
87 bool changed :1; 88 bool changed :1;
88}; 89};
89 90
90Addressee::Addressee() 91Addressee::Addressee()
91{ 92{
92 mData = new AddresseeData; 93 mData = new AddresseeData;
93 mData->empty = true; 94 mData->empty = true;
94 mData->changed = false; 95 mData->changed = false;
95 mData->resource = 0; 96 mData->resource = 0;
96 mData->mExternalId = ":"; 97 mData->mExternalId = ":";
97 mData->revision = QDateTime ( QDate( 2004,1,1)); 98 mData->revision = QDateTime ( QDate( 2004,1,1));
98 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 99 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
99} 100}
100 101
101Addressee::~Addressee() 102Addressee::~Addressee()
102{ 103{
103} 104}
104 105
105Addressee::Addressee( const Addressee &a ) 106Addressee::Addressee( const Addressee &a )
106{ 107{
107 mData = a.mData; 108 mData = a.mData;
108} 109}
109 110
110Addressee &Addressee::operator=( const Addressee &a ) 111Addressee &Addressee::operator=( const Addressee &a )
111{ 112{
112 mData = a.mData; 113 mData = a.mData;
113 return (*this); 114 return (*this);
114} 115}
115 116
116Addressee Addressee::copy() 117Addressee Addressee::copy()
117{ 118{
118 Addressee a; 119 Addressee a;
119 *(a.mData) = *mData; 120 *(a.mData) = *mData;
120 return a; 121 return a;
121} 122}
122 123
123void Addressee::detach() 124void Addressee::detach()
124{ 125{
125 if ( mData.count() == 1 ) return; 126 if ( mData.count() == 1 ) return;
126 *this = copy(); 127 *this = copy();
127} 128}
128 129
129bool Addressee::operator==( const Addressee &a ) const 130bool Addressee::operator==( const Addressee &a ) const
130{ 131{
131 if ( uid() != a.uid() ) return false; 132 if ( uid() != a.uid() ) return false;
132 if ( mData->name != a.mData->name ) return false; 133 if ( mData->name != a.mData->name ) return false;
133 if ( mData->formattedName != a.mData->formattedName ) return false; 134 if ( mData->formattedName != a.mData->formattedName ) return false;
134 if ( mData->familyName != a.mData->familyName ) return false; 135 if ( mData->familyName != a.mData->familyName ) return false;
135 if ( mData->givenName != a.mData->givenName ) return false; 136 if ( mData->givenName != a.mData->givenName ) return false;
136 if ( mData->additionalName != a.mData->additionalName ) return false; 137 if ( mData->additionalName != a.mData->additionalName ) return false;
137 if ( mData->prefix != a.mData->prefix ) return false; 138 if ( mData->prefix != a.mData->prefix ) return false;
138 if ( mData->suffix != a.mData->suffix ) return false; 139 if ( mData->suffix != a.mData->suffix ) return false;
139 if ( mData->nickName != a.mData->nickName ) return false; 140 if ( mData->nickName != a.mData->nickName ) return false;
140 if ( mData->birthday != a.mData->birthday ) return false; 141 if ( mData->birthday != a.mData->birthday ) return false;
141 if ( mData->mailer != a.mData->mailer ) return false; 142 if ( mData->mailer != a.mData->mailer ) return false;
142 if ( mData->timeZone != a.mData->timeZone ) return false; 143 if ( mData->timeZone != a.mData->timeZone ) return false;
143 if ( mData->geo != a.mData->geo ) return false; 144 if ( mData->geo != a.mData->geo ) return false;
144 if ( mData->title != a.mData->title ) return false; 145 if ( mData->title != a.mData->title ) return false;
145 if ( mData->role != a.mData->role ) return false; 146 if ( mData->role != a.mData->role ) return false;
146 if ( mData->organization != a.mData->organization ) return false; 147 if ( mData->organization != a.mData->organization ) return false;
147 if ( mData->note != a.mData->note ) return false; 148 if ( mData->note != a.mData->note ) return false;
148 if ( mData->productId != a.mData->productId ) return false; 149 if ( mData->productId != a.mData->productId ) return false;
149 //if ( mData->revision != a.mData->revision ) return false; 150 //if ( mData->revision != a.mData->revision ) return false;
150 if ( mData->sortString != a.mData->sortString ) return false; 151 if ( mData->sortString != a.mData->sortString ) return false;
151 if ( mData->secrecy != a.mData->secrecy ) return false; 152 if ( mData->secrecy != a.mData->secrecy ) return false;
152 if ( mData->logo != a.mData->logo ) return false; 153 if ( mData->logo != a.mData->logo ) return false;
153 if ( mData->photo != a.mData->photo ) return false; 154 if ( mData->photo != a.mData->photo ) return false;
154 if ( mData->sound != a.mData->sound ) return false; 155 if ( mData->sound != a.mData->sound ) return false;
155 if ( mData->agent != a.mData->agent ) return false; 156 if ( mData->agent != a.mData->agent ) return false;
156 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 157 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
157 ( mData->url != a.mData->url ) ) return false; 158 ( mData->url != a.mData->url ) ) return false;
158 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 159 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
159 if ( mData->addresses != a.mData->addresses ) return false; 160 if ( mData->addresses != a.mData->addresses ) return false;
160 if ( mData->keys != a.mData->keys ) return false; 161 if ( mData->keys != a.mData->keys ) return false;
161 if ( mData->emails != a.mData->emails ) return false; 162 if ( mData->emails != a.mData->emails ) return false;
162 if ( mData->categories != a.mData->categories ) return false; 163 if ( mData->categories != a.mData->categories ) return false;
163 if ( mData->custom != a.mData->custom ) return false; 164 if ( mData->custom != a.mData->custom ) return false;
164 165
165 return true; 166 return true;
166} 167}
167 168
168bool Addressee::operator!=( const Addressee &a ) const 169bool Addressee::operator!=( const Addressee &a ) const
169{ 170{
170 return !( a == *this ); 171 return !( a == *this );
171} 172}
172 173
173bool Addressee::isEmpty() const 174bool Addressee::isEmpty() const
174{ 175{
175 return mData->empty; 176 return mData->empty;
176} 177}
177ulong Addressee::getCsum4List( const QStringList & attList) 178ulong Addressee::getCsum4List( const QStringList & attList)
178{ 179{
179 int max = attList.count(); 180 int max = attList.count();
180 ulong cSum = 0; 181 ulong cSum = 0;
181 int j,k,i; 182 int j,k,i;
182 int add; 183 int add;
183 for ( i = 0; i < max ; ++i ) { 184 for ( i = 0; i < max ; ++i ) {
184 QString s = attList[i]; 185 QString s = attList[i];
185 if ( ! s.isEmpty() ){ 186 if ( ! s.isEmpty() ){
186 j = s.length(); 187 j = s.length();
187 for ( k = 0; k < j; ++k ) { 188 for ( k = 0; k < j; ++k ) {
188 int mul = k +1; 189 int mul = k +1;
189 add = s[k].unicode (); 190 add = s[k].unicode ();
190 if ( k < 16 ) 191 if ( k < 16 )
191 mul = mul * mul; 192 mul = mul * mul;
192 int ii = i+1; 193 int ii = i+1;
193 add = add * mul *ii*ii*ii; 194 add = add * mul *ii*ii*ii;
194 cSum += add; 195 cSum += add;
195 } 196 }
196 } 197 }
197 198
198 } 199 }
199 //QString dump = attList.join(","); 200 //QString dump = attList.join(",");
200 //qDebug("csum: %d %s", cSum,dump.latin1()); 201 //qDebug("csum: %d %s", cSum,dump.latin1());
201 202
202 return cSum; 203 return cSum;
203 204
204} 205}
205void Addressee::computeCsum(const QString &dev) 206void Addressee::computeCsum(const QString &dev)
206{ 207{
207 QStringList l; 208 QStringList l;
208 if ( !mData->name.isEmpty() ) l.append(mData->name); 209 if ( !mData->name.isEmpty() ) l.append(mData->name);
209 if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 210 if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
210 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 211 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
211 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 212 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
212 if ( !mData->additionalName ) l.append( mData->additionalName ); 213 if ( !mData->additionalName ) l.append( mData->additionalName );
213 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 214 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
214 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 215 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
215 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 216 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
216 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 217 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
217 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 218 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
218 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 219 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
219 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 220 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
220 if ( !mData->title .isEmpty() ) l.append( mData->title ); 221 if ( !mData->title .isEmpty() ) l.append( mData->title );
221 if ( !mData->role.isEmpty() ) l.append( mData->role ); 222 if ( !mData->role.isEmpty() ) l.append( mData->role );
222 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 223 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
223 if ( !mData->note.isEmpty() ) l.append( mData->note ); 224 if ( !mData->note.isEmpty() ) l.append( mData->note );
224 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 225 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
225 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 226 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
226 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 227 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
227 // if ( !mData->logo.isEmpty() ) l.append( ); 228 // if ( !mData->logo.isEmpty() ) l.append( );
228 //if ( !mData->photo.isEmpty() ) l.append( ); 229 //if ( !mData->photo.isEmpty() ) l.append( );
229 //if ( !mData->sound.isEmpty() ) l.append( ); 230 //if ( !mData->sound.isEmpty() ) l.append( );
230 //if ( !mData->agent.isEmpty() ) l.append( ); 231 //if ( !mData->agent.isEmpty() ) l.append( );
231 //if ( mData->url.isValid() ) l.append( ); 232 //if ( mData->url.isValid() ) l.append( );
232#if 0 233#if 0
233 if ( !mData->phoneNumbers.isEmpty() ) l.append( ); 234 if ( !mData->phoneNumbers.isEmpty() ) l.append( );
234 if ( !mData->addresses.isEmpty() ) l.append( ); 235 if ( !mData->addresses.isEmpty() ) l.append( );
235 //if ( !mData->keys.isEmpty() ) l.append( ); 236 //if ( !mData->keys.isEmpty() ) l.append( );
236 if ( !mData->emails.isEmpty() ) l.append( ); 237 if ( !mData->emails.isEmpty() ) l.append( );
237 if ( !mData->categories .isEmpty() ) l.append( ); 238 if ( !mData->categories .isEmpty() ) l.append( );
238 if ( !mData->custom.isEmpty() ) l.append( ); 239 if ( !mData->custom.isEmpty() ) l.append( );
239#endif 240#endif
240 KABC::PhoneNumber::List phoneNumbers; 241 KABC::PhoneNumber::List phoneNumbers;
241 KABC::PhoneNumber::List::Iterator phoneIter; 242 KABC::PhoneNumber::List::Iterator phoneIter;
242 243
243 QStringList t; 244 QStringList t;
244 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 245 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
245 ++phoneIter ) 246 ++phoneIter )
246 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 247 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
247 t.sort(); 248 t.sort();
248 uint iii; 249 uint iii;
249 for ( iii = 0; iii < t.count(); ++iii) 250 for ( iii = 0; iii < t.count(); ++iii)
250 l.append( t[iii] ); 251 l.append( t[iii] );
251 t = mData->emails; 252 t = mData->emails;
252 t.sort(); 253 t.sort();
253 for ( iii = 0; iii < t.count(); ++iii) 254 for ( iii = 0; iii < t.count(); ++iii)
254 l.append( t[iii] ); 255 l.append( t[iii] );
255 t = mData->categories; 256 t = mData->categories;
256 t.sort(); 257 t.sort();
257 for ( iii = 0; iii < t.count(); ++iii) 258 for ( iii = 0; iii < t.count(); ++iii)
258 l.append( t[iii] ); 259 l.append( t[iii] );
259 t = mData->custom; 260 t = mData->custom;
260 t.sort(); 261 t.sort();
261 for ( iii = 0; iii < t.count(); ++iii) 262 for ( iii = 0; iii < t.count(); ++iii)
262 l.append( t[iii] ); 263 l.append( t[iii] );
263 KABC::Address::List::Iterator addressIter; 264 KABC::Address::List::Iterator addressIter;
264 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 265 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
265 ++addressIter ) { 266 ++addressIter ) {
266 t = (*addressIter).asList(); 267 t = (*addressIter).asList();
267 t.sort(); 268 t.sort();
268 for ( iii = 0; iii < t.count(); ++iii) 269 for ( iii = 0; iii < t.count(); ++iii)
269 l.append( t[iii] ); 270 l.append( t[iii] );
270 } 271 }
271 uint cs = getCsum4List(l); 272 uint cs = getCsum4List(l);
272 // qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); 273 // qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
273 setCsum( dev, QString::number (cs )); 274 setCsum( dev, QString::number (cs ));
274} 275}
275 276
276void Addressee::mergeContact( const Addressee& ad ) 277void Addressee::mergeContact( const Addressee& ad )
277{ 278{
278 279
279 detach(); 280 detach();
280 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 281 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
281 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 282 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
282 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 283 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
283 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 284 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
284 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 285 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
285 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; 286 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix;
286 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; 287 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix;
287 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; 288 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName;
288 if ( !mData->birthday.isValid() ) 289 if ( !mData->birthday.isValid() )
289 if ( ad.mData->birthday.isValid()) 290 if ( ad.mData->birthday.isValid())
290 mData->birthday = ad.mData->birthday; 291 mData->birthday = ad.mData->birthday;
291 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; 292 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
292 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; 293 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
293 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; 294 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
294 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; 295 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ;
295 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; 296 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ;
296 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; 297 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ;
297 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; 298 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ;
298 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; 299 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId;
299 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; 300 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString;
300 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; 301 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy;
301 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ; 302 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
302 303
303 // pending: 304 // pending:
304 // merging phonenumbers 305 // merging phonenumbers
305 // merging addresses 306 // merging addresses
306 // merging emails; 307 // merging emails;
307 // merging categories; 308 // merging categories;
308 // merging custom; 309 // merging custom;
309 // merging keys 310 // merging keys
310} 311}
311 312
312void Addressee::removeID(const QString &prof) 313void Addressee::removeID(const QString &prof)
313{ 314{
314 detach(); 315 detach();
315 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 316 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
316 317
317} 318}
318void Addressee::setID( const QString & prof , const QString & id ) 319void Addressee::setID( const QString & prof , const QString & id )
319{ 320{
320 detach(); 321 detach();
321 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 322 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
322 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 323 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
323} 324}
324void Addressee::setTempSyncStat( int id ) 325void Addressee::setTempSyncStat( int id )
325{ 326{
326 if ( mData->mTempSyncStat == id ) return; 327 if ( mData->mTempSyncStat == id ) return;
327 detach(); 328 detach();
328 mData->mTempSyncStat = id; 329 mData->mTempSyncStat = id;
329} 330}
330int Addressee::tempSyncStat() const 331int Addressee::tempSyncStat() const
331{ 332{
332 return mData->mTempSyncStat; 333 return mData->mTempSyncStat;
333} 334}
334 335
335QString Addressee::getID( const QString & prof) 336QString Addressee::getID( const QString & prof)
336{ 337{
337 return KIdManager::getId ( mData->mExternalId, prof ); 338 return KIdManager::getId ( mData->mExternalId, prof );
338} 339}
339 340
340void Addressee::setCsum( const QString & prof , const QString & id ) 341void Addressee::setCsum( const QString & prof , const QString & id )
341{ 342{
342 detach(); 343 detach();
343 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 344 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
344 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 345 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
345 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 346 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
346} 347}
347 348
348QString Addressee::getCsum( const QString & prof) 349QString Addressee::getCsum( const QString & prof)
349{ 350{
350 return KIdManager::getCsum ( mData->mExternalId, prof ); 351 return KIdManager::getCsum ( mData->mExternalId, prof );
351} 352}
352 353
353void Addressee::setIDStr( const QString & s ) 354void Addressee::setIDStr( const QString & s )
354{ 355{
355 detach(); 356 detach();
356 mData->mExternalId = s; 357 mData->mExternalId = s;
357} 358}
358 359
359QString Addressee::IDStr() const 360QString Addressee::IDStr() const
360{ 361{
361 return mData->mExternalId; 362 return mData->mExternalId;
362} 363}
363 364
364void Addressee::setExternalUID( const QString &id ) 365void Addressee::setExternalUID( const QString &id )
365{ 366{
366 if ( id == mData->externalUID ) return; 367 if ( id == mData->externalUID ) return;
367 detach(); 368 detach();
368 mData->empty = false; 369 mData->empty = false;
369 mData->externalUID = id; 370 mData->externalUID = id;
370} 371}
371 372
372QString Addressee::externalUID() const 373QString Addressee::externalUID() const
373{ 374{
374 return mData->externalUID; 375 return mData->externalUID;
375} 376}
377void Addressee::setOriginalExternalUID( const QString &id )
378{
379 if ( id == mData->originalExternalUID ) return;
380 detach();
381 mData->empty = false;
382 mData->originalExternalUID = id;
383}
384
385QString Addressee::originalExternalUID() const
386{
387 return mData->originalExternalUID;
388}
376 389
377void Addressee::setUid( const QString &id ) 390void Addressee::setUid( const QString &id )
378{ 391{
379 if ( id == mData->uid ) return; 392 if ( id == mData->uid ) return;
380 detach(); 393 detach();
381 mData->empty = false; 394 mData->empty = false;
382 mData->uid = id; 395 mData->uid = id;
383} 396}
384 397
385QString Addressee::uid() const 398QString Addressee::uid() const
386{ 399{
387 if ( mData->uid.isEmpty() ) 400 if ( mData->uid.isEmpty() )
388 mData->uid = KApplication::randomString( 10 ); 401 mData->uid = KApplication::randomString( 10 );
389 402
390 return mData->uid; 403 return mData->uid;
391} 404}
392 405
393QString Addressee::uidLabel() 406QString Addressee::uidLabel()
394{ 407{
395 return i18n("Unique Identifier"); 408 return i18n("Unique Identifier");
396} 409}
397 410
398void Addressee::setName( const QString &name ) 411void Addressee::setName( const QString &name )
399{ 412{
400 if ( name == mData->name ) return; 413 if ( name == mData->name ) return;
401 detach(); 414 detach();
402 mData->empty = false; 415 mData->empty = false;
403 mData->name = name; 416 mData->name = name;
404} 417}
405 418
406QString Addressee::name() const 419QString Addressee::name() const
407{ 420{
408 return mData->name; 421 return mData->name;
409} 422}
410 423
411QString Addressee::nameLabel() 424QString Addressee::nameLabel()
412{ 425{
413 return i18n("Name"); 426 return i18n("Name");
414} 427}
415 428
416 429
417void Addressee::setFormattedName( const QString &formattedName ) 430void Addressee::setFormattedName( const QString &formattedName )
418{ 431{
419 if ( formattedName == mData->formattedName ) return; 432 if ( formattedName == mData->formattedName ) return;
420 detach(); 433 detach();
421 mData->empty = false; 434 mData->empty = false;
422 mData->formattedName = formattedName; 435 mData->formattedName = formattedName;
423} 436}
424 437
425QString Addressee::formattedName() const 438QString Addressee::formattedName() const
426{ 439{
427 return mData->formattedName; 440 return mData->formattedName;
428} 441}
429 442
430QString Addressee::formattedNameLabel() 443QString Addressee::formattedNameLabel()
431{ 444{
432 return i18n("Formatted Name"); 445 return i18n("Formatted Name");
433} 446}
434 447
435 448
436void Addressee::setFamilyName( const QString &familyName ) 449void Addressee::setFamilyName( const QString &familyName )
437{ 450{
438 if ( familyName == mData->familyName ) return; 451 if ( familyName == mData->familyName ) return;
439 detach(); 452 detach();
440 mData->empty = false; 453 mData->empty = false;
441 mData->familyName = familyName; 454 mData->familyName = familyName;
442} 455}
443 456
444QString Addressee::familyName() const 457QString Addressee::familyName() const
445{ 458{
446 return mData->familyName; 459 return mData->familyName;
447} 460}
448 461
449QString Addressee::familyNameLabel() 462QString Addressee::familyNameLabel()
450{ 463{
451 return i18n("Family Name"); 464 return i18n("Family Name");
452} 465}
453 466
454 467
455void Addressee::setGivenName( const QString &givenName ) 468void Addressee::setGivenName( const QString &givenName )
456{ 469{
457 if ( givenName == mData->givenName ) return; 470 if ( givenName == mData->givenName ) return;
458 detach(); 471 detach();
459 mData->empty = false; 472 mData->empty = false;
460 mData->givenName = givenName; 473 mData->givenName = givenName;
461} 474}
462 475
463QString Addressee::givenName() const 476QString Addressee::givenName() const
464{ 477{
465 return mData->givenName; 478 return mData->givenName;
466} 479}
467 480
468QString Addressee::givenNameLabel() 481QString Addressee::givenNameLabel()
469{ 482{
470 return i18n("Given Name"); 483 return i18n("Given Name");
471} 484}
472 485
473 486
474void Addressee::setAdditionalName( const QString &additionalName ) 487void Addressee::setAdditionalName( const QString &additionalName )
475{ 488{
476 if ( additionalName == mData->additionalName ) return; 489 if ( additionalName == mData->additionalName ) return;
477 detach(); 490 detach();
478 mData->empty = false; 491 mData->empty = false;
479 mData->additionalName = additionalName; 492 mData->additionalName = additionalName;
480} 493}
481 494
482QString Addressee::additionalName() const 495QString Addressee::additionalName() const
483{ 496{
484 return mData->additionalName; 497 return mData->additionalName;
485} 498}
486 499
487QString Addressee::additionalNameLabel() 500QString Addressee::additionalNameLabel()
488{ 501{
489 return i18n("Additional Names"); 502 return i18n("Additional Names");
490} 503}
491 504
492 505
493void Addressee::setPrefix( const QString &prefix ) 506void Addressee::setPrefix( const QString &prefix )
494{ 507{
495 if ( prefix == mData->prefix ) return; 508 if ( prefix == mData->prefix ) return;
496 detach(); 509 detach();
497 mData->empty = false; 510 mData->empty = false;
498 mData->prefix = prefix; 511 mData->prefix = prefix;
499} 512}
500 513
501QString Addressee::prefix() const 514QString Addressee::prefix() const
502{ 515{
503 return mData->prefix; 516 return mData->prefix;
504} 517}
505 518
506QString Addressee::prefixLabel() 519QString Addressee::prefixLabel()
507{ 520{
508 return i18n("Honorific Prefixes"); 521 return i18n("Honorific Prefixes");
509} 522}
510 523
511 524
512void Addressee::setSuffix( const QString &suffix ) 525void Addressee::setSuffix( const QString &suffix )
513{ 526{
514 if ( suffix == mData->suffix ) return; 527 if ( suffix == mData->suffix ) return;
515 detach(); 528 detach();
516 mData->empty = false; 529 mData->empty = false;
517 mData->suffix = suffix; 530 mData->suffix = suffix;
518} 531}
519 532
520QString Addressee::suffix() const 533QString Addressee::suffix() const
521{ 534{
522 return mData->suffix; 535 return mData->suffix;
523} 536}
524 537
525QString Addressee::suffixLabel() 538QString Addressee::suffixLabel()
526{ 539{
527 return i18n("Honorific Suffixes"); 540 return i18n("Honorific Suffixes");
528} 541}
529 542
530 543
531void Addressee::setNickName( const QString &nickName ) 544void Addressee::setNickName( const QString &nickName )
532{ 545{
533 if ( nickName == mData->nickName ) return; 546 if ( nickName == mData->nickName ) return;
534 detach(); 547 detach();
535 mData->empty = false; 548 mData->empty = false;
536 mData->nickName = nickName; 549 mData->nickName = nickName;
537} 550}
538 551
539QString Addressee::nickName() const 552QString Addressee::nickName() const
540{ 553{
541 return mData->nickName; 554 return mData->nickName;
542} 555}
543 556
544QString Addressee::nickNameLabel() 557QString Addressee::nickNameLabel()
545{ 558{
546 return i18n("Nick Name"); 559 return i18n("Nick Name");
547} 560}
548 561
549 562
550void Addressee::setBirthday( const QDateTime &birthday ) 563void Addressee::setBirthday( const QDateTime &birthday )
551{ 564{
552 if ( birthday == mData->birthday ) return; 565 if ( birthday == mData->birthday ) return;
553 detach(); 566 detach();
554 mData->empty = false; 567 mData->empty = false;
555 mData->birthday = birthday; 568 mData->birthday = birthday;
556} 569}
557 570
558QDateTime Addressee::birthday() const 571QDateTime Addressee::birthday() const
559{ 572{
560 return mData->birthday; 573 return mData->birthday;
561} 574}
562 575
563QString Addressee::birthdayLabel() 576QString Addressee::birthdayLabel()
564{ 577{
565 return i18n("Birthday"); 578 return i18n("Birthday");
566} 579}
567 580
568 581
569QString Addressee::homeAddressStreetLabel() 582QString Addressee::homeAddressStreetLabel()
570{ 583{
571 return i18n("Home Address Street"); 584 return i18n("Home Address Street");
572} 585}
573 586
574 587
575QString Addressee::homeAddressLocalityLabel() 588QString Addressee::homeAddressLocalityLabel()
576{ 589{
577 return i18n("Home Address Locality"); 590 return i18n("Home Address Locality");
578} 591}
579 592
580 593
581QString Addressee::homeAddressRegionLabel() 594QString Addressee::homeAddressRegionLabel()
582{ 595{
583 return i18n("Home Address Region"); 596 return i18n("Home Address Region");
584} 597}
585 598
586 599
587QString Addressee::homeAddressPostalCodeLabel() 600QString Addressee::homeAddressPostalCodeLabel()
588{ 601{
589 return i18n("Home Address Postal Code"); 602 return i18n("Home Address Postal Code");
590} 603}
591 604
592 605
593QString Addressee::homeAddressCountryLabel() 606QString Addressee::homeAddressCountryLabel()
594{ 607{
595 return i18n("Home Address Country"); 608 return i18n("Home Address Country");
596} 609}
597 610
598 611
599QString Addressee::homeAddressLabelLabel() 612QString Addressee::homeAddressLabelLabel()
600{ 613{
601 return i18n("Home Address Label"); 614 return i18n("Home Address Label");
602} 615}
603 616
604 617
605QString Addressee::businessAddressStreetLabel() 618QString Addressee::businessAddressStreetLabel()
606{ 619{
607 return i18n("Business Address Street"); 620 return i18n("Business Address Street");
608} 621}
609 622
610 623
611QString Addressee::businessAddressLocalityLabel() 624QString Addressee::businessAddressLocalityLabel()
612{ 625{
613 return i18n("Business Address Locality"); 626 return i18n("Business Address Locality");
614} 627}
615 628
616 629
617QString Addressee::businessAddressRegionLabel() 630QString Addressee::businessAddressRegionLabel()
618{ 631{
619 return i18n("Business Address Region"); 632 return i18n("Business Address Region");
620} 633}
621 634
622 635
623QString Addressee::businessAddressPostalCodeLabel() 636QString Addressee::businessAddressPostalCodeLabel()
624{ 637{
625 return i18n("Business Address Postal Code"); 638 return i18n("Business Address Postal Code");
626} 639}
627 640
628 641
629QString Addressee::businessAddressCountryLabel() 642QString Addressee::businessAddressCountryLabel()
630{ 643{
631 return i18n("Business Address Country"); 644 return i18n("Business Address Country");
632} 645}
633 646
634 647
635QString Addressee::businessAddressLabelLabel() 648QString Addressee::businessAddressLabelLabel()
636{ 649{
637 return i18n("Business Address Label"); 650 return i18n("Business Address Label");
638} 651}
639 652
640 653
641QString Addressee::homePhoneLabel() 654QString Addressee::homePhoneLabel()
642{ 655{
643 return i18n("Home Phone"); 656 return i18n("Home Phone");
644} 657}
645 658
646 659
647QString Addressee::businessPhoneLabel() 660QString Addressee::businessPhoneLabel()
648{ 661{
649 return i18n("Business Phone"); 662 return i18n("Business Phone");
650} 663}
651 664
652 665
653QString Addressee::mobilePhoneLabel() 666QString Addressee::mobilePhoneLabel()
654{ 667{
655 return i18n("Mobile Phone"); 668 return i18n("Mobile Phone");
656} 669}
657 670
658 671
659QString Addressee::homeFaxLabel() 672QString Addressee::homeFaxLabel()
660{ 673{
661 return i18n("Home Fax"); 674 return i18n("Home Fax");
662} 675}
663 676
664 677
665QString Addressee::businessFaxLabel() 678QString Addressee::businessFaxLabel()
666{ 679{
667 return i18n("Business Fax"); 680 return i18n("Business Fax");
668} 681}
669 682
670 683
671QString Addressee::carPhoneLabel() 684QString Addressee::carPhoneLabel()
672{ 685{
673 return i18n("Car Phone"); 686 return i18n("Car Phone");
674} 687}
675 688
676 689
677QString Addressee::isdnLabel() 690QString Addressee::isdnLabel()
678{ 691{
679 return i18n("ISDN"); 692 return i18n("ISDN");
680} 693}
681 694
682 695
683QString Addressee::pagerLabel() 696QString Addressee::pagerLabel()
684{ 697{
685 return i18n("Pager"); 698 return i18n("Pager");
686} 699}
687 700
688QString Addressee::sipLabel() 701QString Addressee::sipLabel()
689{ 702{
690 return i18n("SIP"); 703 return i18n("SIP");
691} 704}
692 705
693QString Addressee::emailLabel() 706QString Addressee::emailLabel()
694{ 707{
695 return i18n("Email Address"); 708 return i18n("Email Address");
696} 709}
697 710
698 711
699void Addressee::setMailer( const QString &mailer ) 712void Addressee::setMailer( const QString &mailer )
700{ 713{
701 if ( mailer == mData->mailer ) return; 714 if ( mailer == mData->mailer ) return;
702 detach(); 715 detach();
703 mData->empty = false; 716 mData->empty = false;
704 mData->mailer = mailer; 717 mData->mailer = mailer;
705} 718}
706 719
707QString Addressee::mailer() const 720QString Addressee::mailer() const
708{ 721{
709 return mData->mailer; 722 return mData->mailer;
710} 723}
711 724
712QString Addressee::mailerLabel() 725QString Addressee::mailerLabel()
713{ 726{
714 return i18n("Mail Client"); 727 return i18n("Mail Client");
715} 728}
716 729
717 730
718void Addressee::setTimeZone( const TimeZone &timeZone ) 731void Addressee::setTimeZone( const TimeZone &timeZone )
719{ 732{
720 if ( timeZone == mData->timeZone ) return; 733 if ( timeZone == mData->timeZone ) return;
721 detach(); 734 detach();
722 mData->empty = false; 735 mData->empty = false;
723 mData->timeZone = timeZone; 736 mData->timeZone = timeZone;
724} 737}
725 738
726TimeZone Addressee::timeZone() const 739TimeZone Addressee::timeZone() const
727{ 740{
728 return mData->timeZone; 741 return mData->timeZone;
729} 742}
730 743
731QString Addressee::timeZoneLabel() 744QString Addressee::timeZoneLabel()
732{ 745{
733 return i18n("Time Zone"); 746 return i18n("Time Zone");
734} 747}
735 748
736 749
737void Addressee::setGeo( const Geo &geo ) 750void Addressee::setGeo( const Geo &geo )
738{ 751{
739 if ( geo == mData->geo ) return; 752 if ( geo == mData->geo ) return;
740 detach(); 753 detach();
741 mData->empty = false; 754 mData->empty = false;
742 mData->geo = geo; 755 mData->geo = geo;
743} 756}
744 757
745Geo Addressee::geo() const 758Geo Addressee::geo() const
746{ 759{
747 return mData->geo; 760 return mData->geo;
748} 761}
749 762
750QString Addressee::geoLabel() 763QString Addressee::geoLabel()
751{ 764{
752 return i18n("Geographic Position"); 765 return i18n("Geographic Position");
753} 766}
754 767
755 768
756void Addressee::setTitle( const QString &title ) 769void Addressee::setTitle( const QString &title )
757{ 770{
758 if ( title == mData->title ) return; 771 if ( title == mData->title ) return;
759 detach(); 772 detach();
760 mData->empty = false; 773 mData->empty = false;
761 mData->title = title; 774 mData->title = title;
762} 775}
763 776
764QString Addressee::title() const 777QString Addressee::title() const
765{ 778{
766 return mData->title; 779 return mData->title;
767} 780}
768 781
769QString Addressee::titleLabel() 782QString Addressee::titleLabel()
770{ 783{
771 return i18n("Title"); 784 return i18n("Title");
772} 785}
773 786
774 787
775void Addressee::setRole( const QString &role ) 788void Addressee::setRole( const QString &role )
776{ 789{
777 if ( role == mData->role ) return; 790 if ( role == mData->role ) return;
778 detach(); 791 detach();
779 mData->empty = false; 792 mData->empty = false;
780 mData->role = role; 793 mData->role = role;
781} 794}
782 795
783QString Addressee::role() const 796QString Addressee::role() const
784{ 797{
785 return mData->role; 798 return mData->role;
786} 799}
787 800
788QString Addressee::roleLabel() 801QString Addressee::roleLabel()
789{ 802{
790 return i18n("Role"); 803 return i18n("Role");
791} 804}
792 805
793 806
794void Addressee::setOrganization( const QString &organization ) 807void Addressee::setOrganization( const QString &organization )
795{ 808{
796 if ( organization == mData->organization ) return; 809 if ( organization == mData->organization ) return;
797 detach(); 810 detach();
798 mData->empty = false; 811 mData->empty = false;
799 mData->organization = organization; 812 mData->organization = organization;
800} 813}
801 814
802QString Addressee::organization() const 815QString Addressee::organization() const
803{ 816{
804 return mData->organization; 817 return mData->organization;
805} 818}
806 819
807QString Addressee::organizationLabel() 820QString Addressee::organizationLabel()
808{ 821{
809 return i18n("Organization"); 822 return i18n("Organization");
810} 823}
811 824
812 825
813void Addressee::setNote( const QString &note ) 826void Addressee::setNote( const QString &note )
814{ 827{
815 if ( note == mData->note ) return; 828 if ( note == mData->note ) return;
816 detach(); 829 detach();
817 mData->empty = false; 830 mData->empty = false;
818 mData->note = note; 831 mData->note = note;
819} 832}
820 833
821QString Addressee::note() const 834QString Addressee::note() const
822{ 835{
823 return mData->note; 836 return mData->note;
824} 837}
825 838
826QString Addressee::noteLabel() 839QString Addressee::noteLabel()
827{ 840{
828 return i18n("Note"); 841 return i18n("Note");
829} 842}
830 843
831 844
832void Addressee::setProductId( const QString &productId ) 845void Addressee::setProductId( const QString &productId )
833{ 846{
834 if ( productId == mData->productId ) return; 847 if ( productId == mData->productId ) return;
835 detach(); 848 detach();
836 mData->empty = false; 849 mData->empty = false;
837 mData->productId = productId; 850 mData->productId = productId;
838} 851}
839 852
840QString Addressee::productId() const 853QString Addressee::productId() const
841{ 854{
842 return mData->productId; 855 return mData->productId;
843} 856}
844 857
845QString Addressee::productIdLabel() 858QString Addressee::productIdLabel()
846{ 859{
847 return i18n("Product Identifier"); 860 return i18n("Product Identifier");
848} 861}
849 862
850 863
851void Addressee::setRevision( const QDateTime &revision ) 864void Addressee::setRevision( const QDateTime &revision )
852{ 865{
853 if ( revision == mData->revision ) return; 866 if ( revision == mData->revision ) return;
854 detach(); 867 detach();
855 mData->empty = false; 868 mData->empty = false;
856 mData->revision = revision; 869 mData->revision = revision;
857} 870}
858 871
859QDateTime Addressee::revision() const 872QDateTime Addressee::revision() const
860{ 873{
861 return mData->revision; 874 return mData->revision;
862} 875}
863 876
864QString Addressee::revisionLabel() 877QString Addressee::revisionLabel()
865{ 878{
866 return i18n("Revision Date"); 879 return i18n("Revision Date");
867} 880}
868 881
869 882
870void Addressee::setSortString( const QString &sortString ) 883void Addressee::setSortString( const QString &sortString )
871{ 884{
872 if ( sortString == mData->sortString ) return; 885 if ( sortString == mData->sortString ) return;
873 detach(); 886 detach();
874 mData->empty = false; 887 mData->empty = false;
875 mData->sortString = sortString; 888 mData->sortString = sortString;
876} 889}
877 890
878QString Addressee::sortString() const 891QString Addressee::sortString() const
879{ 892{
880 return mData->sortString; 893 return mData->sortString;
881} 894}
882 895
883QString Addressee::sortStringLabel() 896QString Addressee::sortStringLabel()
884{ 897{
885 return i18n("Sort String"); 898 return i18n("Sort String");
886} 899}
887 900
888 901
889void Addressee::setUrl( const KURL &url ) 902void Addressee::setUrl( const KURL &url )
890{ 903{
891 if ( url == mData->url ) return; 904 if ( url == mData->url ) return;
892 detach(); 905 detach();
893 mData->empty = false; 906 mData->empty = false;
894 mData->url = url; 907 mData->url = url;
895} 908}
896 909
897KURL Addressee::url() const 910KURL Addressee::url() const
898{ 911{
899 return mData->url; 912 return mData->url;
900} 913}
901 914
902QString Addressee::urlLabel() 915QString Addressee::urlLabel()
903{ 916{
904 return i18n("URL"); 917 return i18n("URL");
905} 918}
906 919
907 920
908void Addressee::setSecrecy( const Secrecy &secrecy ) 921void Addressee::setSecrecy( const Secrecy &secrecy )
909{ 922{
910 if ( secrecy == mData->secrecy ) return; 923 if ( secrecy == mData->secrecy ) return;
911 detach(); 924 detach();
912 mData->empty = false; 925 mData->empty = false;
913 mData->secrecy = secrecy; 926 mData->secrecy = secrecy;
914} 927}
915 928
916Secrecy Addressee::secrecy() const 929Secrecy Addressee::secrecy() const
917{ 930{
918 return mData->secrecy; 931 return mData->secrecy;
919} 932}
920 933
921QString Addressee::secrecyLabel() 934QString Addressee::secrecyLabel()
922{ 935{
923 return i18n("Security Class"); 936 return i18n("Security Class");
924} 937}
925 938
926 939
927void Addressee::setLogo( const Picture &logo ) 940void Addressee::setLogo( const Picture &logo )
928{ 941{
929 if ( logo == mData->logo ) return; 942 if ( logo == mData->logo ) return;
930 detach(); 943 detach();
931 mData->empty = false; 944 mData->empty = false;
932 mData->logo = logo; 945 mData->logo = logo;
933} 946}
934 947
935Picture Addressee::logo() const 948Picture Addressee::logo() const
936{ 949{
937 return mData->logo; 950 return mData->logo;
938} 951}
939 952
940QString Addressee::logoLabel() 953QString Addressee::logoLabel()
941{ 954{
942 return i18n("Logo"); 955 return i18n("Logo");
943} 956}
944 957
945 958
946void Addressee::setPhoto( const Picture &photo ) 959void Addressee::setPhoto( const Picture &photo )
947{ 960{
948 if ( photo == mData->photo ) return; 961 if ( photo == mData->photo ) return;
949 detach(); 962 detach();
950 mData->empty = false; 963 mData->empty = false;
951 mData->photo = photo; 964 mData->photo = photo;
952} 965}
953 966
954Picture Addressee::photo() const 967Picture Addressee::photo() const
955{ 968{
956 return mData->photo; 969 return mData->photo;
957} 970}
958 971
959QString Addressee::photoLabel() 972QString Addressee::photoLabel()
960{ 973{
961 return i18n("Photo"); 974 return i18n("Photo");
962} 975}
963 976
964 977
965void Addressee::setSound( const Sound &sound ) 978void Addressee::setSound( const Sound &sound )
966{ 979{
967 if ( sound == mData->sound ) return; 980 if ( sound == mData->sound ) return;
968 detach(); 981 detach();
969 mData->empty = false; 982 mData->empty = false;
970 mData->sound = sound; 983 mData->sound = sound;
971} 984}
972 985
973Sound Addressee::sound() const 986Sound Addressee::sound() const
974{ 987{
975 return mData->sound; 988 return mData->sound;
976} 989}
977 990
978QString Addressee::soundLabel() 991QString Addressee::soundLabel()
979{ 992{
980 return i18n("Sound"); 993 return i18n("Sound");
981} 994}
982 995
983 996
984void Addressee::setAgent( const Agent &agent ) 997void Addressee::setAgent( const Agent &agent )
985{ 998{
986 if ( agent == mData->agent ) return; 999 if ( agent == mData->agent ) return;
987 detach(); 1000 detach();
988 mData->empty = false; 1001 mData->empty = false;
989 mData->agent = agent; 1002 mData->agent = agent;
990} 1003}
991 1004
992Agent Addressee::agent() const 1005Agent Addressee::agent() const
993{ 1006{
994 return mData->agent; 1007 return mData->agent;
995} 1008}
996 1009
997QString Addressee::agentLabel() 1010QString Addressee::agentLabel()
998{ 1011{
999 return i18n("Agent"); 1012 return i18n("Agent");
1000} 1013}
1001 1014
1002 1015
1003 1016
1004void Addressee::setNameFromString( const QString &str ) 1017void Addressee::setNameFromString( const QString &str )
1005{ 1018{
1006 setFormattedName( str ); 1019 setFormattedName( str );
1007 setName( str ); 1020 setName( str );
1008 1021
1009 static bool first = true; 1022 static bool first = true;
1010 static QStringList titles; 1023 static QStringList titles;
1011 static QStringList suffixes; 1024 static QStringList suffixes;
1012 static QStringList prefixes; 1025 static QStringList prefixes;
1013 1026
1014 if ( first ) { 1027 if ( first ) {
1015 first = false; 1028 first = false;
1016 titles += i18n( "Dr." ); 1029 titles += i18n( "Dr." );
1017 titles += i18n( "Miss" ); 1030 titles += i18n( "Miss" );
1018 titles += i18n( "Mr." ); 1031 titles += i18n( "Mr." );
1019 titles += i18n( "Mrs." ); 1032 titles += i18n( "Mrs." );
1020 titles += i18n( "Ms." ); 1033 titles += i18n( "Ms." );
1021 titles += i18n( "Prof." ); 1034 titles += i18n( "Prof." );
1022 1035
1023 suffixes += i18n( "I" ); 1036 suffixes += i18n( "I" );
1024 suffixes += i18n( "II" ); 1037 suffixes += i18n( "II" );
1025 suffixes += i18n( "III" ); 1038 suffixes += i18n( "III" );
1026 suffixes += i18n( "Jr." ); 1039 suffixes += i18n( "Jr." );
1027 suffixes += i18n( "Sr." ); 1040 suffixes += i18n( "Sr." );
1028 1041
1029 prefixes += "van"; 1042 prefixes += "van";
1030 prefixes += "von"; 1043 prefixes += "von";
1031 prefixes += "de"; 1044 prefixes += "de";
1032 1045
1033 KConfig config( locateLocal( "config", "kabcrc") ); 1046 KConfig config( locateLocal( "config", "kabcrc") );
1034 config.setGroup( "General" ); 1047 config.setGroup( "General" );
1035 titles += config.readListEntry( "Prefixes" ); 1048 titles += config.readListEntry( "Prefixes" );
1036 titles.remove( "" ); 1049 titles.remove( "" );
1037 prefixes += config.readListEntry( "Inclusions" ); 1050 prefixes += config.readListEntry( "Inclusions" );
1038 prefixes.remove( "" ); 1051 prefixes.remove( "" );
1039 suffixes += config.readListEntry( "Suffixes" ); 1052 suffixes += config.readListEntry( "Suffixes" );
1040 suffixes.remove( "" ); 1053 suffixes.remove( "" );
1041 } 1054 }
1042 1055
1043 // clear all name parts 1056 // clear all name parts
1044 setPrefix( "" ); 1057 setPrefix( "" );
1045 setGivenName( "" ); 1058 setGivenName( "" );
1046 setAdditionalName( "" ); 1059 setAdditionalName( "" );
1047 setFamilyName( "" ); 1060 setFamilyName( "" );
1048 setSuffix( "" ); 1061 setSuffix( "" );
1049 1062
1050 if ( str.isEmpty() ) 1063 if ( str.isEmpty() )
1051 return; 1064 return;
1052 1065
1053 int i = str.find(','); 1066 int i = str.find(',');
1054 if( i < 0 ) { 1067 if( i < 0 ) {
1055 QStringList parts = QStringList::split( " ", str ); 1068 QStringList parts = QStringList::split( " ", str );
1056 int leftOffset = 0; 1069 int leftOffset = 0;
1057 int rightOffset = parts.count() - 1; 1070 int rightOffset = parts.count() - 1;
1058 1071
1059 QString suffix; 1072 QString suffix;
1060 while ( rightOffset >= 0 ) { 1073 while ( rightOffset >= 0 ) {
1061 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1074 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1062 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1075 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1063 rightOffset--; 1076 rightOffset--;
1064 } else 1077 } else
1065 break; 1078 break;
1066 } 1079 }
1067 setSuffix( suffix ); 1080 setSuffix( suffix );
1068 1081
1069 if ( rightOffset < 0 ) 1082 if ( rightOffset < 0 )
1070 return; 1083 return;
1071 1084
1072 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1085 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1073 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1086 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1074 rightOffset--; 1087 rightOffset--;
1075 } else 1088 } else
1076 setFamilyName( parts[ rightOffset ] ); 1089 setFamilyName( parts[ rightOffset ] );
1077 1090
1078 QString prefix; 1091 QString prefix;
1079 while ( leftOffset < rightOffset ) { 1092 while ( leftOffset < rightOffset ) {
1080 if ( titles.contains( parts[ leftOffset ] ) ) { 1093 if ( titles.contains( parts[ leftOffset ] ) ) {
1081 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1094 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1082 leftOffset++; 1095 leftOffset++;
1083 } else 1096 } else
1084 break; 1097 break;
1085 } 1098 }
1086 setPrefix( prefix ); 1099 setPrefix( prefix );
1087 1100
1088 if ( leftOffset < rightOffset ) { 1101 if ( leftOffset < rightOffset ) {
1089 setGivenName( parts[ leftOffset ] ); 1102 setGivenName( parts[ leftOffset ] );
1090 leftOffset++; 1103 leftOffset++;
1091 } 1104 }
1092 1105
1093 QString additionalName; 1106 QString additionalName;
1094 while ( leftOffset < rightOffset ) { 1107 while ( leftOffset < rightOffset ) {
1095 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1108 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1096 leftOffset++; 1109 leftOffset++;
1097 } 1110 }
1098 setAdditionalName( additionalName ); 1111 setAdditionalName( additionalName );
1099 } else { 1112 } else {
1100 QString part1 = str.left( i ); 1113 QString part1 = str.left( i );
1101 QString part2 = str.mid( i + 1 ); 1114 QString part2 = str.mid( i + 1 );
1102 1115
1103 QStringList parts = QStringList::split( " ", part1 ); 1116 QStringList parts = QStringList::split( " ", part1 );
1104 int leftOffset = 0; 1117 int leftOffset = 0;
1105 int rightOffset = parts.count() - 1; 1118 int rightOffset = parts.count() - 1;
1106 1119
1107 QString suffix; 1120 QString suffix;
1108 while ( rightOffset >= 0 ) { 1121 while ( rightOffset >= 0 ) {
1109 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1122 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1110 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1123 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1111 rightOffset--; 1124 rightOffset--;
1112 } else 1125 } else
1113 break; 1126 break;
1114 } 1127 }
1115 setSuffix( suffix ); 1128 setSuffix( suffix );
1116 1129
1117 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1130 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1118 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1131 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1119 rightOffset--; 1132 rightOffset--;
1120 } else 1133 } else
1121 setFamilyName( parts[ rightOffset ] ); 1134 setFamilyName( parts[ rightOffset ] );
1122 1135
1123 QString prefix; 1136 QString prefix;
1124 while ( leftOffset < rightOffset ) { 1137 while ( leftOffset < rightOffset ) {
1125 if ( titles.contains( parts[ leftOffset ] ) ) { 1138 if ( titles.contains( parts[ leftOffset ] ) ) {
1126 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1139 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1127 leftOffset++; 1140 leftOffset++;
1128 } else 1141 } else
1129 break; 1142 break;
1130 } 1143 }
1131 1144
1132 parts = QStringList::split( " ", part2 ); 1145 parts = QStringList::split( " ", part2 );
1133 1146
1134 leftOffset = 0; 1147 leftOffset = 0;
1135 rightOffset = parts.count(); 1148 rightOffset = parts.count();
1136 1149
1137 while ( leftOffset < rightOffset ) { 1150 while ( leftOffset < rightOffset ) {
1138 if ( titles.contains( parts[ leftOffset ] ) ) { 1151 if ( titles.contains( parts[ leftOffset ] ) ) {
1139 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1152 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1140 leftOffset++; 1153 leftOffset++;
1141 } else 1154 } else
1142 break; 1155 break;
1143 } 1156 }
1144 setPrefix( prefix ); 1157 setPrefix( prefix );
1145 1158
1146 if ( leftOffset < rightOffset ) { 1159 if ( leftOffset < rightOffset ) {
1147 setGivenName( parts[ leftOffset ] ); 1160 setGivenName( parts[ leftOffset ] );
1148 leftOffset++; 1161 leftOffset++;
1149 } 1162 }
1150 1163
1151 QString additionalName; 1164 QString additionalName;
1152 while ( leftOffset < rightOffset ) { 1165 while ( leftOffset < rightOffset ) {
1153 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1166 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1154 leftOffset++; 1167 leftOffset++;
1155 } 1168 }
1156 setAdditionalName( additionalName ); 1169 setAdditionalName( additionalName );
1157 } 1170 }
1158} 1171}
1159 1172
1160QString Addressee::realName() const 1173QString Addressee::realName() const
1161{ 1174{
1162 if ( !formattedName().isEmpty() ) 1175 if ( !formattedName().isEmpty() )
1163 return formattedName(); 1176 return formattedName();
1164 1177
1165 QString n = assembledName(); 1178 QString n = assembledName();
1166 1179
1167 if ( n.isEmpty() ) 1180 if ( n.isEmpty() )
1168 n = name(); 1181 n = name();
1169 1182
1170 return n; 1183 return n;
1171} 1184}
1172 1185
1173QString Addressee::assembledName() const 1186QString Addressee::assembledName() const
1174{ 1187{
1175 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1188 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1176 familyName() + " " + suffix(); 1189 familyName() + " " + suffix();
1177 1190
1178 return name.simplifyWhiteSpace(); 1191 return name.simplifyWhiteSpace();
1179} 1192}
1180 1193
1181QString Addressee::fullEmail( const QString &email ) const 1194QString Addressee::fullEmail( const QString &email ) const
1182{ 1195{
1183 QString e; 1196 QString e;
1184 if ( email.isNull() ) { 1197 if ( email.isNull() ) {
1185 e = preferredEmail(); 1198 e = preferredEmail();
1186 } else { 1199 } else {
1187 e = email; 1200 e = email;
1188 } 1201 }
1189 if ( e.isEmpty() ) return QString::null; 1202 if ( e.isEmpty() ) return QString::null;
1190 1203
1191 QString text; 1204 QString text;
1192 if ( realName().isEmpty() ) 1205 if ( realName().isEmpty() )
1193 text = e; 1206 text = e;
1194 else 1207 else
1195 text = assembledName() + " <" + e + ">"; 1208 text = assembledName() + " <" + e + ">";
1196 1209
1197 return text; 1210 return text;
1198} 1211}
1199 1212
1200void Addressee::insertEmail( const QString &email, bool preferred ) 1213void Addressee::insertEmail( const QString &email, bool preferred )
1201{ 1214{
1202 detach(); 1215 detach();
1203 1216
1204 QStringList::Iterator it = mData->emails.find( email ); 1217 QStringList::Iterator it = mData->emails.find( email );
1205 1218
1206 if ( it != mData->emails.end() ) { 1219 if ( it != mData->emails.end() ) {
1207 if ( !preferred || it == mData->emails.begin() ) return; 1220 if ( !preferred || it == mData->emails.begin() ) return;
1208 mData->emails.remove( it ); 1221 mData->emails.remove( it );
1209 mData->emails.prepend( email ); 1222 mData->emails.prepend( email );
1210 } else { 1223 } else {
1211 if ( preferred ) { 1224 if ( preferred ) {
1212 mData->emails.prepend( email ); 1225 mData->emails.prepend( email );
1213 } else { 1226 } else {
1214 mData->emails.append( email ); 1227 mData->emails.append( email );
1215 } 1228 }
1216 } 1229 }
1217} 1230}
1218 1231
1219void Addressee::removeEmail( const QString &email ) 1232void Addressee::removeEmail( const QString &email )
1220{ 1233{
1221 detach(); 1234 detach();
1222 1235
1223 QStringList::Iterator it = mData->emails.find( email ); 1236 QStringList::Iterator it = mData->emails.find( email );
1224 if ( it == mData->emails.end() ) return; 1237 if ( it == mData->emails.end() ) return;
1225 1238
1226 mData->emails.remove( it ); 1239 mData->emails.remove( it );
1227} 1240}
1228 1241
1229QString Addressee::preferredEmail() const 1242QString Addressee::preferredEmail() const
1230{ 1243{
1231 if ( mData->emails.count() == 0 ) return QString::null; 1244 if ( mData->emails.count() == 0 ) return QString::null;
1232 else return mData->emails.first(); 1245 else return mData->emails.first();
1233} 1246}
1234 1247
1235QStringList Addressee::emails() const 1248QStringList Addressee::emails() const
1236{ 1249{
1237 return mData->emails; 1250 return mData->emails;
1238} 1251}
1239void Addressee::setEmails( const QStringList& emails ) { 1252void Addressee::setEmails( const QStringList& emails ) {
1240 detach(); 1253 detach();
1241 mData->emails = emails; 1254 mData->emails = emails;
1242} 1255}
1243void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1256void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1244{ 1257{
1245 detach(); 1258 detach();
1246 mData->empty = false; 1259 mData->empty = false;
1247 1260
1248 PhoneNumber::List::Iterator it; 1261 PhoneNumber::List::Iterator it;
1249 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1262 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1250 if ( (*it).id() == phoneNumber.id() ) { 1263 if ( (*it).id() == phoneNumber.id() ) {
1251 *it = phoneNumber; 1264 *it = phoneNumber;
1252 return; 1265 return;
1253 } 1266 }
1254 } 1267 }
1255 mData->phoneNumbers.append( phoneNumber ); 1268 mData->phoneNumbers.append( phoneNumber );
1256} 1269}
1257 1270
1258void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1271void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1259{ 1272{
1260 detach(); 1273 detach();
1261 1274
1262 PhoneNumber::List::Iterator it; 1275 PhoneNumber::List::Iterator it;
1263 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1276 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1264 if ( (*it).id() == phoneNumber.id() ) { 1277 if ( (*it).id() == phoneNumber.id() ) {
1265 mData->phoneNumbers.remove( it ); 1278 mData->phoneNumbers.remove( it );
1266 return; 1279 return;
1267 } 1280 }
1268 } 1281 }
1269} 1282}
1270 1283
1271PhoneNumber Addressee::phoneNumber( int type ) const 1284PhoneNumber Addressee::phoneNumber( int type ) const
1272{ 1285{
1273 PhoneNumber phoneNumber( "", type ); 1286 PhoneNumber phoneNumber( "", type );
1274 PhoneNumber::List::ConstIterator it; 1287 PhoneNumber::List::ConstIterator it;
1275 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1288 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1276 if ( matchBinaryPattern( (*it).type(), type ) ) { 1289 if ( matchBinaryPattern( (*it).type(), type ) ) {
1277 if ( (*it).type() & PhoneNumber::Pref ) 1290 if ( (*it).type() & PhoneNumber::Pref )
1278 return (*it); 1291 return (*it);
1279 else if ( phoneNumber.number().isEmpty() ) 1292 else if ( phoneNumber.number().isEmpty() )
1280 phoneNumber = (*it); 1293 phoneNumber = (*it);
1281 } 1294 }
1282 } 1295 }
1283 1296
1284 return phoneNumber; 1297 return phoneNumber;
1285} 1298}
1286 1299
1287PhoneNumber::List Addressee::phoneNumbers() const 1300PhoneNumber::List Addressee::phoneNumbers() const
1288{ 1301{
1289 return mData->phoneNumbers; 1302 return mData->phoneNumbers;
1290} 1303}
1291 1304
1292PhoneNumber::List Addressee::phoneNumbers( int type ) const 1305PhoneNumber::List Addressee::phoneNumbers( int type ) const
1293{ 1306{
1294 PhoneNumber::List list; 1307 PhoneNumber::List list;
1295 1308
1296 PhoneNumber::List::ConstIterator it; 1309 PhoneNumber::List::ConstIterator it;
1297 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1310 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1298 if ( matchBinaryPattern( (*it).type(), type ) ) { 1311 if ( matchBinaryPattern( (*it).type(), type ) ) {
1299 list.append( *it ); 1312 list.append( *it );
1300 } 1313 }
1301 } 1314 }
1302 return list; 1315 return list;
1303} 1316}
1304 1317
1305PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1318PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1306{ 1319{
1307 PhoneNumber::List::ConstIterator it; 1320 PhoneNumber::List::ConstIterator it;
1308 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1321 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1309 if ( (*it).id() == id ) { 1322 if ( (*it).id() == id ) {
1310 return *it; 1323 return *it;
1311 } 1324 }
1312 } 1325 }
1313 return PhoneNumber(); 1326 return PhoneNumber();
1314} 1327}
1315 1328
1316void Addressee::insertKey( const Key &key ) 1329void Addressee::insertKey( const Key &key )
1317{ 1330{
1318 detach(); 1331 detach();
1319 mData->empty = false; 1332 mData->empty = false;
1320 1333
1321 Key::List::Iterator it; 1334 Key::List::Iterator it;
1322 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1335 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1323 if ( (*it).id() == key.id() ) { 1336 if ( (*it).id() == key.id() ) {
1324 *it = key; 1337 *it = key;
1325 return; 1338 return;
1326 } 1339 }
1327 } 1340 }
1328 mData->keys.append( key ); 1341 mData->keys.append( key );
1329} 1342}
1330 1343
1331void Addressee::removeKey( const Key &key ) 1344void Addressee::removeKey( const Key &key )
1332{ 1345{
1333 detach(); 1346 detach();
1334 1347
1335 Key::List::Iterator it; 1348 Key::List::Iterator it;
1336 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1349 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1337 if ( (*it).id() == key.id() ) { 1350 if ( (*it).id() == key.id() ) {
1338 mData->keys.remove( key ); 1351 mData->keys.remove( key );
1339 return; 1352 return;
1340 } 1353 }
1341 } 1354 }
1342} 1355}
1343 1356
1344Key Addressee::key( int type, QString customTypeString ) const 1357Key Addressee::key( int type, QString customTypeString ) const
1345{ 1358{
1346 Key::List::ConstIterator it; 1359 Key::List::ConstIterator it;
1347 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1360 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1348 if ( (*it).type() == type ) { 1361 if ( (*it).type() == type ) {
1349 if ( type == Key::Custom ) { 1362 if ( type == Key::Custom ) {
1350 if ( customTypeString.isEmpty() ) { 1363 if ( customTypeString.isEmpty() ) {
1351 return *it; 1364 return *it;
1352 } else { 1365 } else {
1353 if ( (*it).customTypeString() == customTypeString ) 1366 if ( (*it).customTypeString() == customTypeString )
1354 return (*it); 1367 return (*it);
1355 } 1368 }
1356 } else { 1369 } else {
1357 return *it; 1370 return *it;
1358 } 1371 }
1359 } 1372 }
1360 } 1373 }
1361 return Key( QString(), type ); 1374 return Key( QString(), type );
1362} 1375}
1363void Addressee::setKeys( const Key::List& list ) { 1376void Addressee::setKeys( const Key::List& list ) {
1364 detach(); 1377 detach();
1365 mData->keys = list; 1378 mData->keys = list;
1366} 1379}
1367 1380
1368Key::List Addressee::keys() const 1381Key::List Addressee::keys() const
1369{ 1382{
1370 return mData->keys; 1383 return mData->keys;
1371} 1384}
1372 1385
1373Key::List Addressee::keys( int type, QString customTypeString ) const 1386Key::List Addressee::keys( int type, QString customTypeString ) const
1374{ 1387{
1375 Key::List list; 1388 Key::List list;
1376 1389
1377 Key::List::ConstIterator it; 1390 Key::List::ConstIterator it;
1378 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1391 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1379 if ( (*it).type() == type ) { 1392 if ( (*it).type() == type ) {
1380 if ( type == Key::Custom ) { 1393 if ( type == Key::Custom ) {
1381 if ( customTypeString.isEmpty() ) { 1394 if ( customTypeString.isEmpty() ) {
1382 list.append(*it); 1395 list.append(*it);
1383 } else { 1396 } else {
1384 if ( (*it).customTypeString() == customTypeString ) 1397 if ( (*it).customTypeString() == customTypeString )
1385 list.append(*it); 1398 list.append(*it);
1386 } 1399 }
1387 } else { 1400 } else {
1388 list.append(*it); 1401 list.append(*it);
1389 } 1402 }
1390 } 1403 }
1391 } 1404 }
1392 return list; 1405 return list;
1393} 1406}
1394 1407
1395Key Addressee::findKey( const QString &id ) const 1408Key Addressee::findKey( const QString &id ) const
1396{ 1409{
1397 Key::List::ConstIterator it; 1410 Key::List::ConstIterator it;
1398 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1411 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1399 if ( (*it).id() == id ) { 1412 if ( (*it).id() == id ) {
1400 return *it; 1413 return *it;
1401 } 1414 }
1402 } 1415 }
1403 return Key(); 1416 return Key();
1404} 1417}
1405 1418
1406QString Addressee::asString() const 1419QString Addressee::asString() const
1407{ 1420{
1408 return "Smith, agent Smith..."; 1421 return "Smith, agent Smith...";
1409} 1422}
1410 1423
1411void Addressee::dump() const 1424void Addressee::dump() const
1412{ 1425{
1413 return; 1426 return;
1414 kdDebug(5700) << "Addressee {" << endl; 1427 kdDebug(5700) << "Addressee {" << endl;
1415 1428
1416 kdDebug(5700) << " Uid: '" << uid() << "'" << endl; 1429 kdDebug(5700) << " Uid: '" << uid() << "'" << endl;
1417 1430
1418 kdDebug(5700) << " Name: '" << name() << "'" << endl; 1431 kdDebug(5700) << " Name: '" << name() << "'" << endl;
1419 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; 1432 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl;
1420 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; 1433 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl;
1421 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; 1434 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl;
1422 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; 1435 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl;
1423 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; 1436 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl;
1424 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; 1437 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl;
1425 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; 1438 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl;
1426 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; 1439 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl;
1427 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; 1440 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl;
1428 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; 1441 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl;
1429 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; 1442 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl;
1430 kdDebug(5700) << " Title: '" << title() << "'" << endl; 1443 kdDebug(5700) << " Title: '" << title() << "'" << endl;
1431 kdDebug(5700) << " Role: '" << role() << "'" << endl; 1444 kdDebug(5700) << " Role: '" << role() << "'" << endl;
1432 kdDebug(5700) << " Organization: '" << organization() << "'" << endl; 1445 kdDebug(5700) << " Organization: '" << organization() << "'" << endl;
1433 kdDebug(5700) << " Note: '" << note() << "'" << endl; 1446 kdDebug(5700) << " Note: '" << note() << "'" << endl;
1434 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; 1447 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl;
1435 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; 1448 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl;
1436 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; 1449 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl;
1437 kdDebug(5700) << " Url: '" << url().url() << "'" << endl; 1450 kdDebug(5700) << " Url: '" << url().url() << "'" << endl;
1438 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; 1451 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl;
1439 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; 1452 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl;
1440 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; 1453 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl;
1441 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; 1454 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl;
1442 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; 1455 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl;
1443 1456
1444 kdDebug(5700) << " Emails {" << endl; 1457 kdDebug(5700) << " Emails {" << endl;
1445 QStringList e = emails(); 1458 QStringList e = emails();
1446 QStringList::ConstIterator it; 1459 QStringList::ConstIterator it;
1447 for( it = e.begin(); it != e.end(); ++it ) { 1460 for( it = e.begin(); it != e.end(); ++it ) {
1448 kdDebug(5700) << " " << (*it) << endl; 1461 kdDebug(5700) << " " << (*it) << endl;
1449 } 1462 }
1450 kdDebug(5700) << " }" << endl; 1463 kdDebug(5700) << " }" << endl;
1451 1464
1452 kdDebug(5700) << " PhoneNumbers {" << endl; 1465 kdDebug(5700) << " PhoneNumbers {" << endl;
1453 PhoneNumber::List p = phoneNumbers(); 1466 PhoneNumber::List p = phoneNumbers();
1454 PhoneNumber::List::ConstIterator it2; 1467 PhoneNumber::List::ConstIterator it2;
1455 for( it2 = p.begin(); it2 != p.end(); ++it2 ) { 1468 for( it2 = p.begin(); it2 != p.end(); ++it2 ) {
1456 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; 1469 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl;
1457 } 1470 }
1458 kdDebug(5700) << " }" << endl; 1471 kdDebug(5700) << " }" << endl;
1459 1472
1460 Address::List a = addresses(); 1473 Address::List a = addresses();
1461 Address::List::ConstIterator it3; 1474 Address::List::ConstIterator it3;
1462 for( it3 = a.begin(); it3 != a.end(); ++it3 ) { 1475 for( it3 = a.begin(); it3 != a.end(); ++it3 ) {
1463 (*it3).dump(); 1476 (*it3).dump();
1464 } 1477 }
1465 1478
1466 kdDebug(5700) << " Keys {" << endl; 1479 kdDebug(5700) << " Keys {" << endl;
1467 Key::List k = keys(); 1480 Key::List k = keys();
1468 Key::List::ConstIterator it4; 1481 Key::List::ConstIterator it4;
1469 for( it4 = k.begin(); it4 != k.end(); ++it4 ) { 1482 for( it4 = k.begin(); it4 != k.end(); ++it4 ) {
1470 kdDebug(5700) << " Type: " << int((*it4).type()) << 1483 kdDebug(5700) << " Type: " << int((*it4).type()) <<
1471 " Key: " << (*it4).textData() << 1484 " Key: " << (*it4).textData() <<
1472 " CustomString: " << (*it4).customTypeString() << endl; 1485 " CustomString: " << (*it4).customTypeString() << endl;
1473 } 1486 }
1474 kdDebug(5700) << " }" << endl; 1487 kdDebug(5700) << " }" << endl;
1475 1488
1476 kdDebug(5700) << "}" << endl; 1489 kdDebug(5700) << "}" << endl;
1477} 1490}
1478 1491
1479 1492
1480void Addressee::insertAddress( const Address &address ) 1493void Addressee::insertAddress( const Address &address )
1481{ 1494{
1482 detach(); 1495 detach();
1483 mData->empty = false; 1496 mData->empty = false;
1484 1497
1485 Address::List::Iterator it; 1498 Address::List::Iterator it;
1486 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1499 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1487 if ( (*it).id() == address.id() ) { 1500 if ( (*it).id() == address.id() ) {
1488 *it = address; 1501 *it = address;
1489 return; 1502 return;
1490 } 1503 }
1491 } 1504 }
1492 mData->addresses.append( address ); 1505 mData->addresses.append( address );
1493} 1506}
1494 1507
1495void Addressee::removeAddress( const Address &address ) 1508void Addressee::removeAddress( const Address &address )
1496{ 1509{
1497 detach(); 1510 detach();
1498 1511
1499 Address::List::Iterator it; 1512 Address::List::Iterator it;
1500 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1513 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1501 if ( (*it).id() == address.id() ) { 1514 if ( (*it).id() == address.id() ) {
1502 mData->addresses.remove( it ); 1515 mData->addresses.remove( it );
1503 return; 1516 return;
1504 } 1517 }
1505 } 1518 }
1506} 1519}
1507 1520
1508Address Addressee::address( int type ) const 1521Address Addressee::address( int type ) const
1509{ 1522{
1510 Address address( type ); 1523 Address address( type );
1511 Address::List::ConstIterator it; 1524 Address::List::ConstIterator it;
1512 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1525 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1513 if ( matchBinaryPattern( (*it).type(), type ) ) { 1526 if ( matchBinaryPattern( (*it).type(), type ) ) {
1514 if ( (*it).type() & Address::Pref ) 1527 if ( (*it).type() & Address::Pref )
1515 return (*it); 1528 return (*it);
1516 else if ( address.isEmpty() ) 1529 else if ( address.isEmpty() )
1517 address = (*it); 1530 address = (*it);
1518 } 1531 }
1519 } 1532 }
1520 1533
1521 return address; 1534 return address;
1522} 1535}
1523 1536
1524Address::List Addressee::addresses() const 1537Address::List Addressee::addresses() const
1525{ 1538{
1526 return mData->addresses; 1539 return mData->addresses;
1527} 1540}
1528 1541
1529Address::List Addressee::addresses( int type ) const 1542Address::List Addressee::addresses( int type ) const
1530{ 1543{
1531 Address::List list; 1544 Address::List list;
1532 1545
1533 Address::List::ConstIterator it; 1546 Address::List::ConstIterator it;
1534 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1547 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1535 if ( matchBinaryPattern( (*it).type(), type ) ) { 1548 if ( matchBinaryPattern( (*it).type(), type ) ) {
1536 list.append( *it ); 1549 list.append( *it );
1537 } 1550 }
1538 } 1551 }
1539 1552
1540 return list; 1553 return list;
1541} 1554}
1542 1555
1543Address Addressee::findAddress( const QString &id ) const 1556Address Addressee::findAddress( const QString &id ) const
1544{ 1557{
1545 Address::List::ConstIterator it; 1558 Address::List::ConstIterator it;
1546 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1559 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1547 if ( (*it).id() == id ) { 1560 if ( (*it).id() == id ) {
1548 return *it; 1561 return *it;
1549 } 1562 }
1550 } 1563 }
1551 return Address(); 1564 return Address();
1552} 1565}
1553 1566
1554void Addressee::insertCategory( const QString &c ) 1567void Addressee::insertCategory( const QString &c )
1555{ 1568{
1556 detach(); 1569 detach();
1557 mData->empty = false; 1570 mData->empty = false;
1558 1571
1559 if ( mData->categories.contains( c ) ) return; 1572 if ( mData->categories.contains( c ) ) return;
1560 1573
1561 mData->categories.append( c ); 1574 mData->categories.append( c );
1562} 1575}
1563 1576
1564void Addressee::removeCategory( const QString &c ) 1577void Addressee::removeCategory( const QString &c )
1565{ 1578{
1566 detach(); 1579 detach();
1567 1580
1568 QStringList::Iterator it = mData->categories.find( c ); 1581 QStringList::Iterator it = mData->categories.find( c );
1569 if ( it == mData->categories.end() ) return; 1582 if ( it == mData->categories.end() ) return;
1570 1583
1571 mData->categories.remove( it ); 1584 mData->categories.remove( it );
1572} 1585}
1573 1586
1574bool Addressee::hasCategory( const QString &c ) const 1587bool Addressee::hasCategory( const QString &c ) const
1575{ 1588{
1576 return ( mData->categories.contains( c ) ); 1589 return ( mData->categories.contains( c ) );
1577} 1590}
1578 1591
1579void Addressee::setCategories( const QStringList &c ) 1592void Addressee::setCategories( const QStringList &c )
1580{ 1593{
1581 detach(); 1594 detach();
1582 mData->empty = false; 1595 mData->empty = false;
1583 1596
1584 mData->categories = c; 1597 mData->categories = c;
1585} 1598}
1586 1599
1587QStringList Addressee::categories() const 1600QStringList Addressee::categories() const
1588{ 1601{
1589 return mData->categories; 1602 return mData->categories;
1590} 1603}
1591 1604
1592void Addressee::insertCustom( const QString &app, const QString &name, 1605void Addressee::insertCustom( const QString &app, const QString &name,
1593 const QString &value ) 1606 const QString &value )
1594{ 1607{
1595 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; 1608 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return;
1596 1609
1597 detach(); 1610 detach();
1598 mData->empty = false; 1611 mData->empty = false;
1599 1612
1600 QString qualifiedName = app + "-" + name + ":"; 1613 QString qualifiedName = app + "-" + name + ":";
1601 1614
1602 QStringList::Iterator it; 1615 QStringList::Iterator it;
1603 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1616 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1604 if ( (*it).startsWith( qualifiedName ) ) { 1617 if ( (*it).startsWith( qualifiedName ) ) {
1605 (*it) = qualifiedName + value; 1618 (*it) = qualifiedName + value;
1606 return; 1619 return;
1607 } 1620 }
1608 } 1621 }
1609 mData->custom.append( qualifiedName + value ); 1622 mData->custom.append( qualifiedName + value );
1610} 1623}
1611 1624
1612void Addressee::removeCustom( const QString &app, const QString &name) 1625void Addressee::removeCustom( const QString &app, const QString &name)
1613{ 1626{
1614 detach(); 1627 detach();
1615 1628
1616 QString qualifiedName = app + "-" + name + ":"; 1629 QString qualifiedName = app + "-" + name + ":";
1617 1630
1618 QStringList::Iterator it; 1631 QStringList::Iterator it;
1619 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1632 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1620 if ( (*it).startsWith( qualifiedName ) ) { 1633 if ( (*it).startsWith( qualifiedName ) ) {
1621 mData->custom.remove( it ); 1634 mData->custom.remove( it );
1622 return; 1635 return;
1623 } 1636 }
1624 } 1637 }
1625} 1638}
1626 1639
1627QString Addressee::custom( const QString &app, const QString &name ) const 1640QString Addressee::custom( const QString &app, const QString &name ) const
1628{ 1641{
1629 QString qualifiedName = app + "-" + name + ":"; 1642 QString qualifiedName = app + "-" + name + ":";
1630 QString value; 1643 QString value;
1631 1644
1632 QStringList::ConstIterator it; 1645 QStringList::ConstIterator it;
1633 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1646 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1634 if ( (*it).startsWith( qualifiedName ) ) { 1647 if ( (*it).startsWith( qualifiedName ) ) {
1635 value = (*it).mid( (*it).find( ":" ) + 1 ); 1648 value = (*it).mid( (*it).find( ":" ) + 1 );
1636 break; 1649 break;
1637 } 1650 }
1638 } 1651 }
1639 1652
1640 return value; 1653 return value;
1641} 1654}
1642 1655
1643void Addressee::setCustoms( const QStringList &l ) 1656void Addressee::setCustoms( const QStringList &l )
1644{ 1657{
1645 detach(); 1658 detach();
1646 mData->empty = false; 1659 mData->empty = false;
1647 1660
1648 mData->custom = l; 1661 mData->custom = l;
1649} 1662}
1650 1663
1651QStringList Addressee::customs() const 1664QStringList Addressee::customs() const
1652{ 1665{
1653 return mData->custom; 1666 return mData->custom;
1654} 1667}
1655 1668
1656void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, 1669void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName,
1657 QString &email) 1670 QString &email)
1658{ 1671{
1659 int startPos, endPos, len; 1672 int startPos, endPos, len;
1660 QString partA, partB, result; 1673 QString partA, partB, result;
1661 char endCh = '>'; 1674 char endCh = '>';
1662 1675
1663 startPos = rawEmail.find('<'); 1676 startPos = rawEmail.find('<');
1664 if (startPos < 0) 1677 if (startPos < 0)
1665 { 1678 {
1666 startPos = rawEmail.find('('); 1679 startPos = rawEmail.find('(');
1667 endCh = ')'; 1680 endCh = ')';
1668 } 1681 }
1669 if (startPos < 0) 1682 if (startPos < 0)
1670 { 1683 {
1671 // We couldn't find any separators, so we assume the whole string 1684 // We couldn't find any separators, so we assume the whole string
1672 // is the email address 1685 // is the email address
1673 email = rawEmail; 1686 email = rawEmail;
1674 fullName = ""; 1687 fullName = "";
1675 } 1688 }
1676 else 1689 else
1677 { 1690 {
1678 // We have a start position, try to find an end 1691 // We have a start position, try to find an end
1679 endPos = rawEmail.find(endCh, startPos+1); 1692 endPos = rawEmail.find(endCh, startPos+1);
1680 1693
1681 if (endPos < 0) 1694 if (endPos < 0)
1682 { 1695 {
1683 // We couldn't find the end of the email address. We can only 1696 // We couldn't find the end of the email address. We can only
1684 // assume the entire string is the email address. 1697 // assume the entire string is the email address.
1685 email = rawEmail; 1698 email = rawEmail;
1686 fullName = ""; 1699 fullName = "";
1687 } 1700 }
1688 else 1701 else
1689 { 1702 {
1690 // We have a start and end to the email address 1703 // We have a start and end to the email address
1691 1704
1692 // Grab the name part 1705 // Grab the name part
1693 fullName = rawEmail.left(startPos).stripWhiteSpace(); 1706 fullName = rawEmail.left(startPos).stripWhiteSpace();
1694 1707
1695 // grab the email part 1708 // grab the email part
1696 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace(); 1709 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace();
1697 1710
1698 // Check that we do not have any extra characters on the end of the 1711 // Check that we do not have any extra characters on the end of the
1699 // strings 1712 // strings
1700 len = fullName.length(); 1713 len = fullName.length();
1701 if (fullName[0]=='"' && fullName[len-1]=='"') 1714 if (fullName[0]=='"' && fullName[len-1]=='"')
1702 fullName = fullName.mid(1, len-2); 1715 fullName = fullName.mid(1, len-2);
1703 else if (fullName[0]=='<' && fullName[len-1]=='>') 1716 else if (fullName[0]=='<' && fullName[len-1]=='>')
1704 fullName = fullName.mid(1, len-2); 1717 fullName = fullName.mid(1, len-2);
1705 else if (fullName[0]=='(' && fullName[len-1]==')') 1718 else if (fullName[0]=='(' && fullName[len-1]==')')
1706 fullName = fullName.mid(1, len-2); 1719 fullName = fullName.mid(1, len-2);
1707 } 1720 }
1708 } 1721 }
1709} 1722}
1710 1723
1711void Addressee::setResource( Resource *resource ) 1724void Addressee::setResource( Resource *resource )
1712{ 1725{
1713 detach(); 1726 detach();
1714 mData->resource = resource; 1727 mData->resource = resource;
1715} 1728}
1716 1729
1717Resource *Addressee::resource() const 1730Resource *Addressee::resource() const
1718{ 1731{
1719 return mData->resource; 1732 return mData->resource;
1720} 1733}
1721 1734
1722//US 1735//US
1723QString Addressee::resourceLabel() 1736QString Addressee::resourceLabel()
1724{ 1737{
1725 return i18n("Resource"); 1738 return i18n("Resource");
1726} 1739}
1727 1740
1728void Addressee::setChanged( bool value ) 1741void Addressee::setChanged( bool value )
1729{ 1742{
1730 detach(); 1743 detach();
1731 mData->changed = value; 1744 mData->changed = value;
1732} 1745}
1733 1746
1734bool Addressee::changed() const 1747bool Addressee::changed() const
1735{ 1748{
1736 return mData->changed; 1749 return mData->changed;
1737} 1750}
1738 1751
1739QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) 1752QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
1740{ 1753{
1741 if (!a.mData) return s; 1754 if (!a.mData) return s;
1742 1755
1743 s << a.uid(); 1756 s << a.uid();
1744 1757
1745 s << a.mData->name; 1758 s << a.mData->name;
1746 s << a.mData->formattedName; 1759 s << a.mData->formattedName;
1747 s << a.mData->familyName; 1760 s << a.mData->familyName;
1748 s << a.mData->givenName; 1761 s << a.mData->givenName;
1749 s << a.mData->additionalName; 1762 s << a.mData->additionalName;
1750 s << a.mData->prefix; 1763 s << a.mData->prefix;
1751 s << a.mData->suffix; 1764 s << a.mData->suffix;
1752 s << a.mData->nickName; 1765 s << a.mData->nickName;
1753 s << a.mData->birthday; 1766 s << a.mData->birthday;
1754 s << a.mData->mailer; 1767 s << a.mData->mailer;
1755 s << a.mData->timeZone; 1768 s << a.mData->timeZone;
1756 s << a.mData->geo; 1769 s << a.mData->geo;
1757 s << a.mData->title; 1770 s << a.mData->title;
1758 s << a.mData->role; 1771 s << a.mData->role;
1759 s << a.mData->organization; 1772 s << a.mData->organization;
1760 s << a.mData->note; 1773 s << a.mData->note;
1761 s << a.mData->productId; 1774 s << a.mData->productId;
1762 s << a.mData->revision; 1775 s << a.mData->revision;
1763 s << a.mData->sortString; 1776 s << a.mData->sortString;
1764 s << a.mData->url; 1777 s << a.mData->url;
1765 s << a.mData->secrecy; 1778 s << a.mData->secrecy;
1766 s << a.mData->logo; 1779 s << a.mData->logo;
1767 s << a.mData->photo; 1780 s << a.mData->photo;
1768 s << a.mData->sound; 1781 s << a.mData->sound;
1769 s << a.mData->agent; 1782 s << a.mData->agent;
1770 s << a.mData->phoneNumbers; 1783 s << a.mData->phoneNumbers;
1771 s << a.mData->addresses; 1784 s << a.mData->addresses;
1772 s << a.mData->emails; 1785 s << a.mData->emails;
1773 s << a.mData->categories; 1786 s << a.mData->categories;
1774 s << a.mData->custom; 1787 s << a.mData->custom;
1775 s << a.mData->keys; 1788 s << a.mData->keys;
1776 return s; 1789 return s;
1777} 1790}
1778 1791
1779QDataStream &KABC::operator>>( QDataStream &s, Addressee &a ) 1792QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
1780{ 1793{
1781 if (!a.mData) return s; 1794 if (!a.mData) return s;
1782 1795
1783 s >> a.mData->uid; 1796 s >> a.mData->uid;
1784 1797
1785 s >> a.mData->name; 1798 s >> a.mData->name;
1786 s >> a.mData->formattedName; 1799 s >> a.mData->formattedName;
1787 s >> a.mData->familyName; 1800 s >> a.mData->familyName;
1788 s >> a.mData->givenName; 1801 s >> a.mData->givenName;
1789 s >> a.mData->additionalName; 1802 s >> a.mData->additionalName;
1790 s >> a.mData->prefix; 1803 s >> a.mData->prefix;
1791 s >> a.mData->suffix; 1804 s >> a.mData->suffix;
1792 s >> a.mData->nickName; 1805 s >> a.mData->nickName;
1793 s >> a.mData->birthday; 1806 s >> a.mData->birthday;
1794 s >> a.mData->mailer; 1807 s >> a.mData->mailer;
1795 s >> a.mData->timeZone; 1808 s >> a.mData->timeZone;
1796 s >> a.mData->geo; 1809 s >> a.mData->geo;
1797 s >> a.mData->title; 1810 s >> a.mData->title;
1798 s >> a.mData->role; 1811 s >> a.mData->role;
1799 s >> a.mData->organization; 1812 s >> a.mData->organization;
1800 s >> a.mData->note; 1813 s >> a.mData->note;
1801 s >> a.mData->productId; 1814 s >> a.mData->productId;
1802 s >> a.mData->revision; 1815 s >> a.mData->revision;
1803 s >> a.mData->sortString; 1816 s >> a.mData->sortString;
1804 s >> a.mData->url; 1817 s >> a.mData->url;
1805 s >> a.mData->secrecy; 1818 s >> a.mData->secrecy;
1806 s >> a.mData->logo; 1819 s >> a.mData->logo;
1807 s >> a.mData->photo; 1820 s >> a.mData->photo;
1808 s >> a.mData->sound; 1821 s >> a.mData->sound;
1809 s >> a.mData->agent; 1822 s >> a.mData->agent;
1810 s >> a.mData->phoneNumbers; 1823 s >> a.mData->phoneNumbers;
1811 s >> a.mData->addresses; 1824 s >> a.mData->addresses;
1812 s >> a.mData->emails; 1825 s >> a.mData->emails;
1813 s >> a.mData->categories; 1826 s >> a.mData->categories;
1814 s >> a.mData->custom; 1827 s >> a.mData->custom;
1815 s >> a.mData->keys; 1828 s >> a.mData->keys;
1816 1829
1817 a.mData->empty = false; 1830 a.mData->empty = false;
1818 1831
1819 return s; 1832 return s;
1820} 1833}
1821 1834
1822bool matchBinaryPattern( int value, int pattern ) 1835bool matchBinaryPattern( int value, int pattern )
1823{ 1836{
1824 /** 1837 /**
1825 We want to match all telephonnumbers/addresses which have the bits in the 1838 We want to match all telephonnumbers/addresses which have the bits in the
1826 pattern set. More are allowed. 1839 pattern set. More are allowed.
1827 if pattern == 0 we have a special handling, then we want only those with 1840 if pattern == 0 we have a special handling, then we want only those with
1828 exactly no bit set. 1841 exactly no bit set.
1829 */ 1842 */
1830 if ( pattern == 0 ) 1843 if ( pattern == 0 )
1831 return ( value == 0 ); 1844 return ( value == 0 );
1832 else 1845 else
1833 return ( pattern == ( pattern & value ) ); 1846 return ( pattern == ( pattern & value ) );
1834} 1847}
diff --git a/kabc/addressee.h b/kabc/addressee.h
index 3ba7777..8baa888 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -1,841 +1,843 @@
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#ifndef KABC_ADDRESSEE_H 29#ifndef KABC_ADDRESSEE_H
30#define KABC_ADDRESSEE_H 30#define KABC_ADDRESSEE_H
31 31
32#include <qdatetime.h> 32#include <qdatetime.h>
33#include <qstring.h> 33#include <qstring.h>
34#include <qstringlist.h> 34#include <qstringlist.h>
35#include <qvaluelist.h> 35#include <qvaluelist.h>
36 36
37#include <ksharedptr.h> 37#include <ksharedptr.h>
38#include <kurl.h> 38#include <kurl.h>
39 39
40#include "address.h" 40#include "address.h"
41#include "agent.h" 41#include "agent.h"
42#include "geo.h" 42#include "geo.h"
43#include "key.h" 43#include "key.h"
44#include "phonenumber.h" 44#include "phonenumber.h"
45#include "picture.h" 45#include "picture.h"
46#include "secrecy.h" 46#include "secrecy.h"
47#include "sound.h" 47#include "sound.h"
48#include "timezone.h" 48#include "timezone.h"
49 49
50namespace KABC { 50namespace KABC {
51 51
52class Resource; 52class Resource;
53 53
54/** 54/**
55 @short address book entry 55 @short address book entry
56 56
57 This class represents an entry in the address book. 57 This class represents an entry in the address book.
58 58
59 The data of this class is implicitly shared. You can pass this class by value. 59 The data of this class is implicitly shared. You can pass this class by value.
60 60
61 If you need the name of a field for presenting it to the user you should use 61 If you need the name of a field for presenting it to the user you should use
62 the functions ending in Label(). They return a translated string which can be 62 the functions ending in Label(). They return a translated string which can be
63 used as label for the corresponding field. 63 used as label for the corresponding field.
64 64
65 About the name fields: 65 About the name fields:
66 66
67 givenName() is the first name and familyName() the last name. In some 67 givenName() is the first name and familyName() the last name. In some
68 countries the family name comes first, that's the reason for the 68 countries the family name comes first, that's the reason for the
69 naming. formattedName() is the full name with the correct formatting. 69 naming. formattedName() is the full name with the correct formatting.
70 It is used as an override, when the correct formatting can't be generated 70 It is used as an override, when the correct formatting can't be generated
71 from the other name fields automatically. 71 from the other name fields automatically.
72 72
73 realName() returns a fully formatted name(). It uses formattedName, if set, 73 realName() returns a fully formatted name(). It uses formattedName, if set,
74 otherwise it constucts the name from the name fields. As fallback, if 74 otherwise it constucts the name from the name fields. As fallback, if
75 nothing else is set it uses name(). 75 nothing else is set it uses name().
76 76
77 name() is the NAME type of RFC2426. It can be used as internal name for the 77 name() is the NAME type of RFC2426. It can be used as internal name for the
78 data enty, but shouldn't be used for displaying the data to the user. 78 data enty, but shouldn't be used for displaying the data to the user.
79 */ 79 */
80class Addressee 80class Addressee
81{ 81{
82 friend QDataStream &operator<<( QDataStream &, const Addressee & ); 82 friend QDataStream &operator<<( QDataStream &, const Addressee & );
83 friend QDataStream &operator>>( QDataStream &, Addressee & ); 83 friend QDataStream &operator>>( QDataStream &, Addressee & );
84 84
85 public: 85 public:
86 typedef QValueList<Addressee> List; 86 typedef QValueList<Addressee> List;
87 87
88 /** 88 /**
89 Construct an empty address book entry. 89 Construct an empty address book entry.
90 */ 90 */
91 Addressee(); 91 Addressee();
92 ~Addressee(); 92 ~Addressee();
93 93
94 Addressee( const Addressee & ); 94 Addressee( const Addressee & );
95 Addressee &operator=( const Addressee & ); 95 Addressee &operator=( const Addressee & );
96 96
97 bool operator==( const Addressee & ) const; 97 bool operator==( const Addressee & ) const;
98 bool operator!=( const Addressee & ) const; 98 bool operator!=( const Addressee & ) const;
99 // sync stuff 99 // sync stuff
100 void setTempSyncStat(int id); 100 void setTempSyncStat(int id);
101 int tempSyncStat() const; 101 int tempSyncStat() const;
102 void setIDStr( const QString & ); 102 void setIDStr( const QString & );
103 QString IDStr() const; 103 QString IDStr() const;
104 void setID( const QString &, const QString & ); 104 void setID( const QString &, const QString & );
105 QString getID( const QString & ); 105 QString getID( const QString & );
106 void setCsum( const QString &, const QString & ); 106 void setCsum( const QString &, const QString & );
107 QString getCsum( const QString & ); 107 QString getCsum( const QString & );
108 void removeID(const QString &); 108 void removeID(const QString &);
109 void computeCsum(const QString &dev); 109 void computeCsum(const QString &dev);
110 ulong getCsum4List( const QStringList & attList); 110 ulong getCsum4List( const QStringList & attList);
111 /** 111 /**
112 Return, if the address book entry is empty. 112 Return, if the address book entry is empty.
113 */ 113 */
114 bool isEmpty() const; 114 bool isEmpty() const;
115 void setExternalUID( const QString &id ); 115 void setExternalUID( const QString &id );
116 QString externalUID() const; 116 QString externalUID() const;
117 void setOriginalExternalUID( const QString &id );
118 QString originalExternalUID() const;
117 void mergeContact( const Addressee& ad ); 119 void mergeContact( const Addressee& ad );
118 /** 120 /**
119 Set unique identifier. 121 Set unique identifier.
120 */ 122 */
121 void setUid( const QString &uid ); 123 void setUid( const QString &uid );
122 /** 124 /**
123 Return unique identifier. 125 Return unique identifier.
124 */ 126 */
125 QString uid() const; 127 QString uid() const;
126 /** 128 /**
127 Return translated label for uid field. 129 Return translated label for uid field.
128 */ 130 */
129 static QString uidLabel(); 131 static QString uidLabel();
130 132
131 /** 133 /**
132 Set name. 134 Set name.
133 */ 135 */
134 void setName( const QString &name ); 136 void setName( const QString &name );
135 /** 137 /**
136 Return name. 138 Return name.
137 */ 139 */
138 QString name() const; 140 QString name() const;
139 /** 141 /**
140 Return translated label for name field. 142 Return translated label for name field.
141 */ 143 */
142 static QString nameLabel(); 144 static QString nameLabel();
143 145
144 /** 146 /**
145 Set formatted name. 147 Set formatted name.
146 */ 148 */
147 void setFormattedName( const QString &formattedName ); 149 void setFormattedName( const QString &formattedName );
148 /** 150 /**
149 Return formatted name. 151 Return formatted name.
150 */ 152 */
151 QString formattedName() const; 153 QString formattedName() const;
152 /** 154 /**
153 Return translated label for formattedName field. 155 Return translated label for formattedName field.
154 */ 156 */
155 static QString formattedNameLabel(); 157 static QString formattedNameLabel();
156 158
157 /** 159 /**
158 Set family name. 160 Set family name.
159 */ 161 */
160 void setFamilyName( const QString &familyName ); 162 void setFamilyName( const QString &familyName );
161 /** 163 /**
162 Return family name. 164 Return family name.
163 */ 165 */
164 QString familyName() const; 166 QString familyName() const;
165 /** 167 /**
166 Return translated label for familyName field. 168 Return translated label for familyName field.
167 */ 169 */
168 static QString familyNameLabel(); 170 static QString familyNameLabel();
169 171
170 /** 172 /**
171 Set given name. 173 Set given name.
172 */ 174 */
173 void setGivenName( const QString &givenName ); 175 void setGivenName( const QString &givenName );
174 /** 176 /**
175 Return given name. 177 Return given name.
176 */ 178 */
177 QString givenName() const; 179 QString givenName() const;
178 /** 180 /**
179 Return translated label for givenName field. 181 Return translated label for givenName field.
180 */ 182 */
181 static QString givenNameLabel(); 183 static QString givenNameLabel();
182 184
183 /** 185 /**
184 Set additional names. 186 Set additional names.
185 */ 187 */
186 void setAdditionalName( const QString &additionalName ); 188 void setAdditionalName( const QString &additionalName );
187 /** 189 /**
188 Return additional names. 190 Return additional names.
189 */ 191 */
190 QString additionalName() const; 192 QString additionalName() const;
191 /** 193 /**
192 Return translated label for additionalName field. 194 Return translated label for additionalName field.
193 */ 195 */
194 static QString additionalNameLabel(); 196 static QString additionalNameLabel();
195 197
196 /** 198 /**
197 Set honorific prefixes. 199 Set honorific prefixes.
198 */ 200 */
199 void setPrefix( const QString &prefix ); 201 void setPrefix( const QString &prefix );
200 /** 202 /**
201 Return honorific prefixes. 203 Return honorific prefixes.
202 */ 204 */
203 QString prefix() const; 205 QString prefix() const;
204 /** 206 /**
205 Return translated label for prefix field. 207 Return translated label for prefix field.
206 */ 208 */
207 static QString prefixLabel(); 209 static QString prefixLabel();
208 210
209 /** 211 /**
210 Set honorific suffixes. 212 Set honorific suffixes.
211 */ 213 */
212 void setSuffix( const QString &suffix ); 214 void setSuffix( const QString &suffix );
213 /** 215 /**
214 Return honorific suffixes. 216 Return honorific suffixes.
215 */ 217 */
216 QString suffix() const; 218 QString suffix() const;
217 /** 219 /**
218 Return translated label for suffix field. 220 Return translated label for suffix field.
219 */ 221 */
220 static QString suffixLabel(); 222 static QString suffixLabel();
221 223
222 /** 224 /**
223 Set nick name. 225 Set nick name.
224 */ 226 */
225 void setNickName( const QString &nickName ); 227 void setNickName( const QString &nickName );
226 /** 228 /**
227 Return nick name. 229 Return nick name.
228 */ 230 */
229 QString nickName() const; 231 QString nickName() const;
230 /** 232 /**
231 Return translated label for nickName field. 233 Return translated label for nickName field.
232 */ 234 */
233 static QString nickNameLabel(); 235 static QString nickNameLabel();
234 236
235 /** 237 /**
236 Set birthday. 238 Set birthday.
237 */ 239 */
238 void setBirthday( const QDateTime &birthday ); 240 void setBirthday( const QDateTime &birthday );
239 /** 241 /**
240 Return birthday. 242 Return birthday.
241 */ 243 */
242 QDateTime birthday() const; 244 QDateTime birthday() const;
243 /** 245 /**
244 Return translated label for birthday field. 246 Return translated label for birthday field.
245 */ 247 */
246 static QString birthdayLabel(); 248 static QString birthdayLabel();
247 249
248 /** 250 /**
249 Return translated label for homeAddressStreet field. 251 Return translated label for homeAddressStreet field.
250 */ 252 */
251 static QString homeAddressStreetLabel(); 253 static QString homeAddressStreetLabel();
252 254
253 /** 255 /**
254 Return translated label for homeAddressLocality field. 256 Return translated label for homeAddressLocality field.
255 */ 257 */
256 static QString homeAddressLocalityLabel(); 258 static QString homeAddressLocalityLabel();
257 259
258 /** 260 /**
259 Return translated label for homeAddressRegion field. 261 Return translated label for homeAddressRegion field.
260 */ 262 */
261 static QString homeAddressRegionLabel(); 263 static QString homeAddressRegionLabel();
262 264
263 /** 265 /**
264 Return translated label for homeAddressPostalCode field. 266 Return translated label for homeAddressPostalCode field.
265 */ 267 */
266 static QString homeAddressPostalCodeLabel(); 268 static QString homeAddressPostalCodeLabel();
267 269
268 /** 270 /**
269 Return translated label for homeAddressCountry field. 271 Return translated label for homeAddressCountry field.
270 */ 272 */
271 static QString homeAddressCountryLabel(); 273 static QString homeAddressCountryLabel();
272 274
273 /** 275 /**
274 Return translated label for homeAddressLabel field. 276 Return translated label for homeAddressLabel field.
275 */ 277 */
276 static QString homeAddressLabelLabel(); 278 static QString homeAddressLabelLabel();
277 279
278 /** 280 /**
279 Return translated label for businessAddressStreet field. 281 Return translated label for businessAddressStreet field.
280 */ 282 */
281 static QString businessAddressStreetLabel(); 283 static QString businessAddressStreetLabel();
282 284
283 /** 285 /**
284 Return translated label for businessAddressLocality field. 286 Return translated label for businessAddressLocality field.
285 */ 287 */
286 static QString businessAddressLocalityLabel(); 288 static QString businessAddressLocalityLabel();
287 289
288 /** 290 /**
289 Return translated label for businessAddressRegion field. 291 Return translated label for businessAddressRegion field.
290 */ 292 */
291 static QString businessAddressRegionLabel(); 293 static QString businessAddressRegionLabel();
292 294
293 /** 295 /**
294 Return translated label for businessAddressPostalCode field. 296 Return translated label for businessAddressPostalCode field.
295 */ 297 */
296 static QString businessAddressPostalCodeLabel(); 298 static QString businessAddressPostalCodeLabel();
297 299
298 /** 300 /**
299 Return translated label for businessAddressCountry field. 301 Return translated label for businessAddressCountry field.
300 */ 302 */
301 static QString businessAddressCountryLabel(); 303 static QString businessAddressCountryLabel();
302 304
303 /** 305 /**
304 Return translated label for businessAddressLabel field. 306 Return translated label for businessAddressLabel field.
305 */ 307 */
306 static QString businessAddressLabelLabel(); 308 static QString businessAddressLabelLabel();
307 309
308 /** 310 /**
309 Return translated label for homePhone field. 311 Return translated label for homePhone field.
310 */ 312 */
311 static QString homePhoneLabel(); 313 static QString homePhoneLabel();
312 314
313 /** 315 /**
314 Return translated label for businessPhone field. 316 Return translated label for businessPhone field.
315 */ 317 */
316 static QString businessPhoneLabel(); 318 static QString businessPhoneLabel();
317 319
318 /** 320 /**
319 Return translated label for mobilePhone field. 321 Return translated label for mobilePhone field.
320 */ 322 */
321 static QString mobilePhoneLabel(); 323 static QString mobilePhoneLabel();
322 324
323 /** 325 /**
324 Return translated label for homeFax field. 326 Return translated label for homeFax field.
325 */ 327 */
326 static QString homeFaxLabel(); 328 static QString homeFaxLabel();
327 329
328 /** 330 /**
329 Return translated label for businessFax field. 331 Return translated label for businessFax field.
330 */ 332 */
331 static QString businessFaxLabel(); 333 static QString businessFaxLabel();
332 334
333 /** 335 /**
334 Return translated label for carPhone field. 336 Return translated label for carPhone field.
335 */ 337 */
336 static QString carPhoneLabel(); 338 static QString carPhoneLabel();
337 339
338 /** 340 /**
339 Return translated label for isdn field. 341 Return translated label for isdn field.
340 */ 342 */
341 static QString isdnLabel(); 343 static QString isdnLabel();
342 344
343 /** 345 /**
344 Return translated label for pager field. 346 Return translated label for pager field.
345 */ 347 */
346 static QString pagerLabel(); 348 static QString pagerLabel();
347 349
348 /** 350 /**
349 Return translated label for sip field. 351 Return translated label for sip field.
350 */ 352 */
351 static QString sipLabel(); 353 static QString sipLabel();
352 354
353 /** 355 /**
354 Return translated label for email field. 356 Return translated label for email field.
355 */ 357 */
356 static QString emailLabel(); 358 static QString emailLabel();
357 359
358 /** 360 /**
359 Set mail client. 361 Set mail client.
360 */ 362 */
361 void setMailer( const QString &mailer ); 363 void setMailer( const QString &mailer );
362 /** 364 /**
363 Return mail client. 365 Return mail client.
364 */ 366 */
365 QString mailer() const; 367 QString mailer() const;
366 /** 368 /**
367 Return translated label for mailer field. 369 Return translated label for mailer field.
368 */ 370 */
369 static QString mailerLabel(); 371 static QString mailerLabel();
370 372
371 /** 373 /**
372 Set time zone. 374 Set time zone.
373 */ 375 */
374 void setTimeZone( const TimeZone &timeZone ); 376 void setTimeZone( const TimeZone &timeZone );
375 /** 377 /**
376 Return time zone. 378 Return time zone.
377 */ 379 */
378 TimeZone timeZone() const; 380 TimeZone timeZone() const;
379 /** 381 /**
380 Return translated label for timeZone field. 382 Return translated label for timeZone field.
381 */ 383 */
382 static QString timeZoneLabel(); 384 static QString timeZoneLabel();
383 385
384 /** 386 /**
385 Set geographic position. 387 Set geographic position.
386 */ 388 */
387 void setGeo( const Geo &geo ); 389 void setGeo( const Geo &geo );
388 /** 390 /**
389 Return geographic position. 391 Return geographic position.
390 */ 392 */
391 Geo geo() const; 393 Geo geo() const;
392 /** 394 /**
393 Return translated label for geo field. 395 Return translated label for geo field.
394 */ 396 */
395 static QString geoLabel(); 397 static QString geoLabel();
396 398
397 /** 399 /**
398 Set title. 400 Set title.
399 */ 401 */
400 void setTitle( const QString &title ); 402 void setTitle( const QString &title );
401 /** 403 /**
402 Return title. 404 Return title.
403 */ 405 */
404 QString title() const; 406 QString title() const;
405 /** 407 /**
406 Return translated label for title field. 408 Return translated label for title field.
407 */ 409 */
408 static QString titleLabel(); 410 static QString titleLabel();
409 411
410 /** 412 /**
411 Set role. 413 Set role.
412 */ 414 */
413 void setRole( const QString &role ); 415 void setRole( const QString &role );
414 /** 416 /**
415 Return role. 417 Return role.
416 */ 418 */
417 QString role() const; 419 QString role() const;
418 /** 420 /**
419 Return translated label for role field. 421 Return translated label for role field.
420 */ 422 */
421 static QString roleLabel(); 423 static QString roleLabel();
422 424
423 /** 425 /**
424 Set organization. 426 Set organization.
425 */ 427 */
426 void setOrganization( const QString &organization ); 428 void setOrganization( const QString &organization );
427 /** 429 /**
428 Return organization. 430 Return organization.
429 */ 431 */
430 QString organization() const; 432 QString organization() const;
431 /** 433 /**
432 Return translated label for organization field. 434 Return translated label for organization field.
433 */ 435 */
434 static QString organizationLabel(); 436 static QString organizationLabel();
435 437
436 /** 438 /**
437 Set note. 439 Set note.
438 */ 440 */
439 void setNote( const QString &note ); 441 void setNote( const QString &note );
440 /** 442 /**
441 Return note. 443 Return note.
442 */ 444 */
443 QString note() const; 445 QString note() const;
444 /** 446 /**
445 Return translated label for note field. 447 Return translated label for note field.
446 */ 448 */
447 static QString noteLabel(); 449 static QString noteLabel();
448 450
449 /** 451 /**
450 Set product identifier. 452 Set product identifier.
451 */ 453 */
452 void setProductId( const QString &productId ); 454 void setProductId( const QString &productId );
453 /** 455 /**
454 Return product identifier. 456 Return product identifier.
455 */ 457 */
456 QString productId() const; 458 QString productId() const;
457 /** 459 /**
458 Return translated label for productId field. 460 Return translated label for productId field.
459 */ 461 */
460 static QString productIdLabel(); 462 static QString productIdLabel();
461 463
462 /** 464 /**
463 Set revision date. 465 Set revision date.
464 */ 466 */
465 void setRevision( const QDateTime &revision ); 467 void setRevision( const QDateTime &revision );
466 /** 468 /**
467 Return revision date. 469 Return revision date.
468 */ 470 */
469 QDateTime revision() const; 471 QDateTime revision() const;
470 /** 472 /**
471 Return translated label for revision field. 473 Return translated label for revision field.
472 */ 474 */
473 static QString revisionLabel(); 475 static QString revisionLabel();
474 476
475 /** 477 /**
476 Set sort string. 478 Set sort string.
477 */ 479 */
478 void setSortString( const QString &sortString ); 480 void setSortString( const QString &sortString );
479 /** 481 /**
480 Return sort string. 482 Return sort string.
481 */ 483 */
482 QString sortString() const; 484 QString sortString() const;
483 /** 485 /**
484 Return translated label for sortString field. 486 Return translated label for sortString field.
485 */ 487 */
486 static QString sortStringLabel(); 488 static QString sortStringLabel();
487 489
488 /** 490 /**
489 Set URL. 491 Set URL.
490 */ 492 */
491 void setUrl( const KURL &url ); 493 void setUrl( const KURL &url );
492 /** 494 /**
493 Return URL. 495 Return URL.
494 */ 496 */
495 KURL url() const; 497 KURL url() const;
496 /** 498 /**
497 Return translated label for url field. 499 Return translated label for url field.
498 */ 500 */
499 static QString urlLabel(); 501 static QString urlLabel();
500 502
501 /** 503 /**
502 Set security class. 504 Set security class.
503 */ 505 */
504 void setSecrecy( const Secrecy &secrecy ); 506 void setSecrecy( const Secrecy &secrecy );
505 /** 507 /**
506 Return security class. 508 Return security class.
507 */ 509 */
508 Secrecy secrecy() const; 510 Secrecy secrecy() const;
509 /** 511 /**
510 Return translated label for secrecy field. 512 Return translated label for secrecy field.
511 */ 513 */
512 static QString secrecyLabel(); 514 static QString secrecyLabel();
513 515
514 /** 516 /**
515 Set logo. 517 Set logo.
516 */ 518 */
517 void setLogo( const Picture &logo ); 519 void setLogo( const Picture &logo );
518 /** 520 /**
519 Return logo. 521 Return logo.
520 */ 522 */
521 Picture logo() const; 523 Picture logo() const;
522 /** 524 /**
523 Return translated label for logo field. 525 Return translated label for logo field.
524 */ 526 */
525 static QString logoLabel(); 527 static QString logoLabel();
526 528
527 /** 529 /**
528 Set photo. 530 Set photo.
529 */ 531 */
530 void setPhoto( const Picture &photo ); 532 void setPhoto( const Picture &photo );
531 /** 533 /**
532 Return photo. 534 Return photo.
533 */ 535 */
534 Picture photo() const; 536 Picture photo() const;
535 /** 537 /**
536 Return translated label for photo field. 538 Return translated label for photo field.
537 */ 539 */
538 static QString photoLabel(); 540 static QString photoLabel();
539 541
540 /** 542 /**
541 Set sound. 543 Set sound.
542 */ 544 */
543 void setSound( const Sound &sound ); 545 void setSound( const Sound &sound );
544 /** 546 /**
545 Return sound. 547 Return sound.
546 */ 548 */
547 Sound sound() const; 549 Sound sound() const;
548 /** 550 /**
549 Return translated label for sound field. 551 Return translated label for sound field.
550 */ 552 */
551 static QString soundLabel(); 553 static QString soundLabel();
552 554
553 /** 555 /**
554 Set agent. 556 Set agent.
555 */ 557 */
556 void setAgent( const Agent &agent ); 558 void setAgent( const Agent &agent );
557 /** 559 /**
558 Return agent. 560 Return agent.
559 */ 561 */
560 Agent agent() const; 562 Agent agent() const;
561 /** 563 /**
562 Return translated label for agent field. 564 Return translated label for agent field.
563 */ 565 */
564 static QString agentLabel(); 566 static QString agentLabel();
565 567
566 /** 568 /**
567 Set name fields by parsing the given string and trying to associate the 569 Set name fields by parsing the given string and trying to associate the
568 parts of the string with according fields. This function should probably 570 parts of the string with according fields. This function should probably
569 be a bit more clever. 571 be a bit more clever.
570 */ 572 */
571 void setNameFromString( const QString & ); 573 void setNameFromString( const QString & );
572 574
573 /** 575 /**
574 Return the name of the addressee. This is calculated from all the name 576 Return the name of the addressee. This is calculated from all the name
575 fields. 577 fields.
576 */ 578 */
577 QString realName() const; 579 QString realName() const;
578 580
579 /** 581 /**
580 Return the name that consists of all name parts. 582 Return the name that consists of all name parts.
581 */ 583 */
582 QString assembledName() const; 584 QString assembledName() const;
583 585
584 /** 586 /**
585 Return email address including real name. 587 Return email address including real name.
586 588
587 @param email Email address to be used to construct the full email string. 589 @param email Email address to be used to construct the full email string.
588 If this is QString::null the preferred email address is used. 590 If this is QString::null the preferred email address is used.
589 */ 591 */
590 QString fullEmail( const QString &email=QString::null ) const; 592 QString fullEmail( const QString &email=QString::null ) const;
591 593
592 /** 594 /**
593 Insert an email address. If the email address already exists in this 595 Insert an email address. If the email address already exists in this
594 addressee it is not duplicated. 596 addressee it is not duplicated.
595 597
596 @param email Email address 598 @param email Email address
597 @param preferred Set to true, if this is the preferred email address of 599 @param preferred Set to true, if this is the preferred email address of
598 the addressee. 600 the addressee.
599 */ 601 */
600 void insertEmail( const QString &email, bool preferred=false ); 602 void insertEmail( const QString &email, bool preferred=false );
601 603
602 /** 604 /**
603 Remove email address. If the email address doesn't exist, nothing happens. 605 Remove email address. If the email address doesn't exist, nothing happens.
604 */ 606 */
605 void removeEmail( const QString &email ); 607 void removeEmail( const QString &email );
606 608
607 /** 609 /**
608 Return preferred email address. This is the first email address or the 610 Return preferred email address. This is the first email address or the
609 last one added with @ref insertEmail() with a set preferred parameter. 611 last one added with @ref insertEmail() with a set preferred parameter.
610 */ 612 */
611 QString preferredEmail() const; 613 QString preferredEmail() const;
612 614
613 /** 615 /**
614 Return list of all email addresses. 616 Return list of all email addresses.
615 */ 617 */
616 QStringList emails() const; 618 QStringList emails() const;
617 619
618 /** 620 /**
619 Set the emails to @param. 621 Set the emails to @param.
620 The first email address gets the preferred one! 622 The first email address gets the preferred one!
621 @param list The list of email addresses. 623 @param list The list of email addresses.
622 */ 624 */
623 void setEmails( const QStringList& list); 625 void setEmails( const QStringList& list);
624 626
625 /** 627 /**
626 Insert a phone number. If a phone number with the same id already exists 628 Insert a phone number. If a phone number with the same id already exists
627 in this addressee it is not duplicated. 629 in this addressee it is not duplicated.
628 */ 630 */
629 void insertPhoneNumber( const PhoneNumber &phoneNumber ); 631 void insertPhoneNumber( const PhoneNumber &phoneNumber );
630 632
631 /** 633 /**
632 Remove phone number. If no phone number with the given id exists for this 634 Remove phone number. If no phone number with the given id exists for this
633 addresse nothing happens. 635 addresse nothing happens.
634 */ 636 */
635 void removePhoneNumber( const PhoneNumber &phoneNumber ); 637 void removePhoneNumber( const PhoneNumber &phoneNumber );
636 638
637 /** 639 /**
638 Return phone number, which matches the given type. 640 Return phone number, which matches the given type.
639 */ 641 */
640 PhoneNumber phoneNumber( int type ) const; 642 PhoneNumber phoneNumber( int type ) const;
641 643
642 /** 644 /**
643 Return list of all phone numbers. 645 Return list of all phone numbers.
644 */ 646 */
645 PhoneNumber::List phoneNumbers() const; 647 PhoneNumber::List phoneNumbers() const;
646 648
647 /** 649 /**
648 Return list of phone numbers with a special type. 650 Return list of phone numbers with a special type.
649 */ 651 */
650 PhoneNumber::List phoneNumbers( int type ) const; 652 PhoneNumber::List phoneNumbers( int type ) const;
651 653
652 /** 654 /**
653 Return phone number with the given id. 655 Return phone number with the given id.
654 */ 656 */
655 PhoneNumber findPhoneNumber( const QString &id ) const; 657 PhoneNumber findPhoneNumber( const QString &id ) const;
656 658
657 /** 659 /**
658 Insert a key. If a key with the same id already exists 660 Insert a key. If a key with the same id already exists
659 in this addressee it is not duplicated. 661 in this addressee it is not duplicated.
660 */ 662 */
661 void insertKey( const Key &key ); 663 void insertKey( const Key &key );
662 664
663 /** 665 /**
664 Remove a key. If no key with the given id exists for this 666 Remove a key. If no key with the given id exists for this
665 addresse nothing happens. 667 addresse nothing happens.
666 */ 668 */
667 void removeKey( const Key &key ); 669 void removeKey( const Key &key );
668 670
669 /** 671 /**
670 Return key, which matches the given type. 672 Return key, which matches the given type.
671 If @p type == Key::Custom you can specify a string 673 If @p type == Key::Custom you can specify a string
672 that should match. If you leave the string empty, the first 674 that should match. If you leave the string empty, the first
673 key with a custom value is returned. 675 key with a custom value is returned.
674 */ 676 */
675 Key key( int type, QString customTypeString = QString::null ) const; 677 Key key( int type, QString customTypeString = QString::null ) const;
676 678
677 /** 679 /**
678 Return list of all keys. 680 Return list of all keys.
679 */ 681 */
680 Key::List keys() const; 682 Key::List keys() const;
681 683
682 /** 684 /**
683 Set the list of keys 685 Set the list of keys
684 @param keys The keys to be set. 686 @param keys The keys to be set.
685 */ 687 */
686 void setKeys( const Key::List& keys); 688 void setKeys( const Key::List& keys);
687 689
688 /** 690 /**
689 Return list of keys with a special type. 691 Return list of keys with a special type.
690 If @p type == Key::Custom you can specify a string 692 If @p type == Key::Custom you can specify a string
691 that should match. If you leave the string empty, all custom 693 that should match. If you leave the string empty, all custom
692 keys will be returned. 694 keys will be returned.
693 */ 695 */
694 Key::List keys( int type, QString customTypeString = QString::null ) const; 696 Key::List keys( int type, QString customTypeString = QString::null ) const;
695 697
696 /** 698 /**
697 Return key with the given id. 699 Return key with the given id.
698 */ 700 */
699 Key findKey( const QString &id ) const; 701 Key findKey( const QString &id ) const;
700 702
701 /** 703 /**
702 Insert an address. If an address with the same id already exists 704 Insert an address. If an address with the same id already exists
703 in this addressee it is not duplicated. 705 in this addressee it is not duplicated.
704 */ 706 */
705 void insertAddress( const Address &address ); 707 void insertAddress( const Address &address );
706 708
707 /** 709 /**
708 Remove address. If no address with the given id exists for this 710 Remove address. If no address with the given id exists for this
709 addresse nothing happens. 711 addresse nothing happens.
710 */ 712 */
711 void removeAddress( const Address &address ); 713 void removeAddress( const Address &address );
712 714
713 /** 715 /**
714 Return address, which matches the given type. 716 Return address, which matches the given type.
715 */ 717 */
716 Address address( int type ) const; 718 Address address( int type ) const;
717 719
718 /** 720 /**
719 Return list of all addresses. 721 Return list of all addresses.
720 */ 722 */
721 Address::List addresses() const; 723 Address::List addresses() const;
722 724
723 /** 725 /**
724 Return list of addresses with a special type. 726 Return list of addresses with a special type.
725 */ 727 */
726 Address::List addresses( int type ) const; 728 Address::List addresses( int type ) const;
727 729
728 /** 730 /**
729 Return address with the given id. 731 Return address with the given id.
730 */ 732 */
731 Address findAddress( const QString &id ) const; 733 Address findAddress( const QString &id ) const;
732 734
733 /** 735 /**
734 Insert category. If the category already exists it is not duplicated. 736 Insert category. If the category already exists it is not duplicated.
735 */ 737 */
736 void insertCategory( const QString & ); 738 void insertCategory( const QString & );
737 739
738 /** 740 /**
739 Remove category. 741 Remove category.
740 */ 742 */
741 void removeCategory( const QString & ); 743 void removeCategory( const QString & );
742 744
743 /** 745 /**
744 Return, if addressee has the given category. 746 Return, if addressee has the given category.
745 */ 747 */
746 bool hasCategory( const QString & ) const; 748 bool hasCategory( const QString & ) const;
747 749
748 /** 750 /**
749 Set categories to given value. 751 Set categories to given value.
750 */ 752 */
751 void setCategories( const QStringList & ); 753 void setCategories( const QStringList & );
752 754
753 /** 755 /**
754 Return list of all set categories. 756 Return list of all set categories.
755 */ 757 */
756 QStringList categories() const; 758 QStringList categories() const;
757 759
758 /** 760 /**
759 Insert custom entry. The entry is identified by the name of the inserting 761 Insert custom entry. The entry is identified by the name of the inserting
760 application and a unique name. If an entry with the given app and name 762 application and a unique name. If an entry with the given app and name
761 already exists its value is replaced with the new given value. 763 already exists its value is replaced with the new given value.
762 */ 764 */
763 void insertCustom( const QString &app, const QString &name, 765 void insertCustom( const QString &app, const QString &name,
764 const QString &value ); 766 const QString &value );
765 767
766 /** 768 /**
767 Remove custom entry. 769 Remove custom entry.
768 */ 770 */
769 void removeCustom( const QString &app, const QString &name ); 771 void removeCustom( const QString &app, const QString &name );
770 772
771 /** 773 /**
772 Return value of custom entry, identified by app and entry name. 774 Return value of custom entry, identified by app and entry name.
773 */ 775 */
774 QString custom( const QString &app, const QString &name ) const; 776 QString custom( const QString &app, const QString &name ) const;
775 777
776 /** 778 /**
777 Set all custom entries. 779 Set all custom entries.
778 */ 780 */
779 void setCustoms( const QStringList & ); 781 void setCustoms( const QStringList & );
780 782
781 /** 783 /**
782 Return list of all custom entries. 784 Return list of all custom entries.
783 */ 785 */
784 QStringList customs() const; 786 QStringList customs() const;
785 787
786 /** 788 /**
787 Parse full email address. The result is given back in fullName and email. 789 Parse full email address. The result is given back in fullName and email.
788 */ 790 */
789 static void parseEmailAddress( const QString &rawEmail, QString &fullName, 791 static void parseEmailAddress( const QString &rawEmail, QString &fullName,
790 QString &email ); 792 QString &email );
791 793
792 /** 794 /**
793 Debug output. 795 Debug output.
794 */ 796 */
795 void dump() const; 797 void dump() const;
796 798
797 /** 799 /**
798 Returns string representation of the addressee. 800 Returns string representation of the addressee.
799 */ 801 */
800 QString asString() const; 802 QString asString() const;
801 803
802 /** 804 /**
803 Set resource where the addressee is from. 805 Set resource where the addressee is from.
804 */ 806 */
805 void setResource( Resource *resource ); 807 void setResource( Resource *resource );
806 808
807 /** 809 /**
808 Return pointer to resource. 810 Return pointer to resource.
809 */ 811 */
810 Resource *resource() const; 812 Resource *resource() const;
811 813
812 /** 814 /**
813 Return resourcelabel. 815 Return resourcelabel.
814 */ 816 */
815 //US 817 //US
816 static QString resourceLabel(); 818 static QString resourceLabel();
817 819
818 /** 820 /**
819 Mark addressee as changed. 821 Mark addressee as changed.
820 */ 822 */
821 void setChanged( bool value ); 823 void setChanged( bool value );
822 824
823 /** 825 /**
824 Return whether the addressee is changed. 826 Return whether the addressee is changed.
825 */ 827 */
826 bool changed() const; 828 bool changed() const;
827 829
828 private: 830 private:
829 Addressee copy(); 831 Addressee copy();
830 void detach(); 832 void detach();
831 833
832 struct AddresseeData; 834 struct AddresseeData;
833 mutable KSharedPtr<AddresseeData> mData; 835 mutable KSharedPtr<AddresseeData> mData;
834}; 836};
835 837
836QDataStream &operator<<( QDataStream &, const Addressee & ); 838QDataStream &operator<<( QDataStream &, const Addressee & );
837QDataStream &operator>>( QDataStream &, Addressee & ); 839QDataStream &operator>>( QDataStream &, Addressee & );
838 840
839} 841}
840 842
841#endif 843#endif
diff --git a/kabc/plugins/qtopia/qtopiaE.pro b/kabc/plugins/qtopia/qtopiaE.pro
index 148da2a..c0aa960 100644
--- a/kabc/plugins/qtopia/qtopiaE.pro
+++ b/kabc/plugins/qtopia/qtopiaE.pro
@@ -1,27 +1,27 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2CONFIG += qt warn_on 2CONFIG += qt warn_on
3 3
4TARGET = microkabc_qtopia 4TARGET = microkabc_qtopia
5 5
6INCLUDEPATH += $(KDEPIMDIR)/kabc $(KDEPIMDIR)/microkde $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kio/kfile $(KDEPIMDIR)/microkde/kio/kio $(KDEPIMDIR)/microkde/kresources $(KDEPIMDIR)/qtcompat $(QPEDIR)/include 6INCLUDEPATH += $(KDEPIMDIR) $(KDEPIMDIR)/kabc $(KDEPIMDIR)/microkde $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kio/kfile $(KDEPIMDIR)/microkde/kio/kio $(KDEPIMDIR)/microkde/kresources $(KDEPIMDIR)/qtcompat $(QPEDIR)/include
7 7
8OBJECTS_DIR = obj/$(PLATFORM) 8OBJECTS_DIR = obj/$(PLATFORM)
9MOC_DIR = moc/$(PLATFORM) 9MOC_DIR = moc/$(PLATFORM)
10DESTDIR = $(QPEDIR)/lib 10DESTDIR = $(QPEDIR)/lib
11LIBS += -lmicrokde 11LIBS += -lmicrokde
12LIBS += -lmicrokabc 12LIBS += -lmicrokabc
13LIBS += -L$(QPEDIR)/lib 13LIBS += -L$(QPEDIR)/lib
14LIBS += -lqpepim 14LIBS += -lqpepim
15LIBS += -lqpe 15LIBS += -lqpe
16 16
17INTERFACES = \ 17INTERFACES = \
18 18
19HEADERS = \ 19HEADERS = \
20 resourceqtopia.h \ 20 resourceqtopia.h \
21 resourceqtopiaconfig.h \ 21 resourceqtopiaconfig.h \
22 qtopiaconverter.h 22 qtopiaconverter.h
23 23
24SOURCES = \ 24SOURCES = \
25 resourceqtopia.cpp \ 25 resourceqtopia.cpp \
26 resourceqtopiaconfig.cpp \ 26 resourceqtopiaconfig.cpp \
27 qtopiaconverter.cpp 27 qtopiaconverter.cpp
diff --git a/kabc/plugins/qtopia/qtopiaconverter.cpp b/kabc/plugins/qtopia/qtopiaconverter.cpp
index 7d00a3f..de45e63 100644
--- a/kabc/plugins/qtopia/qtopiaconverter.cpp
+++ b/kabc/plugins/qtopia/qtopiaconverter.cpp
@@ -1,369 +1,376 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@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#include "kglobal.h" 29#include "kglobal.h"
30 30
31 31
32#include "qtopiaconverter.h" 32#include "qtopiaconverter.h"
33 33
34#include <qpe/categories.h> 34#include <qpe/categories.h>
35#include <libkdepim/ksyncprofile.h>
35//US #include <qpe/categoryselect.h> 36//US #include <qpe/categoryselect.h>
36 37
37 38
38using namespace KABC; 39using namespace KABC;
39 40
40QtopiaConverter::QtopiaConverter() : catDB(0) 41QtopiaConverter::QtopiaConverter() : catDB(0)
41{ 42{
42} 43}
43 44
44QtopiaConverter::~QtopiaConverter() 45QtopiaConverter::~QtopiaConverter()
45{ 46{
46 deinit(); 47 deinit();
47} 48}
48 49
49bool QtopiaConverter::init() 50bool QtopiaConverter::init()
50{ 51{
51 catDB = new Categories(); 52 catDB = new Categories();
52 53
53 if (!catDB) 54 if (!catDB)
54 return false; 55 return false;
55 56
56 catDB->load( categoryFileName() ); 57 catDB->load( categoryFileName() );
57 return true; 58 return true;
58} 59}
59 60
60void QtopiaConverter::deinit() 61void QtopiaConverter::deinit()
61{ 62{
62 if (catDB) 63 if (catDB)
63 { 64 {
64 delete catDB; 65 delete catDB;
65 catDB = 0; 66 catDB = 0;
66 } 67 }
67} 68}
68 69
69bool QtopiaConverter::qtopiaToAddressee( const PimContact &contact, Addressee &addr ) 70bool QtopiaConverter::qtopiaToAddressee( const PimContact &contact, Addressee &addr )
70{ 71{
71 // name 72 // name
72 addr.setFormattedName(contact.fileAs()); 73 addr.setFormattedName(contact.fileAs());
73 addr.setFamilyName( contact.lastName() ); 74 addr.setFamilyName( contact.lastName() );
74 addr.setGivenName( contact.firstName() ); 75 addr.setGivenName( contact.firstName() );
75 addr.setAdditionalName( contact.middleName() ); 76 addr.setAdditionalName( contact.middleName() );
76 addr.setPrefix( contact.nameTitle() ); 77 addr.setPrefix( contact.nameTitle() );
77 addr.setSuffix( contact.suffix() ); 78 addr.setSuffix( contact.suffix() );
79
80 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
78 QString exuid = contact.uid().toString(); 81 QString exuid = contact.uid().toString();
82 addr.setOriginalExternalUID( exuid );
79 int ente = exuid.find( "-0000"); 83 int ente = exuid.find( "-0000");
80 if ( exuid.left(1) == "{" ) 84 if ( exuid.left(1) == "{" )
81 exuid = exuid.mid(1); 85 exuid = exuid.mid(1);
82 if ( ente > -1 ) 86 if ( ente > -1 )
83 exuid = exuid.left( ente-1 ); 87 exuid = exuid.left( ente-1 );
84 addr.setExternalUID( exuid ); 88 addr.setExternalUID( exuid );
85 //qDebug("QtopiaConverter:set uid %s ",addr.externalUID().latin1() ); 89 //qDebug("QtopiaConverter:set uid %s ",addr.externalUID().latin1() );
86 90
87 // email 91 // email
88 QStringList emails = contact.emailList(); 92 QStringList emails = contact.emailList();
89 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 93 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
90 addr.insertEmail( *it, ((*it) == contact.defaultEmail()) ); 94 addr.insertEmail( *it, ((*it) == contact.defaultEmail()) );
91 } 95 }
92 96
93 if (!contact.defaultEmail().isEmpty()) 97 if (!contact.defaultEmail().isEmpty())
94 addr.insertEmail(contact.defaultEmail(), true); 98 addr.insertEmail(contact.defaultEmail(), true);
95 99
96 // home 100 // home
97 if ((!contact.homeStreet().isEmpty()) || 101 if ((!contact.homeStreet().isEmpty()) ||
98 (!contact.homeCity().isEmpty()) || 102 (!contact.homeCity().isEmpty()) ||
99 (!contact.homeState().isEmpty()) || 103 (!contact.homeState().isEmpty()) ||
100 (!contact.homeZip().isEmpty()) || 104 (!contact.homeZip().isEmpty()) ||
101 (!contact.homeCountry().isEmpty())) 105 (!contact.homeCountry().isEmpty()))
102 { 106 {
103 Address homeaddress; 107 Address homeaddress;
104 homeaddress.setType(Address::Home); 108 homeaddress.setType(Address::Home);
105//US homeaddress.setPostOfficeBox( "" ); 109//US homeaddress.setPostOfficeBox( "" );
106//US homeaddress.setExtended( "" ); 110//US homeaddress.setExtended( "" );
107 homeaddress.setStreet( contact.homeStreet() ); 111 homeaddress.setStreet( contact.homeStreet() );
108 homeaddress.setLocality( contact.homeCity() ); 112 homeaddress.setLocality( contact.homeCity() );
109 homeaddress.setRegion( contact.homeState() ); 113 homeaddress.setRegion( contact.homeState() );
110 homeaddress.setPostalCode( contact.homeZip() ); 114 homeaddress.setPostalCode( contact.homeZip() );
111 homeaddress.setCountry( contact.homeCountry() ); 115 homeaddress.setCountry( contact.homeCountry() );
112 116
113 addr.insertAddress( homeaddress ); 117 addr.insertAddress( homeaddress );
114 } 118 }
115 119
116 if (!contact.homePhone().isEmpty()) 120 if (!contact.homePhone().isEmpty())
117 { 121 {
118 PhoneNumber homephone; 122 PhoneNumber homephone;
119 homephone.setType( PhoneNumber::Home ); 123 homephone.setType( PhoneNumber::Home );
120 homephone.setNumber( contact.homePhone() ); 124 homephone.setNumber( contact.homePhone() );
121 addr.insertPhoneNumber( homephone ); 125 addr.insertPhoneNumber( homephone );
122 } 126 }
123 127
124 if (!contact.homeFax().isEmpty()) 128 if (!contact.homeFax().isEmpty())
125 { 129 {
126 PhoneNumber homefax; 130 PhoneNumber homefax;
127 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); 131 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax );
128 homefax.setNumber( contact.homeFax() ); 132 homefax.setNumber( contact.homeFax() );
129 addr.insertPhoneNumber( homefax ); 133 addr.insertPhoneNumber( homefax );
130 } 134 }
131 135
132 if (!contact.homeMobile().isEmpty()) 136 if (!contact.homeMobile().isEmpty())
133 { 137 {
134 PhoneNumber homemobile; 138 PhoneNumber homemobile;
135 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); 139 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell );
136 homemobile.setNumber( contact.homeMobile() ); 140 homemobile.setNumber( contact.homeMobile() );
137 addr.insertPhoneNumber( homemobile ); 141 addr.insertPhoneNumber( homemobile );
138 } 142 }
139 143
140 addr.setUrl( contact.homeWebpage() ); 144 addr.setUrl( contact.homeWebpage() );
141 145
142 146
143 // business 147 // business
144 if ((!contact.businessStreet().isEmpty()) || 148 if ((!contact.businessStreet().isEmpty()) ||
145 (!contact.businessCity().isEmpty()) || 149 (!contact.businessCity().isEmpty()) ||
146 (!contact.businessState().isEmpty()) || 150 (!contact.businessState().isEmpty()) ||
147 (!contact.businessZip().isEmpty()) || 151 (!contact.businessZip().isEmpty()) ||
148 (!contact.businessCountry().isEmpty())) 152 (!contact.businessCountry().isEmpty()))
149 { 153 {
150 Address businessaddress; 154 Address businessaddress;
151 businessaddress.setType(Address::Work); 155 businessaddress.setType(Address::Work);
152//US businessaddress.setPostOfficeBox( "" ); 156//US businessaddress.setPostOfficeBox( "" );
153//US businessaddress.setExtended( "" ); 157//US businessaddress.setExtended( "" );
154 businessaddress.setStreet( contact.businessStreet() ); 158 businessaddress.setStreet( contact.businessStreet() );
155 businessaddress.setLocality( contact.businessCity() ); 159 businessaddress.setLocality( contact.businessCity() );
156 businessaddress.setRegion( contact.businessState() ); 160 businessaddress.setRegion( contact.businessState() );
157 businessaddress.setPostalCode( contact.businessZip() ); 161 businessaddress.setPostalCode( contact.businessZip() );
158 businessaddress.setCountry( contact.businessCountry() ); 162 businessaddress.setCountry( contact.businessCountry() );
159 163
160 addr.insertAddress( businessaddress ); 164 addr.insertAddress( businessaddress );
161 } 165 }
162 166
163 167
164 if (!contact.businessPhone().isEmpty()) 168 if (!contact.businessPhone().isEmpty())
165 { 169 {
166 PhoneNumber businessphone; 170 PhoneNumber businessphone;
167 businessphone.setType( PhoneNumber::Work ); 171 businessphone.setType( PhoneNumber::Work );
168 businessphone.setNumber( contact.businessPhone() ); 172 businessphone.setNumber( contact.businessPhone() );
169 addr.insertPhoneNumber( businessphone ); 173 addr.insertPhoneNumber( businessphone );
170 } 174 }
171 175
172 if (!contact.businessFax().isEmpty()) 176 if (!contact.businessFax().isEmpty())
173 { 177 {
174 PhoneNumber businessfax; 178 PhoneNumber businessfax;
175 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); 179 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax );
176 businessfax.setNumber( contact.businessFax() ); 180 businessfax.setNumber( contact.businessFax() );
177 addr.insertPhoneNumber( businessfax ); 181 addr.insertPhoneNumber( businessfax );
178 } 182 }
179 183
180 if (!contact.businessMobile().isEmpty()) 184 if (!contact.businessMobile().isEmpty())
181 { 185 {
182 PhoneNumber businessmobile; 186 PhoneNumber businessmobile;
183 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); 187 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell );
184 businessmobile.setNumber( contact.businessMobile() ); 188 businessmobile.setNumber( contact.businessMobile() );
185 addr.insertPhoneNumber( businessmobile ); 189 addr.insertPhoneNumber( businessmobile );
186 } 190 }
187 191
188 if (!contact.businessPager().isEmpty()) 192 if (!contact.businessPager().isEmpty())
189 { 193 {
190 PhoneNumber businesspager; 194 PhoneNumber businesspager;
191 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); 195 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager );
192 businesspager.setNumber( contact.businessPager() ); 196 businesspager.setNumber( contact.businessPager() );
193 addr.insertPhoneNumber( businesspager ); 197 addr.insertPhoneNumber( businesspager );
194 } 198 }
195 199
196 addr.setRole( contact.jobTitle() ); //? 200 addr.setRole( contact.jobTitle() ); //?
197 addr.setOrganization( contact.company() ); 201 addr.setOrganization( contact.company() );
198 addr.insertCustom( "KADDRESSBOOK", "X-Profession", contact.profession() ); 202 addr.insertCustom( "KADDRESSBOOK", "X-Profession", contact.profession() );
199 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", contact.assistant() ); 203 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", contact.assistant() );
200 addr.insertCustom( "KADDRESSBOOK", "X-Department", contact.department() ); 204 addr.insertCustom( "KADDRESSBOOK", "X-Department", contact.department() );
201 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", contact.manager() ); 205 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", contact.manager() );
202 addr.insertCustom( "KADDRESSBOOK", "X-Office", contact.office() ); 206 addr.insertCustom( "KADDRESSBOOK", "X-Office", contact.office() );
203 207
204 //personal 208 //personal
205 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", contact.spouse() ); 209 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", contact.spouse() );
206 // qtopia uses this categorization: 210 // qtopia uses this categorization:
207 // enum GenderType { UnspecifiedGender=0, Male, Female }; 211 // enum GenderType { UnspecifiedGender=0, Male, Female };
208 if (contact.gender() == PimContact::Male) 212 if (contact.gender() == PimContact::Male)
209 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); 213 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male");
210 else if (contact.gender() == PimContact::Female) 214 else if (contact.gender() == PimContact::Female)
211 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); 215 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female");
212 216
213 if (contact.anniversary().isValid()) { 217 if (contact.anniversary().isValid()) {
214 QString dt = KGlobal::locale()->formatDate(contact.anniversary(), true, KLocale::ISODate); 218 QString dt = KGlobal::locale()->formatDate(contact.anniversary(), true, KLocale::ISODate);
215//US 219//US
216// qDebug("QtopiaConverter::qtopiaToAddressee found:%s", dt.latin1()); 220// qDebug("QtopiaConverter::qtopiaToAddressee found:%s", dt.latin1());
217 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 221 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
218 } 222 }
219 223
220 addr.insertCustom( "KADDRESSBOOK", "X-Children", contact.children() ); 224 addr.insertCustom( "KADDRESSBOOK", "X-Children", contact.children() );
221 if (contact.birthday().isValid()) 225 if (contact.birthday().isValid())
222 addr.setBirthday( contact.birthday() ); 226 addr.setBirthday( contact.birthday() );
223 227
224 addr.setNickName( contact.nickname() ); 228 addr.setNickName( contact.nickname() );
225 229
226 // others 230 // others
227 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. 231 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available.
228 QString notes = contact.notes(); 232 QString notes = contact.notes();
229 notes += "\nBusinessWebPage: " + contact.businessWebpage() + "\n"; 233 notes += "\nBusinessWebPage: " + contact.businessWebpage() + "\n";
230 234
231 addr.setNote( contact.notes() ); 235 addr.setNote( contact.notes() );
232 236
233 237
234 238
235//US QString groups() const { return find( Qtopia::Groups ); } 239//US QString groups() const { return find( Qtopia::Groups ); }
236//US QStringList groupList() const; 240//US QStringList groupList() const;
237 241
238 QArray<int> catArray = contact.categories(); 242 QArray<int> catArray = contact.categories();
239 QString cat; 243 QString cat;
240 244
241 for ( unsigned int i=0; i < catArray.size(); i++ ) { 245 for ( unsigned int i=0; i < catArray.size(); i++ ) {
242 cat = catDB->label("contact", catArray[i]); 246 cat = catDB->label("contact", catArray[i]);
243 if ( cat.isEmpty() ) 247 if ( cat.isEmpty() )
244 addr.insertCategory(QString::number(catArray[i])); 248 addr.insertCategory(QString::number(catArray[i]));
245 else 249 else
246 addr.insertCategory( cat ); 250 addr.insertCategory( cat );
247 } 251 }
248 252
249 return true; 253 return true;
250} 254}
251 255
252bool QtopiaConverter::addresseeToQtopia( const Addressee &addr, PimContact &contact ) 256bool QtopiaConverter::addresseeToQtopia( const Addressee &addr, PimContact &contact )
253{ 257{
258
259
260
254 // name 261 // name
255 contact.setLastName(addr.familyName()); 262 contact.setLastName(addr.familyName());
256 contact.setFirstName(addr.givenName()); 263 contact.setFirstName(addr.givenName());
257 contact.setMiddleName(addr.additionalName()); 264 contact.setMiddleName(addr.additionalName());
258 contact.setNameTitle(addr.prefix()); 265 contact.setNameTitle(addr.prefix());
259 contact.setSuffix(addr.suffix()); 266 contact.setSuffix(addr.suffix());
260 contact.setFileAs(); 267 contact.setFileAs();
261 268
262 269
263 // email 270 // email
264 QStringList emails = addr.emails(); 271 QStringList emails = addr.emails();
265 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 272 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
266 contact.insertEmail(*it); 273 contact.insertEmail(*it);
267 } 274 }
268 contact.setDefaultEmail( addr.preferredEmail() ); 275 contact.setDefaultEmail( addr.preferredEmail() );
269 276
270 277
271 // home 278 // home
272 const Address homeaddress = addr.address(Address::Home); 279 const Address homeaddress = addr.address(Address::Home);
273 if (!homeaddress.isEmpty()) { 280 if (!homeaddress.isEmpty()) {
274 contact.setHomeStreet(homeaddress.street()); 281 contact.setHomeStreet(homeaddress.street());
275 contact.setHomeCity(homeaddress.locality()); 282 contact.setHomeCity(homeaddress.locality());
276 contact.setHomeState(homeaddress.region()); 283 contact.setHomeState(homeaddress.region());
277 contact.setHomeZip(homeaddress.postalCode()); 284 contact.setHomeZip(homeaddress.postalCode());
278 contact.setHomeCountry(homeaddress.country()); 285 contact.setHomeCountry(homeaddress.country());
279 } 286 }
280 287
281 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 288 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
282 if (!homephone.number().isEmpty()) 289 if (!homephone.number().isEmpty())
283 contact.setHomePhone(homephone.number()); 290 contact.setHomePhone(homephone.number());
284 291
285 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 292 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
286 if (!homefax.number().isEmpty()) 293 if (!homefax.number().isEmpty())
287 contact.setHomeFax(homefax.number()); 294 contact.setHomeFax(homefax.number());
288 295
289 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 296 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
290 if (!homemobile.number().isEmpty()) 297 if (!homemobile.number().isEmpty())
291 contact.setHomeMobile(homemobile.number()); 298 contact.setHomeMobile(homemobile.number());
292 299
293 contact.setHomeWebpage(addr.url().url()); 300 contact.setHomeWebpage(addr.url().url());
294 301
295 302
296 // business 303 // business
297 const Address businessaddress = addr.address(Address::Work); 304 const Address businessaddress = addr.address(Address::Work);
298 if (!businessaddress.isEmpty()) { 305 if (!businessaddress.isEmpty()) {
299 contact.setBusinessStreet(businessaddress.street()); 306 contact.setBusinessStreet(businessaddress.street());
300 contact.setBusinessCity(businessaddress.locality()); 307 contact.setBusinessCity(businessaddress.locality());
301 contact.setBusinessState(businessaddress.region()); 308 contact.setBusinessState(businessaddress.region());
302 contact.setBusinessZip(businessaddress.postalCode()); 309 contact.setBusinessZip(businessaddress.postalCode());
303 contact.setBusinessCountry(businessaddress.country()); 310 contact.setBusinessCountry(businessaddress.country());
304 } 311 }
305 312
306 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 313 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
307 if (!businessphone.number().isEmpty()) 314 if (!businessphone.number().isEmpty())
308 contact.setBusinessPhone(businessphone.number()); 315 contact.setBusinessPhone(businessphone.number());
309 316
310 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 317 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
311 if (!businessfax.number().isEmpty()) 318 if (!businessfax.number().isEmpty())
312 contact.setBusinessFax(businessfax.number()); 319 contact.setBusinessFax(businessfax.number());
313 320
314 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 321 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
315 if (!businessmobile.number().isEmpty()) 322 if (!businessmobile.number().isEmpty())
316 contact.setBusinessMobile(businessmobile.number()); 323 contact.setBusinessMobile(businessmobile.number());
317 324
318 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 325 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
319 if (!businesspager.number().isEmpty()) 326 if (!businesspager.number().isEmpty())
320 contact.setBusinessPager(businesspager.number()); 327 contact.setBusinessPager(businesspager.number());
321 328
322 contact.setJobTitle(addr.role()); 329 contact.setJobTitle(addr.role());
323 contact.setCompany(addr.organization()); 330 contact.setCompany(addr.organization());
324 331
325 contact.setProfession(addr.custom( "KADDRESSBOOK", "X-Profession" )); 332 contact.setProfession(addr.custom( "KADDRESSBOOK", "X-Profession" ));
326 contact.setAssistant(addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 333 contact.setAssistant(addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
327 contact.setDepartment(addr.custom( "KADDRESSBOOK", "X-Department" )); 334 contact.setDepartment(addr.custom( "KADDRESSBOOK", "X-Department" ));
328 contact.setManager(addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 335 contact.setManager(addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
329 contact.setOffice(addr.custom( "KADDRESSBOOK", "X-Office" )); 336 contact.setOffice(addr.custom( "KADDRESSBOOK", "X-Office" ));
330 337
331 //personal 338 //personal
332 contact.setSpouse(addr.custom( "KADDRESSBOOK", "X-Spouse" )); 339 contact.setSpouse(addr.custom( "KADDRESSBOOK", "X-Spouse" ));
333 // qtopia uses this categorization: 340 // qtopia uses this categorization:
334 // enum GenderType { UnspecifiedGender=0, Male, Female }; 341 // enum GenderType { UnspecifiedGender=0, Male, Female };
335 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); 342 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
336 if (gt = "male") 343 if (gt = "male")
337 contact.setGender(PimContact::Male); 344 contact.setGender(PimContact::Male);
338 else if (gt = "female") 345 else if (gt = "female")
339 contact.setGender(PimContact::Female); 346 contact.setGender(PimContact::Female);
340 else 347 else
341 contact.setGender(PimContact::UnspecifiedGender); 348 contact.setGender(PimContact::UnspecifiedGender);
342 349
343 350
344 QDate dt = KGlobal::locale()->readDate( 351 QDate dt = KGlobal::locale()->readDate(
345 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate 352 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
346 contact.setAnniversary( dt ); 353 contact.setAnniversary( dt );
347 354
348 contact.setChildren(addr.custom( "KADDRESSBOOK", "X-Children" )); 355 contact.setChildren(addr.custom( "KADDRESSBOOK", "X-Children" ));
349 356
350 contact.setBirthday(addr.birthday().date()); 357 contact.setBirthday(addr.birthday().date());
351 contact.setNickname(addr.nickName()); 358 contact.setNickname(addr.nickName());
352 359
353 // other 360 // other
354 contact.setNotes(addr.note()); 361 contact.setNotes(addr.note());
355 362
356//US QString groups() const { return find( Qtopia::Groups ); } 363//US QString groups() const { return find( Qtopia::Groups ); }
357//US QStringList groupList() const; 364//US QStringList groupList() const;
358 365
359 366
360 QStringList cats = addr.categories(); 367 QStringList cats = addr.categories();
361 368
362 QArray<int> iar; 369 QArray<int> iar;
363 if ( !cats.isEmpty() ) { 370 if ( !cats.isEmpty() ) {
364 QArray<int> iar = catDB->ids("contact", cats); 371 QArray<int> iar = catDB->ids("contact", cats);
365 contact.setCategories(iar); 372 contact.setCategories(iar);
366 } 373 }
367 374
368 return true; 375 return true;
369} 376}
diff --git a/kabc/plugins/qtopia/qtopiaconverter.h b/kabc/plugins/qtopia/qtopiaconverter.h
index 8f4c698..012a6e2 100644
--- a/kabc/plugins/qtopia/qtopiaconverter.h
+++ b/kabc/plugins/qtopia/qtopiaconverter.h
@@ -1,79 +1,80 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@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$Id$ 24$Id$
25*/ 25*/
26 26
27#ifndef KABC_QTOPIACONVERTER_H 27#ifndef KABC_QTOPIACONVERTER_H
28#define KABC_QTOPIACONVERTER_H 28#define KABC_QTOPIACONVERTER_H
29 29
30#include <qstring.h> 30#include <qstring.h>
31 31
32#include "addressee.h" 32#include "addressee.h"
33#include <qpe/pim/contact.h> 33#include <qpe/pim/contact.h>
34#include <qpe/quuid.h>
34 35
35class Categories; 36class Categories;
36 37
37namespace KABC { 38namespace KABC {
38 39
39class QtopiaConverter 40class QtopiaConverter
40{ 41{
41public: 42public:
42 43
43 /** 44 /**
44 * Constructor. 45 * Constructor.
45 */ 46 */
46 QtopiaConverter(); 47 QtopiaConverter();
47 48
48 /** 49 /**
49 * Destructor. 50 * Destructor.
50 */ 51 */
51 virtual ~QtopiaConverter(); 52 virtual ~QtopiaConverter();
52 53
53 bool init(); 54 bool init();
54 void deinit(); 55 void deinit();
55 56
56 /** 57 /**
57 * Converts a vcard string to an addressee. 58 * Converts a vcard string to an addressee.
58 * 59 *
59 * @param contact The qtopia contact. 60 * @param contact The qtopia contact.
60 * @param addr The addressee. 61 * @param addr The addressee.
61 */ 62 */
62 bool qtopiaToAddressee( const PimContact &contact, Addressee &addr ); 63 bool qtopiaToAddressee( const PimContact &contact, Addressee &addr );
63 64
64 /** 65 /**
65 * Converts an addressee to a vcard string. 66 * Converts an addressee to a vcard string.
66 * 67 *
67 * @param addr The addressee. 68 * @param addr The addressee.
68 * @param contact The qtopia contact. 69 * @param contact The qtopia contact.
69 */ 70 */
70 bool addresseeToQtopia( const Addressee &addr, PimContact &contact ); 71 bool addresseeToQtopia( const Addressee &addr, PimContact &contact );
71 72
72 private: 73 private:
73 Categories* catDB; 74 Categories* catDB;
74 75
75 76
76}; 77};
77 78
78} 79}
79#endif 80#endif
diff --git a/kabc/plugins/qtopia/resourceqtopia.cpp b/kabc/plugins/qtopia/resourceqtopia.cpp
index 48a9f22..935a1cf 100644
--- a/kabc/plugins/qtopia/resourceqtopia.cpp
+++ b/kabc/plugins/qtopia/resourceqtopia.cpp
@@ -1,322 +1,346 @@
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#include <sys/types.h> 27#include <sys/types.h>
28#include <sys/stat.h> 28#include <sys/stat.h>
29#include <unistd.h> 29#include <unistd.h>
30 30
31#include <qdir.h> 31#include <qdir.h>
32#include <qfile.h> 32#include <qfile.h>
33#include <qfileinfo.h> 33#include <qfileinfo.h>
34#include <qregexp.h> 34#include <qregexp.h>
35//US #include <qtimer.h> 35//US #include <qtimer.h>
36 36
37#include <kapplication.h> 37#include <kapplication.h>
38#include <kconfig.h> 38#include <kconfig.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <klocale.h> 40#include <klocale.h>
41//US #include <ksavefile.h> 41//US #include <ksavefile.h>
42#include <kstandarddirs.h> 42#include <kstandarddirs.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44 44
45#include <qpe/pim/addressbookaccess.h> 45#include <qpe/pim/addressbookaccess.h>
46 46
47 47
48#include "resourceqtopiaconfig.h" 48#include "resourceqtopiaconfig.h"
49#include "stdaddressbook.h" 49#include "stdaddressbook.h"
50 50
51#include "qtopiaconverter.h" 51#include "qtopiaconverter.h"
52#include "syncprefwidget.h" 52#include "syncprefwidget.h"
53 53
54#include "resourceqtopia.h" 54#include "resourceqtopia.h"
55#include <libkdepim/ksyncprofile.h>
56#include <qpe/quuid.h>
55 57
56using namespace KABC; 58using namespace KABC;
57extern "C" 59extern "C"
58{ 60{
59 void *init_microkabc_qtopia() 61 void *init_microkabc_qtopia()
60 { 62 {
61 return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig, SyncPrefWidgetContainer>(); 63 return new KRES::PluginFactory<ResourceQtopia,ResourceQtopiaConfig, SyncPrefWidgetContainer>();
62 } 64 }
63} 65}
64 66
65ResourceQtopia::ResourceQtopia( const KConfig *config, bool syncable ) 67ResourceQtopia::ResourceQtopia( const KConfig *config, bool syncable )
66 : Resource( config, syncable ), mConverter (0) 68 : Resource( config, syncable ), mConverter (0)
67{ 69{
68 // we can not choose the filename. Therefore use the default to display 70 // we can not choose the filename. Therefore use the default to display
69 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml"; 71 QString fileName = QDir::homeDirPath() + "/Applications/addressbook/addressbook.xml";
70 init( fileName ); 72 init( fileName );
71} 73}
72 74
73ResourceQtopia::ResourceQtopia( const QString &fileName, bool syncable ) 75ResourceQtopia::ResourceQtopia( const QString &fileName, bool syncable )
74 : Resource( 0, syncable ) 76 : Resource( 0, syncable )
75{ 77{
76 init( fileName ); 78 init( fileName );
77} 79}
78 80
79void ResourceQtopia::init( const QString &fileName ) 81void ResourceQtopia::init( const QString &fileName )
80{ 82{
81 83
82 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 84 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
83 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 85 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
84 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 86 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
85 87
86 setFileName( fileName ); 88 setFileName( fileName );
87} 89}
88 90
89ResourceQtopia::~ResourceQtopia() 91ResourceQtopia::~ResourceQtopia()
90{ 92{
91 if (mConverter != 0) 93 if (mConverter != 0)
92 delete mConverter; 94 delete mConverter;
93 95
94 if(mAccess != 0) 96 if(mAccess != 0)
95 delete mAccess; 97 delete mAccess;
96} 98}
97 99
98void ResourceQtopia::writeConfig( KConfig *config ) 100void ResourceQtopia::writeConfig( KConfig *config )
99{ 101{
100 Resource::writeConfig( config ); 102 Resource::writeConfig( config );
101} 103}
102 104
103Ticket *ResourceQtopia::requestSaveTicket() 105Ticket *ResourceQtopia::requestSaveTicket()
104{ 106{
105 kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl; 107 kdDebug(5700) << "ResourceQtopia::requestSaveTicket()" << endl;
106 108
107 qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1()); 109 qDebug("ResourceQtopia::requestSaveTicket: %s", fileName().latin1());
108 110
109 if ( !addressBook() ) return 0; 111 if ( !addressBook() ) return 0;
110 112
111 if ( !lock( fileName() ) ) { 113 if ( !lock( fileName() ) ) {
112 kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '" 114 kdDebug(5700) << "ResourceQtopia::requestSaveTicket(): Unable to lock file '"
113 << fileName() << "'" << endl; 115 << fileName() << "'" << endl;
114 return 0; 116 return 0;
115 } 117 }
116 return createTicket( this ); 118 return createTicket( this );
117} 119}
118 120
119 121
120bool ResourceQtopia::doOpen() 122bool ResourceQtopia::doOpen()
121{ 123{
122 qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1()); 124 qDebug("ResourceQtopia::doOpen(): %s", fileName().latin1());
123 125
124 mAccess = new AddressBookAccess(); 126 mAccess = new AddressBookAccess();
125 127
126 if ( !mAccess ) { 128 if ( !mAccess ) {
127 qDebug("Unable to load file() %s", fileName().latin1()); 129 qDebug("Unable to load file() %s", fileName().latin1());
128 return false; 130 return false;
129 } 131 }
130 132
131 133
132 if (mConverter == 0) 134 if (mConverter == 0)
133 { 135 {
134 mConverter = new QtopiaConverter(); 136 mConverter = new QtopiaConverter();
135 bool res = mConverter->init(); 137 bool res = mConverter->init();
136 if ( !res ) 138 if ( !res )
137 { 139 {
138 QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file"); 140 QString msg("Unable to initialize qtopia converter. Most likely a problem with the category file");
139 qDebug(msg); 141 qDebug(msg);
140 delete mAccess; 142 delete mAccess;
141 mAccess = 0; 143 mAccess = 0;
142 return false; 144 return false;
143 } 145 }
144 } 146 }
145 147
146 return true; 148 return true;
147} 149}
148 150
149void ResourceQtopia::doClose() 151void ResourceQtopia::doClose()
150{ 152{
151 qDebug("ResourceQtopia::doClose: %s", fileName().latin1()); 153 qDebug("ResourceQtopia::doClose: %s", fileName().latin1());
152 154
153 if(mAccess) 155 if(mAccess)
154 { 156 {
155 delete mAccess; 157 delete mAccess;
156 mAccess = 0; 158 mAccess = 0;
157 } 159 }
158 // it seems so, that deletion of access deletes backend as well 160 // it seems so, that deletion of access deletes backend as well
159 //delete backend; 161 //delete backend;
160 162
161 return; 163 return;
162} 164}
163 165
164bool ResourceQtopia::load() 166bool ResourceQtopia::load()
165{ 167{
166 qDebug("ResourceQtopia::load: %s", fileName().latin1()); 168 qDebug("ResourceQtopia::load: %s", fileName().latin1());
167 169
168 AddressBookIterator it(*mAccess); 170 AddressBookIterator it(*mAccess);
169 const PimContact* contact; 171 const PimContact* contact;
170 bool res; 172 bool res;
171 173
172 for (contact=it.toFirst(); it.current(); ++it) 174 for (contact=it.toFirst(); it.current(); ++it)
173 { 175 {
174 contact = it.current(); 176 contact = it.current();
175 177
176 KABC::Addressee addressee; 178 KABC::Addressee addressee;
177 179
178 res = mConverter->qtopiaToAddressee( (*contact), addressee ); 180 res = mConverter->qtopiaToAddressee( (*contact), addressee );
179 181
180 if ( !addressee.isEmpty() && res ) 182 if ( !addressee.isEmpty() && res )
181 { 183 {
182 addressee.setResource( this ); 184 addressee.setResource( this );
183 addressBook()->insertAddressee( addressee ); 185 addressBook()->insertAddressee( addressee );
184 } 186 }
185 } 187 }
186 188
187 return true; 189 return true;
188} 190}
189 191
190bool ResourceQtopia::save( Ticket *ticket ) 192bool ResourceQtopia::save( Ticket *ticket )
191{ 193{
192 qDebug("ResourceQtopia::save: %s", fileName().latin1()); 194 qDebug("ResourceQtopia::save: %s", fileName().latin1());
193 195
194 mDirWatch.stopScan(); 196 mDirWatch.stopScan();
195 197
196 KABC::AddressBook::Iterator it; 198 KABC::AddressBook::Iterator it;
197 bool res; 199 bool res;
198 200
199 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 201 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
200 PimContact c; 202 //KABC::Addressee addressee = (*it);
201 KABC::Addressee addressee = (*it); 203 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
202 204 QUuid uid( (*it).originalExternalUID() );
203 res = mConverter->addresseeToQtopia( *it, c ); 205 bool ok;
204 if (res == true) 206 PimContact c = mAccess->contactForId( uid, &ok );
205 { 207 res = mConverter->addresseeToQtopia( *it, c );
206 mAccess->addContact(c); 208 if (res == true) {
207// if (res == false) 209 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
208// qDebug("Unable to append Contact %s", c.fullName().latin1()); 210 mAccess->addContact(c);
211 KABC::Addressee addressee;
212 mConverter->qtopiaToAddressee( c, addressee );
213 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
214 addressBook()->insertAddressee( addressee );
215
216 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
217 if ( ok )
218 mAccess->removeContact(c);
219 else
220 qDebug("Error revoe contact from qtopia ");
221 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
222 if ( ok ) {
223 mAccess->updateContact(c);
224 KABC::Addressee addressee;
225 mConverter->qtopiaToAddressee( c, addressee );
226 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM );
227 addressBook()->insertAddressee( addressee );
228 }
229 else
230 qDebug("Error update contact from qtopia ");
231
232 }
233
234 } else {
235 qDebug("Unable to convert Addressee %s", (*it).formattedName().latin1());
236 }
237 }
209 } 238 }
210 else
211 {
212 qDebug("Unable to convert Addressee %s", addressee.formattedName().latin1());
213 }
214 }
215 239
216// mAccess->addressBookUpdated(); 240 // mAccess->addressBookUpdated();
217 241
218 mDirWatch.startScan(); 242 mDirWatch.startScan();
219 243
220 delete ticket; 244 delete ticket;
221 unlock( fileName() ); 245 unlock( fileName() );
222 246
223 return true; 247 return true;
224} 248}
225 249
226bool ResourceQtopia::lock( const QString &lockfileName ) 250bool ResourceQtopia::lock( const QString &lockfileName )
227{ 251{
228 qDebug("ResourceQtopia::lock: %s", fileName().latin1()); 252 qDebug("ResourceQtopia::lock: %s", fileName().latin1());
229 253
230 kdDebug(5700) << "ResourceQtopia::lock()" << endl; 254 kdDebug(5700) << "ResourceQtopia::lock()" << endl;
231 255
232 QString fn = lockfileName; 256 QString fn = lockfileName;
233 257
234 KURL url(fn); 258 KURL url(fn);
235 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 259 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
236 260
237 kdDebug(5700) << "-- lock name: " << lockName << endl; 261 kdDebug(5700) << "-- lock name: " << lockName << endl;
238 262
239 if (QFile::exists( lockName )) 263 if (QFile::exists( lockName ))
240 { 264 {
241 qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1()); 265 qDebug("ResourceOpie::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName().latin1());
242 return false; 266 return false;
243 } 267 }
244 268
245 QString lockUniqueName; 269 QString lockUniqueName;
246 lockUniqueName = fn + KApplication::randomString( 8 ); 270 lockUniqueName = fn + KApplication::randomString( 8 );
247 271
248 url = lockUniqueName; 272 url = lockUniqueName;
249//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 273//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
250 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 274 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
251 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 275 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
252 276
253 // Create unique file 277 // Create unique file
254 QFile file( mLockUniqueName ); 278 QFile file( mLockUniqueName );
255 file.open( IO_WriteOnly ); 279 file.open( IO_WriteOnly );
256 file.close(); 280 file.close();
257 281
258 // Create lock file 282 // Create lock file
259 int result = 0; 283 int result = 0;
260#ifndef _WIN32_ 284#ifndef _WIN32_
261 result = ::link( QFile::encodeName( mLockUniqueName ), 285 result = ::link( QFile::encodeName( mLockUniqueName ),
262 QFile::encodeName( lockName ) ); 286 QFile::encodeName( lockName ) );
263#endif 287#endif
264 if ( result == 0 ) { 288 if ( result == 0 ) {
265 addressBook()->emitAddressBookLocked(); 289 addressBook()->emitAddressBookLocked();
266 return true; 290 return true;
267 } 291 }
268 292
269 // TODO: check stat 293 // TODO: check stat
270 294
271 return false; 295 return false;
272} 296}
273 297
274void ResourceQtopia::unlock( const QString &fileName ) 298void ResourceQtopia::unlock( const QString &fileName )
275{ 299{
276 qDebug("ResourceQtopia::unlock() %s", fileName.latin1()); 300 qDebug("ResourceQtopia::unlock() %s", fileName.latin1());
277 301
278 QString fn = fileName; 302 QString fn = fileName;
279 KURL url(fn); 303 KURL url(fn);
280 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 304 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
281 305
282 QFile::remove( lockName ); 306 QFile::remove( lockName );
283 QFile::remove( mLockUniqueName ); 307 QFile::remove( mLockUniqueName );
284 addressBook()->emitAddressBookUnlocked(); 308 addressBook()->emitAddressBookUnlocked();
285} 309}
286 310
287void ResourceQtopia::setFileName( const QString &newFileName ) 311void ResourceQtopia::setFileName( const QString &newFileName )
288{ 312{
289 mDirWatch.stopScan(); 313 mDirWatch.stopScan();
290 mDirWatch.removeFile( fileName() ); 314 mDirWatch.removeFile( fileName() );
291 315
292 Resource::setFileName( newFileName ); 316 Resource::setFileName( newFileName );
293 317
294 mDirWatch.addFile( fileName() ); 318 mDirWatch.addFile( fileName() );
295 mDirWatch.startScan(); 319 mDirWatch.startScan();
296} 320}
297 321
298 322
299void ResourceQtopia::fileChanged() 323void ResourceQtopia::fileChanged()
300{ 324{
301 // There is a small theoretical chance that KDirWatch calls us before 325 // There is a small theoretical chance that KDirWatch calls us before
302 // we are fully constructed 326 // we are fully constructed
303 if (!addressBook()) 327 if (!addressBook())
304 return; 328 return;
305 329
306 QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) ); 330 QString text( i18n( "Qtopia resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
307 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 331 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
308 load(); 332 load();
309 addressBook()->emitAddressBookChanged(); 333 addressBook()->emitAddressBookChanged();
310 } 334 }
311} 335}
312 336
313void ResourceQtopia::removeAddressee( const Addressee &addr ) 337void ResourceQtopia::removeAddressee( const Addressee &addr )
314{ 338{
315} 339}
316 340
317void ResourceQtopia::cleanUp() 341void ResourceQtopia::cleanUp()
318{ 342{
319 unlock( fileName() ); 343 unlock( fileName() );
320} 344}
321 345
322//US #include "resourceqtopia.moc" 346//US #include "resourceqtopia.moc"