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,759 +1,772 @@
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();
diff --git a/kabc/addressee.h b/kabc/addressee.h
index 3ba7777..8baa888 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -1,500 +1,502 @@
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
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"