summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-21 11:24:59 (UTC)
committer zautrix <zautrix>2004-09-21 11:24:59 (UTC)
commitf66482cac98648a1e5ea21fddd55e6916f2a1c60 (patch) (unidiff)
treec51d30ac1fcb67572654a7a4d2d845b57618f61c
parentba89a5d20eb054054d9cfae3723a4d62b9f62efd (diff)
downloadkdepimpi-f66482cac98648a1e5ea21fddd55e6916f2a1c60.zip
kdepimpi-f66482cac98648a1e5ea21fddd55e6916f2a1c60.tar.gz
kdepimpi-f66482cac98648a1e5ea21fddd55e6916f2a1c60.tar.bz2
latest fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/file/resourcefile.cpp1
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp6
-rw-r--r--kaddressbook/kabcore.cpp6
3 files changed, 6 insertions, 7 deletions
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index 6cd63fd..163f2b4 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -1,409 +1,408 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#ifndef _WIN32_ 30#ifndef _WIN32_
31#include <unistd.h> 31#include <unistd.h>
32#endif 32#endif
33 33
34#include <qfile.h> 34#include <qfile.h>
35#include <qfileinfo.h> 35#include <qfileinfo.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtimer.h> 37#include <qtimer.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <klocale.h> 42#include <klocale.h>
43//US #include <ksavefile.h> 43//US #include <ksavefile.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45#include <kmessagebox.h> 45#include <kmessagebox.h>
46 46
47#include "formatfactory.h" 47#include "formatfactory.h"
48 48
49#include "resource.h" 49#include "resource.h"
50#include "resourcefileconfig.h" 50#include "resourcefileconfig.h"
51#include "stdaddressbook.h" 51#include "stdaddressbook.h"
52#define NO_DIRWATCH 52#define NO_DIRWATCH
53#include "resourcefile.h" 53#include "resourcefile.h"
54#include "syncprefwidget.h" 54#include "syncprefwidget.h"
55 55
56//#define ALLOW_LOCKING 56//#define ALLOW_LOCKING
57 57
58 58
59 59
60using namespace KABC; 60using namespace KABC;
61 61
62extern "C" 62extern "C"
63#ifdef _WIN32_ 63#ifdef _WIN32_
64__declspec(dllexport) 64__declspec(dllexport)
65#else 65#else
66{ 66{
67#endif 67#endif
68 68
69//US void *init_kabc_file() 69//US void *init_kabc_file()
70 void *init_microkabc_file() 70 void *init_microkabc_file()
71 { 71 {
72 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, SyncPrefWidgetContainer>(); 72 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, SyncPrefWidgetContainer>();
73 } 73 }
74#ifndef _WIN32_ 74#ifndef _WIN32_
75} 75}
76#endif 76#endif
77 77
78ResourceFile::ResourceFile( const KConfig *config, bool syncable ) 78ResourceFile::ResourceFile( const KConfig *config, bool syncable )
79 : Resource( config, syncable ) , mFormat( 0 ) 79 : Resource( config, syncable ) , mFormat( 0 )
80{ 80{
81 QString fileName, formatName, default_fileName; 81 QString fileName, formatName, default_fileName;
82 82
83 if (syncable == true) 83 if (syncable == true)
84 default_fileName = "/home/polo/kdepim/apps/kabc/localfile.vcf"; 84 default_fileName = "/home/polo/kdepim/apps/kabc/localfile.vcf";
85 else 85 else
86 default_fileName = StdAddressBook::fileName(); 86 default_fileName = StdAddressBook::fileName();
87 87
88 KConfig *cfg = (KConfig *)config; 88 KConfig *cfg = (KConfig *)config;
89 if ( cfg ) { 89 if ( cfg ) {
90 fileName = cfg->readEntry( "FileName", default_fileName ); 90 fileName = cfg->readEntry( "FileName", default_fileName );
91 formatName = cfg->readEntry( "FileFormat", "vcard" ); 91 formatName = cfg->readEntry( "FileFormat", "vcard" );
92 } else { 92 } else {
93 fileName = default_fileName; 93 fileName = default_fileName;
94 formatName = "vcard"; 94 formatName = "vcard";
95 } 95 }
96 96
97 init( fileName, formatName ); 97 init( fileName, formatName );
98} 98}
99 99
100ResourceFile::ResourceFile( const QString &fileName, bool syncable , 100ResourceFile::ResourceFile( const QString &fileName, bool syncable ,
101 const QString &formatName ) 101 const QString &formatName )
102 : Resource( 0, syncable ) 102 : Resource( 0, syncable )
103{ 103{
104// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); 104// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
105 init( fileName, formatName ); 105 init( fileName, formatName );
106} 106}
107 107
108void ResourceFile::init( const QString &fileName, const QString &formatName ) 108void ResourceFile::init( const QString &fileName, const QString &formatName )
109{ 109{
110 mFormatName = formatName; 110 mFormatName = formatName;
111 111
112 FormatFactory *factory = FormatFactory::self(); 112 FormatFactory *factory = FormatFactory::self();
113 mFormat = factory->format( mFormatName ); 113 mFormat = factory->format( mFormatName );
114 114
115 if ( !mFormat ) { 115 if ( !mFormat ) {
116 mFormatName = "vcard"; 116 mFormatName = "vcard";
117 mFormat = factory->format( mFormatName ); 117 mFormat = factory->format( mFormatName );
118 } 118 }
119 119
120#ifndef NO_DIRWATCH 120#ifndef NO_DIRWATCH
121 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 121 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
122 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 122 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
123 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 123 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
124#endif 124#endif
125 setFileName( fileName ); 125 setFileName( fileName );
126} 126}
127 127
128ResourceFile::~ResourceFile() 128ResourceFile::~ResourceFile()
129{ 129{
130 delete mFormat; 130 delete mFormat;
131 mFormat = 0; 131 mFormat = 0;
132} 132}
133 133
134void ResourceFile::writeConfig( KConfig *config ) 134void ResourceFile::writeConfig( KConfig *config )
135{ 135{
136 136
137 config->setGroup( "Resource_" + identifier() ); 137 config->setGroup( "Resource_" + identifier() );
138 Resource::writeConfig( config ); 138 Resource::writeConfig( config );
139 139
140 config->writeEntry( "FileName", mFileName ); 140 config->writeEntry( "FileName", mFileName );
141 config->writeEntry( "FileFormat", mFormatName ); 141 config->writeEntry( "FileFormat", mFormatName );
142 142
143// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); 143// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
144 144
145} 145}
146 146
147Ticket *ResourceFile::requestSaveTicket() 147Ticket *ResourceFile::requestSaveTicket()
148{ 148{
149 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; 149 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl;
150 150
151 if ( !addressBook() ) return 0; 151 if ( !addressBook() ) return 0;
152 152
153#ifdef ALLOW_LOCKING 153#ifdef ALLOW_LOCKING
154 if ( !lock( mFileName ) ) { 154 if ( !lock( mFileName ) ) {
155 qDebug("unablt to lock file "); 155 qDebug("unablt to lock file ");
156 return 0; 156 return 0;
157 } 157 }
158#endif 158#endif
159 return createTicket( this ); 159 return createTicket( this );
160} 160}
161 161
162 162
163bool ResourceFile::doOpen() 163bool ResourceFile::doOpen()
164{ 164{
165 QFile file( mFileName ); 165 QFile file( mFileName );
166 qDebug("ResourceFile::openfile %s ", mFileName.latin1()); 166 qDebug("ResourceFile::openfile %s ", mFileName.latin1());
167 167
168 if ( !file.exists() ) { 168 if ( !file.exists() ) {
169 // try to create the file 169 // try to create the file
170 bool ok = file.open( IO_WriteOnly ); 170 bool ok = file.open( IO_WriteOnly );
171 if ( ok ) 171 if ( ok )
172 file.close(); 172 file.close();
173 173
174 return ok; 174 return ok;
175 } else { 175 } else {
176 if ( !file.open( IO_ReadWrite ) ) 176 if ( !file.open( IO_ReadWrite ) )
177 return false; 177 return false;
178 178
179 if ( file.size() == 0 ) { 179 if ( file.size() == 0 ) {
180 file.close(); 180 file.close();
181 return true; 181 return true;
182 } 182 }
183 183
184 bool ok = mFormat->checkFormat( &file ); 184 bool ok = mFormat->checkFormat( &file );
185 file.close(); 185 file.close();
186 186
187 return ok; 187 return ok;
188 } 188 }
189} 189}
190 190
191void ResourceFile::doClose() 191void ResourceFile::doClose()
192{ 192{
193} 193}
194 194
195bool ResourceFile::load() 195bool ResourceFile::load()
196{ 196{
197 197
198 qDebug("ResourceFile::loadfile %s ", mFileName.latin1());
199 QFile file( mFileName ); 198 QFile file( mFileName );
200 if ( !file.open( IO_ReadOnly ) ) { 199 if ( !file.open( IO_ReadOnly ) ) {
201 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) ); 200 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) );
202 return false; 201 return false;
203 } 202 }
204 203
205// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1()); 204// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1());
206 205
207 return mFormat->loadAll( addressBook(), this, &file ); 206 return mFormat->loadAll( addressBook(), this, &file );
208} 207}
209 208
210bool ResourceFile::save( Ticket *ticket ) 209bool ResourceFile::save( Ticket *ticket )
211{ 210{
212// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1()); 211// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
213 212
214 213
215 // create backup file 214 // create backup file
216 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() ); 215 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
217 216
218/*US we use a simpler method to create a backupfile 217/*US we use a simpler method to create a backupfile
219 218
220 (void) KSaveFile::backupFile( mFileName, QString::null 219 (void) KSaveFile::backupFile( mFileName, QString::null
221 ,extension ); 220 ,extension );
222 221
223 KSaveFile saveFile( mFileName ); 222 KSaveFile saveFile( mFileName );
224 bool ok = false; 223 bool ok = false;
225 if ( saveFile.status() == 0 && saveFile.file() ) 224 if ( saveFile.status() == 0 && saveFile.file() )
226 { 225 {
227 mFormat->saveAll( addressBook(), this, saveFile.file() ); 226 mFormat->saveAll( addressBook(), this, saveFile.file() );
228 ok = saveFile.close(); 227 ok = saveFile.close();
229 } 228 }
230*/ 229*/
231 230
232//US ToDo: write backupfile 231//US ToDo: write backupfile
233#ifndef NO_DIRWATCH 232#ifndef NO_DIRWATCH
234 mDirWatch.stopScan(); 233 mDirWatch.stopScan();
235#endif 234#endif
236 QFile info; 235 QFile info;
237 info.setName( mFileName ); 236 info.setName( mFileName );
238 bool ok = info.open( IO_WriteOnly ); 237 bool ok = info.open( IO_WriteOnly );
239 if ( ok ) { 238 if ( ok ) {
240 mFormat->saveAll( addressBook(), this, &info ); 239 mFormat->saveAll( addressBook(), this, &info );
241 240
242 info.close(); 241 info.close();
243 ok = true; 242 ok = true;
244 } 243 }
245 else { 244 else {
246 245
247 } 246 }
248 247
249 if ( !ok ) 248 if ( !ok )
250 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) ); 249 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) );
251#ifndef NO_DIRWATCH 250#ifndef NO_DIRWATCH
252 mDirWatch.startScan(); 251 mDirWatch.startScan();
253#endif 252#endif
254 delete ticket; 253 delete ticket;
255#ifdef ALLOW_LOCKING 254#ifdef ALLOW_LOCKING
256 unlock( mFileName ); 255 unlock( mFileName );
257#endif 256#endif
258 257
259 return ok; 258 return ok;
260} 259}
261 260
262bool ResourceFile::lock( const QString &fileName ) 261bool ResourceFile::lock( const QString &fileName )
263{ 262{
264#ifdef ALLOW_LOCKING 263#ifdef ALLOW_LOCKING
265 264
266 265
267 QString fn = fileName; 266 QString fn = fileName;
268 267
269//US change the implementation how the lockfilename is getting created 268//US change the implementation how the lockfilename is getting created
270//US fn.replace( QRegExp("/"), "_" ); 269//US fn.replace( QRegExp("/"), "_" );
271//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 270//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
272 271
273 KURL url(fn); 272 KURL url(fn);
274 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 273 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
275 274
276 275
277 276
278 if (QFile::exists( lockName )) return false; 277 if (QFile::exists( lockName )) return false;
279 278
280 QString lockUniqueName; 279 QString lockUniqueName;
281 lockUniqueName = fn + KApplication::randomString( 8 ); 280 lockUniqueName = fn + KApplication::randomString( 8 );
282 281
283 url = lockUniqueName; 282 url = lockUniqueName;
284//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 283//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
285 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 284 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
286 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 285 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
287 286
288 // Create unique file 287 // Create unique file
289 QFile file( mLockUniqueName ); 288 QFile file( mLockUniqueName );
290 file.open( IO_WriteOnly ); 289 file.open( IO_WriteOnly );
291 file.close(); 290 file.close();
292 291
293 // Create lock file 292 // Create lock file
294 int result = 0; 293 int result = 0;
295#ifndef _WIN32_ 294#ifndef _WIN32_
296 result = ::link( QFile::encodeName( mLockUniqueName ), 295 result = ::link( QFile::encodeName( mLockUniqueName ),
297 QFile::encodeName( lockName ) ); 296 QFile::encodeName( lockName ) );
298#endif 297#endif
299 if ( result == 0 ) { 298 if ( result == 0 ) {
300 addressBook()->emitAddressBookLocked(); 299 addressBook()->emitAddressBookLocked();
301 return true; 300 return true;
302 } 301 }
303 302
304 // TODO: check stat 303 // TODO: check stat
305 304
306 return false; 305 return false;
307#else 306#else
308 return true; 307 return true;
309#endif 308#endif
310} 309}
311 310
312void ResourceFile::unlock( const QString &fileName ) 311void ResourceFile::unlock( const QString &fileName )
313{ 312{
314#ifdef ALLOW_LOCKING 313#ifdef ALLOW_LOCKING
315 QString fn = fileName; 314 QString fn = fileName;
316//US change the implementation how the lockfilename is getting created 315//US change the implementation how the lockfilename is getting created
317//US fn.replace( QRegExp( "/" ), "_" ); 316//US fn.replace( QRegExp( "/" ), "_" );
318//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 317//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
319//US QString lockName = fn + ".lock"; 318//US QString lockName = fn + ".lock";
320 KURL url(fn); 319 KURL url(fn);
321 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 320 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
322 321
323 QFile::remove( lockName ); 322 QFile::remove( lockName );
324 QFile::remove( mLockUniqueName ); 323 QFile::remove( mLockUniqueName );
325 addressBook()->emitAddressBookUnlocked(); 324 addressBook()->emitAddressBookUnlocked();
326#else 325#else
327 return; 326 return;
328#endif 327#endif
329} 328}
330 329
331void ResourceFile::setFileName( const QString &fileName ) 330void ResourceFile::setFileName( const QString &fileName )
332{ 331{
333#ifndef NO_DIRWATCH 332#ifndef NO_DIRWATCH
334 mDirWatch.stopScan(); 333 mDirWatch.stopScan();
335 mDirWatch.removeFile( mFileName ); 334 mDirWatch.removeFile( mFileName );
336 mFileName = fileName; 335 mFileName = fileName;
337 336
338 337
339 mDirWatch.addFile( mFileName ); 338 mDirWatch.addFile( mFileName );
340 mDirWatch.startScan(); 339 mDirWatch.startScan();
341#else 340#else
342 mFileName = fileName; 341 mFileName = fileName;
343#endif 342#endif
344 343
345//US simulate KDirWatch event 344//US simulate KDirWatch event
346//US fileChanged(); 345//US fileChanged();
347} 346}
348 347
349QString ResourceFile::fileName() const 348QString ResourceFile::fileName() const
350{ 349{
351 return mFileName; 350 return mFileName;
352} 351}
353 352
354void ResourceFile::setFormat( const QString &format ) 353void ResourceFile::setFormat( const QString &format )
355{ 354{
356 mFormatName = format; 355 mFormatName = format;
357 delete mFormat; 356 delete mFormat;
358 357
359 FormatFactory *factory = FormatFactory::self(); 358 FormatFactory *factory = FormatFactory::self();
360 mFormat = factory->format( mFormatName ); 359 mFormat = factory->format( mFormatName );
361/*US 360/*US
362//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1()); 361//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1());
363 if (mFormatName == "vcard") { 362 if (mFormatName == "vcard") {
364 mFormat = new VCardFormatPlugin2(); 363 mFormat = new VCardFormatPlugin2();
365// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 364// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
366 } 365 }
367 else if (mFormatName == "binary") { 366 else if (mFormatName == "binary") {
368 mFormat = new BinaryFormat(); 367 mFormat = new BinaryFormat();
369// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 368// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
370 } 369 }
371 else 370 else
372 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1()); 371 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1());
373*/ 372*/
374 373
375} 374}
376 375
377QString ResourceFile::format() const 376QString ResourceFile::format() const
378{ 377{
379 return mFormatName; 378 return mFormatName;
380} 379}
381 380
382void ResourceFile::fileChanged() 381void ResourceFile::fileChanged()
383{ 382{
384 // There is a small theoretical chance that KDirWatch calls us before 383 // There is a small theoretical chance that KDirWatch calls us before
385 // we are fully constructed 384 // we are fully constructed
386 if (!addressBook()) 385 if (!addressBook())
387 return; 386 return;
388 387
389 388
390 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( mFileName ) ); 389 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( mFileName ) );
391 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 390 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
392 load(); 391 load();
393 addressBook()->emitAddressBookChanged(); 392 addressBook()->emitAddressBookChanged();
394 } 393 }
395} 394}
396 395
397void ResourceFile::removeAddressee( const Addressee &addr ) 396void ResourceFile::removeAddressee( const Addressee &addr )
398{ 397{
399 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) ); 398 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) );
400 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) ); 399 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) );
401 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) ); 400 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) );
402} 401}
403 402
404void ResourceFile::cleanUp() 403void ResourceFile::cleanUp()
405{ 404{
406 unlock( mFileName ); 405 unlock( mFileName );
407} 406}
408 407
409//US #include "resourcefile.moc" 408//US #include "resourcefile.moc"
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
index d36df20..6418b54 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
@@ -1,444 +1,444 @@
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#include "kglobal.h" 28#include "kglobal.h"
29#include <qregexp.h> 29#include <qregexp.h>
30 30
31 31
32#include "sharpdtmconverter.h" 32#include "sharpdtmconverter.h"
33 33
34#include <sl/slcategories.h> 34#include <sl/slcategories.h>
35#include <libkdepim/ksyncprofile.h> 35#include <libkdepim/ksyncprofile.h>
36//US #include <qpe/categoryselect.h> 36//US #include <qpe/categoryselect.h>
37 37
38 38
39using namespace KABC; 39using namespace KABC;
40using namespace SlCategory; 40using namespace SlCategory;
41 41
42SharpDTMConverter::SharpDTMConverter() : catDB(0) 42SharpDTMConverter::SharpDTMConverter() : catDB(0)
43{ 43{
44} 44}
45 45
46SharpDTMConverter::~SharpDTMConverter() 46SharpDTMConverter::~SharpDTMConverter()
47{ 47{
48 deinit(); 48 deinit();
49} 49}
50 50
51bool SharpDTMConverter::init() 51bool SharpDTMConverter::init()
52{ 52{
53 catDB = new SlCategory::SlCategories(); 53 catDB = new SlCategory::SlCategories();
54 54
55 if (!catDB) 55 if (!catDB)
56 return false; 56 return false;
57 57
58// catDB->load( categoryFileName() ); 58// catDB->load( categoryFileName() );
59 return true; 59 return true;
60} 60}
61 61
62void SharpDTMConverter::deinit() 62void SharpDTMConverter::deinit()
63{ 63{
64 if (catDB) 64 if (catDB)
65 { 65 {
66 delete catDB; 66 delete catDB;
67 catDB = 0; 67 catDB = 0;
68 } 68 }
69} 69}
70 70
71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ) 71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr )
72{ 72{
73 SlZDataBase* db = (SlZDataBase*)database; 73 SlZDataBase* db = (SlZDataBase*)database;
74 74
75 // for syncing: we need setting of the two fields 75 // for syncing: we need setting of the two fields
76 addr.setExternalUID( QString::number( contact ) ); 76 addr.setExternalUID( QString::number( contact ) );
77 addr.setOriginalExternalUID( QString::number( contact ) ); 77 addr.setOriginalExternalUID( QString::number( contact ) );
78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
79 79
80 80
81 // name 81 // name
82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); 82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!");
83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); // needs fix 83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); // needs fix
84 84
85 addr.setFamilyName( db->readField(ZdbAdrs::LastName) ); 85 addr.setFamilyName( db->readField(ZdbAdrs::LastName) );
86 addr.setGivenName( db->readField(ZdbAdrs::FirstName) ); 86 addr.setGivenName( db->readField(ZdbAdrs::FirstName) );
87 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) ); 87 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) );
88 addr.setPrefix( db->readField(ZdbAdrs::Title) ); 88 addr.setPrefix( db->readField(ZdbAdrs::Title) );
89 addr.setSuffix( db->readField(ZdbAdrs::Suffix) ); 89 addr.setSuffix( db->readField(ZdbAdrs::Suffix) );
90 90
91 91
92 QString emailstr = db->readField(ZdbAdrs::Emails); 92 QString emailstr = db->readField(ZdbAdrs::Emails);
93 emailstr.replace( QRegExp(","), " " ); 93 emailstr.replace( QRegExp(","), " " );
94 emailstr.replace( QRegExp(";"), " " ); 94 emailstr.replace( QRegExp(";"), " " );
95 emailstr.replace( QRegExp(":"), " " ); 95 emailstr.replace( QRegExp(":"), " " );
96 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); 96 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1());
97 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace()); 97 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace());
98 bool defE = false; 98 bool defE = false;
99 bool found = false; 99 bool found = false;
100 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 100 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
101 if (found ) 101 if (found )
102 defE = false; 102 defE = false;
103 else 103 else
104 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower()); 104 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower());
105 addr.insertEmail( *it, defE ); 105 addr.insertEmail( *it, defE );
106 } 106 }
107 if ( ! found ) 107 if ( ! found )
108 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty()) 108 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty())
109 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true); 109 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true);
110 110
111 // home 111 // home
112 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) || 112 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) ||
113 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) || 113 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) ||
114 (!db->readField(ZdbAdrs::HomeState).isEmpty()) || 114 (!db->readField(ZdbAdrs::HomeState).isEmpty()) ||
115 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) || 115 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) ||
116 (!db->readField(ZdbAdrs::HomeCountry).isEmpty())) 116 (!db->readField(ZdbAdrs::HomeCountry).isEmpty()))
117 { 117 {
118 Address homeaddress; 118 Address homeaddress;
119 homeaddress.setType(Address::Home); 119 homeaddress.setType(Address::Home);
120//US homeaddress.setPostOfficeBox( "" ); 120//US homeaddress.setPostOfficeBox( "" );
121//US homeaddress.setExtended( "" ); 121//US homeaddress.setExtended( "" );
122 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) ); 122 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) );
123 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) ); 123 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) );
124 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) ); 124 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) );
125 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) ); 125 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) );
126 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) ); 126 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) );
127 127
128 addr.insertAddress( homeaddress ); 128 addr.insertAddress( homeaddress );
129 } 129 }
130 130
131 if (!db->readField(ZdbAdrs::HomePhone).isEmpty()) 131 if (!db->readField(ZdbAdrs::HomePhone).isEmpty())
132 { 132 {
133 PhoneNumber homephone; 133 PhoneNumber homephone;
134 homephone.setType( PhoneNumber::Home ); 134 homephone.setType( PhoneNumber::Home );
135 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) ); 135 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) );
136 addr.insertPhoneNumber( homephone ); 136 addr.insertPhoneNumber( homephone );
137 } 137 }
138 138
139 if (!db->readField(ZdbAdrs::HomeFax).isEmpty()) 139 if (!db->readField(ZdbAdrs::HomeFax).isEmpty())
140 { 140 {
141 PhoneNumber homefax; 141 PhoneNumber homefax;
142 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); 142 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax );
143 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) ); 143 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) );
144 addr.insertPhoneNumber( homefax ); 144 addr.insertPhoneNumber( homefax );
145 } 145 }
146 146
147 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty()) 147 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty())
148 { 148 {
149 PhoneNumber homemobile; 149 PhoneNumber homemobile;
150 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); 150 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell );
151 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) ); 151 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) );
152 addr.insertPhoneNumber( homemobile ); 152 addr.insertPhoneNumber( homemobile );
153 } 153 }
154 154
155 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) ); 155 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) );
156 156
157 157
158 // business 158 // business
159 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) || 159 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) ||
160 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) || 160 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) ||
161 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) || 161 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) ||
162 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) || 162 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) ||
163 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty())) 163 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty()))
164 { 164 {
165 Address businessaddress; 165 Address businessaddress;
166 businessaddress.setType(Address::Work); 166 businessaddress.setType(Address::Work);
167//US businessaddress.setPostOfficeBox( "" ); 167//US businessaddress.setPostOfficeBox( "" );
168//US businessaddress.setExtended( "" ); 168//US businessaddress.setExtended( "" );
169 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) ); 169 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) );
170 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) ); 170 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) );
171 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) ); 171 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) );
172 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) ); 172 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) );
173 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) ); 173 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) );
174 174
175 addr.insertAddress( businessaddress ); 175 addr.insertAddress( businessaddress );
176 } 176 }
177 177
178 178
179 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty()) 179 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty())
180 { 180 {
181 PhoneNumber businessphone; 181 PhoneNumber businessphone;
182 businessphone.setType( PhoneNumber::Work ); 182 businessphone.setType( PhoneNumber::Work );
183 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) ); 183 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) );
184 addr.insertPhoneNumber( businessphone ); 184 addr.insertPhoneNumber( businessphone );
185 } 185 }
186 186
187 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty()) 187 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty())
188 { 188 {
189 PhoneNumber businessfax; 189 PhoneNumber businessfax;
190 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); 190 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax );
191 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) ); 191 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) );
192 addr.insertPhoneNumber( businessfax ); 192 addr.insertPhoneNumber( businessfax );
193 } 193 }
194 194
195 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty()) 195 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty())
196 { 196 {
197 PhoneNumber businessmobile; 197 PhoneNumber businessmobile;
198 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); 198 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell );
199 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) ); 199 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) );
200 addr.insertPhoneNumber( businessmobile ); 200 addr.insertPhoneNumber( businessmobile );
201 } 201 }
202 202
203 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty()) 203 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty())
204 { 204 {
205 PhoneNumber businesspager; 205 PhoneNumber businesspager;
206 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); 206 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager );
207 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) ); 207 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) );
208 addr.insertPhoneNumber( businesspager ); 208 addr.insertPhoneNumber( businesspager );
209 } 209 }
210 210
211 addr.setRole( db->readField(ZdbAdrs::JobTitle) ); 211 addr.setRole( db->readField(ZdbAdrs::JobTitle) );
212 addr.setOrganization( db->readField(ZdbAdrs::Company) ); 212 addr.setOrganization( db->readField(ZdbAdrs::Company) );
213 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) ); 213 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) );
214 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) ); 214 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) );
215 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) ); 215 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) );
216 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) ); 216 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) );
217 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) ); 217 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) );
218 218
219 //personal 219 //personal
220 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) ); 220 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) );
221 221
222 QString gen = db->readField(ZdbAdrs::Gender); 222 QString gen = db->readField(ZdbAdrs::Gender);
223 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1()); 223 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1());
224 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited"); 224 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited");
225 225
226 if (gen == "male") 226 if (gen == "male")
227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); 227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male");
228 else if (gen == "female") 228 else if (gen == "female")
229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); 229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female");
230 230
231 231
232 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) ); 232 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) );
233 if (ann.isValid()) { 233 if (ann.isValid()) {
234 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 234 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
235 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1()); 235 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1());
236 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 236 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
237 } 237 }
238 238
239 239
240 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); 240 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) );
241 241
242 242
243 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) ); 243 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) );
244 //qDebug("birtd %s ", birthd.toString().latin1()); 244 //qDebug("birtd %s ", birthd.toString().latin1());
245 if (birthd.isValid()) 245 if (birthd.isValid())
246 addr.setBirthday( birthd ); 246 addr.setBirthday( birthd );
247 247
248 addr.setNickName( db->readField(ZdbAdrs::Nickname) ); 248 addr.setNickName( db->readField(ZdbAdrs::Nickname) );
249 249
250 // others 250 // others
251 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. 251 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available.
252 QString notes = db->readField(ZdbAdrs::Notes); 252 QString notes = db->readField(ZdbAdrs::Notes);
253 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n"; 253 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n";
254 if ( addr.url().isEmpty() ) 254 if ( addr.url().isEmpty() )
255 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) ); 255 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) );
256 addr.setNote( db->readField(ZdbAdrs::Notes) ); 256 addr.setNote( db->readField(ZdbAdrs::Notes) );
257 257
258 258
259 259
260//US QString groups() const { return find( Qtopia::Groups ); } 260//US QString groups() const { return find( Qtopia::Groups ); }
261//US QStringList groupList() const; 261//US QStringList groupList() const;
262 262
263 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" ); 263 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" );
264 QArray<int> catArray = db->readCategories(); 264 QArray<int> catArray = db->readCategories();
265 QString cat; 265 QString cat;
266 266
267 for ( unsigned int i=0; i < catArray.size(); i++ ) { 267 for ( unsigned int i=0; i < catArray.size(); i++ ) {
268 cat = catDB->label(catArray[i]); 268 cat = catDB->label(catArray[i]);
269 if ( cat.isEmpty() ) 269 if ( cat.isEmpty() )
270 addr.insertCategory(QString::number(catArray[i])); 270 addr.insertCategory(QString::number(catArray[i]));
271 else 271 else
272 addr.insertCategory( cat ); 272 addr.insertCategory( cat );
273 } 273 }
274 274
275 return true; 275 return true;
276} 276}
277 277
278bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ) 278bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact )
279{ 279{
280 bool cellHome = false, cellWork = false; 280 bool cellHome = false, cellWork = false;
281 // name 281 // name
282 database->writeField(ZdbAdrs::LastName, addr.familyName()); 282 database->writeField(ZdbAdrs::LastName, addr.familyName());
283 database->writeField(ZdbAdrs::FirstName, addr.givenName()); 283 database->writeField(ZdbAdrs::FirstName, addr.givenName());
284 database->writeField(ZdbAdrs::MiddleName, addr.additionalName()); 284 database->writeField(ZdbAdrs::MiddleName, addr.additionalName());
285 database->writeField(ZdbAdrs::Title, addr.prefix()); 285 database->writeField(ZdbAdrs::Title, addr.prefix());
286 database->writeField(ZdbAdrs::Suffix, addr.suffix()); 286 database->writeField(ZdbAdrs::Suffix, addr.suffix());
287 287
288 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() ); 288 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() );
289 QString formattedName = addr.formattedName(); 289 QString formattedName = addr.formattedName();
290 if ( formattedName.isEmpty() ) { 290 if ( formattedName.isEmpty() ) {
291 if ( !addr.familyName().isEmpty() ) { 291 if ( !addr.familyName().isEmpty() ) {
292 formattedName = addr.familyName(); 292 formattedName = addr.familyName();
293 if ( !addr.givenName().isEmpty() ) { 293 if ( !addr.givenName().isEmpty() ) {
294 formattedName += ", "; 294 formattedName += ", ";
295 formattedName += addr.givenName(); 295 formattedName += addr.givenName();
296 } 296 }
297 } else 297 } else
298 formattedName = addr.givenName(); 298 formattedName = addr.givenName();
299 } 299 }
300 database->writeField(ZdbAdrs::FileAs, formattedName); 300 database->writeField(ZdbAdrs::FileAs, formattedName);
301 database->writeField(ZdbAdrs::FullName, formattedName); 301 database->writeField(ZdbAdrs::FullName, formattedName);
302 302
303 // email 303 // email
304 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); 304 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
305 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); 305 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
306 QString emails = addr.emails().join(" "); 306 QString emails = addr.emails().join(" ");
307 database->writeField(ZdbAdrs::Emails, emails ); 307 database->writeField(ZdbAdrs::Emails, emails );
308 308
309 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); 309 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
310 310
311 311
312 // home 312 // home
313 const Address homeaddress = addr.address(Address::Home); 313 const Address homeaddress = addr.address(Address::Home);
314 if (!homeaddress.isEmpty()) { 314 if (!homeaddress.isEmpty()) {
315 qDebug("write home address "); 315 //qDebug("write home address ");
316 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); 316 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
317 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); 317 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
318 database->writeField(ZdbAdrs::HomeState, homeaddress.region()); 318 database->writeField(ZdbAdrs::HomeState, homeaddress.region());
319 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); 319 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
320 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country()); 320 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
321 } 321 }
322 322
323 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 323 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
324 if (!homephone.number().isEmpty()) 324 if (!homephone.number().isEmpty())
325 database->writeField(ZdbAdrs::HomePhone, homephone.number()); 325 database->writeField(ZdbAdrs::HomePhone, homephone.number());
326 326
327 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 327 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
328 if (!homefax.number().isEmpty()) 328 if (!homefax.number().isEmpty())
329 database->writeField(ZdbAdrs::HomeFax, homefax.number()); 329 database->writeField(ZdbAdrs::HomeFax, homefax.number());
330 330
331 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 331 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
332 if (!homemobile.number().isEmpty()) { 332 if (!homemobile.number().isEmpty()) {
333 database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); 333 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
334 cellHome = true; 334 cellHome = true;
335 } 335 }
336 336
337 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); 337 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
338 338
339 339
340 // business 340 // business
341 const Address businessaddress = addr.address(Address::Work); 341 const Address businessaddress = addr.address(Address::Work);
342 if (!businessaddress.isEmpty()) { 342 if (!businessaddress.isEmpty()) {
343 qDebug("write business address "); 343 //qDebug("write business address ");
344 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); 344 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
345 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); 345 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
346 database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); 346 database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
347 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); 347 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
348 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); 348 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
349 } 349 }
350 350
351 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 351 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
352 if (!businessphone.number().isEmpty()) 352 if (!businessphone.number().isEmpty())
353 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); 353 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
354 354
355 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 355 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
356 if (!businessfax.number().isEmpty()) 356 if (!businessfax.number().isEmpty())
357 database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); 357 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
358 358
359 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 359 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
360 if (!businessmobile.number().isEmpty()) { 360 if (!businessmobile.number().isEmpty()) {
361 cellWork = true; 361 cellWork = true;
362 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); 362 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
363 } 363 }
364 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell ); 364 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
365 if (! mobile.number().isEmpty()) { 365 if (! mobile.number().isEmpty()) {
366 if ( ! cellHome ) 366 if ( ! cellHome )
367 database->writeField(ZdbAdrs::HomeMobile, mobile.number()); 367 database->writeField(ZdbAdrs::HomeMobile, mobile.number());
368 else if (! cellWork ) 368 else if (! cellWork )
369 database->writeField(ZdbAdrs::BusinessMobile, mobile.number()); 369 database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
370 } 370 }
371 371
372 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 372 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
373 if (!businesspager.number().isEmpty()) 373 if (!businesspager.number().isEmpty())
374 database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); 374 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
375 375
376 database->writeField(ZdbAdrs::JobTitle, addr.role()); 376 database->writeField(ZdbAdrs::JobTitle, addr.role());
377 database->writeField(ZdbAdrs::Company, addr.organization()); 377 database->writeField(ZdbAdrs::Company, addr.organization());
378 378
379 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); 379 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
380 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 380 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
381 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); 381 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
382 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 382 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
383 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" )); 383 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" ));
384 384
385 //personal 385 //personal
386 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" )); 386 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" ));
387 387
388 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); 388 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
389 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1()); 389 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1());
390 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?"); 390 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?");
391 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); 391 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
392 if (gt == "male") 392 if (gt == "male")
393 database->writeField(ZdbAdrs::Gender, "male"); 393 database->writeField(ZdbAdrs::Gender, "male");
394 else if (gt == "female") 394 else if (gt == "female")
395 database->writeField(ZdbAdrs::Gender, "female"); 395 database->writeField(ZdbAdrs::Gender, "female");
396 else 396 else
397 database->writeField(ZdbAdrs::Gender, ""); 397 database->writeField(ZdbAdrs::Gender, "");
398 398
399 399
400 QDate dt = KGlobal::locale()->readDate( 400 QDate dt = KGlobal::locale()->readDate(
401 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate 401 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
402 if ( dt.isValid() ) { 402 if ( dt.isValid() ) {
403 QString dateS = KGlobal::locale()->formatDate(dt, true ); 403 QString dateS = KGlobal::locale()->formatDate(dt, true );
404 database->writeField(ZdbAdrs::Anniversary, dateS ); 404 database->writeField(ZdbAdrs::Anniversary, dateS );
405 } 405 }
406 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); 406 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
407 dt = addr.birthday().date(); 407 dt = addr.birthday().date();
408 if ( dt.isValid() ) { 408 if ( dt.isValid() ) {
409 QString dateS = KGlobal::locale()->formatDate(dt, true ); 409 QString dateS = KGlobal::locale()->formatDate(dt, true );
410 database->writeField(ZdbAdrs::Birthday, dateS); 410 database->writeField(ZdbAdrs::Birthday, dateS);
411 } 411 }
412 database->writeField(ZdbAdrs::Nickname, addr.nickName()); 412 database->writeField(ZdbAdrs::Nickname, addr.nickName());
413 413
414 // other 414 // other
415 database->writeField(ZdbAdrs::Notes, addr.note()); 415 database->writeField(ZdbAdrs::Notes, addr.note());
416 416
417//US QString groups() const { return find( Qtopia::Groups ); } 417//US QString groups() const { return find( Qtopia::Groups ); }
418//US QStringList groupList() const; 418//US QStringList groupList() const;
419 419
420 420
421 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); 421 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
422 422
423 QStringList cats = addr.categories(); 423 QStringList cats = addr.categories();
424 int ii; 424 int ii;
425 for ( ii = 0; ii < cats.count() ;++ii ) { 425 for ( ii = 0; ii < cats.count() ;++ii ) {
426 if ( !catDB->exists( cats[ii] )) 426 if ( !catDB->exists( cats[ii] ))
427 catDB->addCategory(cats[ii]); 427 catDB->addCategory(cats[ii]);
428 } 428 }
429 QArray<int> iar; 429 QArray<int> iar;
430 if ( !cats.isEmpty() ) { 430 if ( !cats.isEmpty() ) {
431 QArray<int> iar = catDB->ids(cats); 431 QArray<int> iar = catDB->ids(cats);
432 qDebug("***cat count is %d ", iar.count()); 432 //qDebug("***cat count is %d ", iar.count());
433 database->updateCategories(contact, iar); 433 database->updateCategories(contact, iar);
434 } 434 }
435 435
436 return true; 436 return true;
437} 437}
438 438
439QDate SharpDTMConverter::convertDate( QString s) 439QDate SharpDTMConverter::convertDate( QString s)
440{ 440{
441 QDate dt = KGlobal::locale()->readDate( s ); 441 QDate dt = KGlobal::locale()->readDate( s );
442 return dt; 442 return dt;
443 return QDate (); 443 return QDate ();
444} 444}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index c2f031a..4ebd6a8 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,3072 +1,3072 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program 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 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include "kabcore.h" 31#include "kabcore.h"
32 32
33#include <stdaddressbook.h> 33#include <stdaddressbook.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kfiledialog.h> 35#include <kfiledialog.h>
36#include <qprogressbar.h> 36#include <qprogressbar.h>
37 37
38#ifndef KAB_EMBEDDED 38#ifndef KAB_EMBEDDED
39#include <qclipboard.h> 39#include <qclipboard.h>
40#include <qdir.h> 40#include <qdir.h>
41#include <qfile.h> 41#include <qfile.h>
42#include <qapplicaton.h> 42#include <qapplicaton.h>
43#include <qprogressbar.h> 43#include <qprogressbar.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qvbox.h> 46#include <qvbox.h>
47#include <kabc/addresseelist.h> 47#include <kabc/addresseelist.h>
48#include <kabc/errorhandler.h> 48#include <kabc/errorhandler.h>
49#include <kabc/resource.h> 49#include <kabc/resource.h>
50#include <kabc/vcardconverter.h> 50#include <kabc/vcardconverter.h>
51#include <kapplication.h> 51#include <kapplication.h>
52#include <kactionclasses.h> 52#include <kactionclasses.h>
53#include <kcmultidialog.h> 53#include <kcmultidialog.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kdeversion.h> 55#include <kdeversion.h>
56#include <kkeydialog.h> 56#include <kkeydialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <kprinter.h> 58#include <kprinter.h>
59#include <kprotocolinfo.h> 59#include <kprotocolinfo.h>
60#include <kresources/selectdialog.h> 60#include <kresources/selectdialog.h>
61#include <kstandarddirs.h> 61#include <kstandarddirs.h>
62#include <ktempfile.h> 62#include <ktempfile.h>
63#include <kxmlguiclient.h> 63#include <kxmlguiclient.h>
64#include <kaboutdata.h> 64#include <kaboutdata.h>
65#include <libkdepim/categoryselectdialog.h> 65#include <libkdepim/categoryselectdialog.h>
66 66
67#include "addresseeutil.h" 67#include "addresseeutil.h"
68#include "addresseeeditordialog.h" 68#include "addresseeeditordialog.h"
69#include "extensionmanager.h" 69#include "extensionmanager.h"
70#include "kstdaction.h" 70#include "kstdaction.h"
71#include "kaddressbookservice.h" 71#include "kaddressbookservice.h"
72#include "ldapsearchdialog.h" 72#include "ldapsearchdialog.h"
73#include "printing/printingwizard.h" 73#include "printing/printingwizard.h"
74#else // KAB_EMBEDDED 74#else // KAB_EMBEDDED
75 75
76#include <kapplication.h> 76#include <kapplication.h>
77#include "KDGanttMinimizeSplitter.h" 77#include "KDGanttMinimizeSplitter.h"
78#include "kaddressbookmain.h" 78#include "kaddressbookmain.h"
79#include "kactioncollection.h" 79#include "kactioncollection.h"
80#include "addresseedialog.h" 80#include "addresseedialog.h"
81//US 81//US
82#include <addresseeview.h> 82#include <addresseeview.h>
83 83
84#include <qapp.h> 84#include <qapp.h>
85#include <qmenubar.h> 85#include <qmenubar.h>
86//#include <qtoolbar.h> 86//#include <qtoolbar.h>
87#include <qmessagebox.h> 87#include <qmessagebox.h>
88#include <kdebug.h> 88#include <kdebug.h>
89#include <kiconloader.h> // needed for SmallIcon 89#include <kiconloader.h> // needed for SmallIcon
90#include <kresources/kcmkresources.h> 90#include <kresources/kcmkresources.h>
91#include <ktoolbar.h> 91#include <ktoolbar.h>
92 92
93 93
94//#include <qlabel.h> 94//#include <qlabel.h>
95 95
96 96
97#ifndef DESKTOP_VERSION 97#ifndef DESKTOP_VERSION
98#include <qpe/ir.h> 98#include <qpe/ir.h>
99#include <qpe/qpemenubar.h> 99#include <qpe/qpemenubar.h>
100#include <qtopia/qcopenvelope_qws.h> 100#include <qtopia/qcopenvelope_qws.h>
101#else 101#else
102 102
103#include <qmenubar.h> 103#include <qmenubar.h>
104#endif 104#endif
105 105
106#endif // KAB_EMBEDDED 106#endif // KAB_EMBEDDED
107#include "kcmconfigs/kcmkabconfig.h" 107#include "kcmconfigs/kcmkabconfig.h"
108#include "kcmconfigs/kcmkdepimconfig.h" 108#include "kcmconfigs/kcmkdepimconfig.h"
109#include "kpimglobalprefs.h" 109#include "kpimglobalprefs.h"
110#include "externalapphandler.h" 110#include "externalapphandler.h"
111 111
112 112
113#include <kresources/selectdialog.h> 113#include <kresources/selectdialog.h>
114#include <kmessagebox.h> 114#include <kmessagebox.h>
115 115
116#include <picture.h> 116#include <picture.h>
117#include <resource.h> 117#include <resource.h>
118 118
119//US#include <qsplitter.h> 119//US#include <qsplitter.h>
120#include <qmap.h> 120#include <qmap.h>
121#include <qdir.h> 121#include <qdir.h>
122#include <qfile.h> 122#include <qfile.h>
123#include <qvbox.h> 123#include <qvbox.h>
124#include <qlayout.h> 124#include <qlayout.h>
125#include <qclipboard.h> 125#include <qclipboard.h>
126#include <qtextstream.h> 126#include <qtextstream.h>
127 127
128#include <libkdepim/categoryselectdialog.h> 128#include <libkdepim/categoryselectdialog.h>
129#include <kabc/vcardconverter.h> 129#include <kabc/vcardconverter.h>
130 130
131 131
132#include "addresseeutil.h" 132#include "addresseeutil.h"
133#include "undocmds.h" 133#include "undocmds.h"
134#include "addresseeeditordialog.h" 134#include "addresseeeditordialog.h"
135#include "viewmanager.h" 135#include "viewmanager.h"
136#include "details/detailsviewcontainer.h" 136#include "details/detailsviewcontainer.h"
137#include "kabprefs.h" 137#include "kabprefs.h"
138#include "xxportmanager.h" 138#include "xxportmanager.h"
139#include "incsearchwidget.h" 139#include "incsearchwidget.h"
140#include "jumpbuttonbar.h" 140#include "jumpbuttonbar.h"
141#include "extensionmanager.h" 141#include "extensionmanager.h"
142#include "addresseeconfig.h" 142#include "addresseeconfig.h"
143#include <kcmultidialog.h> 143#include <kcmultidialog.h>
144 144
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 146
147#include "kaimportoldialog.h" 147#include "kaimportoldialog.h"
148#else 148#else
149#include <unistd.h> 149#include <unistd.h>
150#endif 150#endif
151// sync includes 151// sync includes
152#include <libkdepim/ksyncprofile.h> 152#include <libkdepim/ksyncprofile.h>
153#include <libkdepim/ksyncprefsdialog.h> 153#include <libkdepim/ksyncprefsdialog.h>
154 154
155 155
156bool pasteWithNewUid = true; 156bool pasteWithNewUid = true;
157 157
158#ifdef KAB_EMBEDDED 158#ifdef KAB_EMBEDDED
159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
163#else //KAB_EMBEDDED 163#else //KAB_EMBEDDED
164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
167 mReadWrite( readWrite ), mModified( false ) 167 mReadWrite( readWrite ), mModified( false )
168#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
169{ 169{
170 170
171 mBlockSaveFlag = false; 171 mBlockSaveFlag = false;
172 mExtensionBarSplitter = 0; 172 mExtensionBarSplitter = 0;
173 mIsPart = !parent->inherits( "KAddressBookMain" ); 173 mIsPart = !parent->inherits( "KAddressBookMain" );
174 174
175 mAddressBook = KABC::StdAddressBook::self(); 175 mAddressBook = KABC::StdAddressBook::self();
176 KABC::StdAddressBook::setAutomaticSave( false ); 176 KABC::StdAddressBook::setAutomaticSave( false );
177 177
178#ifndef KAB_EMBEDDED 178#ifndef KAB_EMBEDDED
179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
180#endif //KAB_EMBEDDED 180#endif //KAB_EMBEDDED
181 181
182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
183 SLOT( addressBookChanged() ) ); 183 SLOT( addressBookChanged() ) );
184 184
185#if 0 185#if 0
186 // LP moved to addressbook init method 186 // LP moved to addressbook init method
187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
188 "X-Department", "KADDRESSBOOK" ); 188 "X-Department", "KADDRESSBOOK" );
189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
190 "X-Profession", "KADDRESSBOOK" ); 190 "X-Profession", "KADDRESSBOOK" );
191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
192 "X-AssistantsName", "KADDRESSBOOK" ); 192 "X-AssistantsName", "KADDRESSBOOK" );
193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
194 "X-ManagersName", "KADDRESSBOOK" ); 194 "X-ManagersName", "KADDRESSBOOK" );
195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
196 "X-SpousesName", "KADDRESSBOOK" ); 196 "X-SpousesName", "KADDRESSBOOK" );
197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
198 "X-Office", "KADDRESSBOOK" ); 198 "X-Office", "KADDRESSBOOK" );
199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
200 "X-IMAddress", "KADDRESSBOOK" ); 200 "X-IMAddress", "KADDRESSBOOK" );
201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
202 "X-Anniversary", "KADDRESSBOOK" ); 202 "X-Anniversary", "KADDRESSBOOK" );
203 203
204 //US added this field to become compatible with Opie/qtopia addressbook 204 //US added this field to become compatible with Opie/qtopia addressbook
205 // values can be "female" or "male" or "". An empty field represents undefined. 205 // values can be "female" or "male" or "". An empty field represents undefined.
206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
207 "X-Gender", "KADDRESSBOOK" ); 207 "X-Gender", "KADDRESSBOOK" );
208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
209 "X-Children", "KADDRESSBOOK" ); 209 "X-Children", "KADDRESSBOOK" );
210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
211 "X-FreeBusyUrl", "KADDRESSBOOK" ); 211 "X-FreeBusyUrl", "KADDRESSBOOK" );
212#endif 212#endif
213 initGUI(); 213 initGUI();
214 214
215 mIncSearchWidget->setFocus(); 215 mIncSearchWidget->setFocus();
216 216
217 217
218 connect( mViewManager, SIGNAL( selected( const QString& ) ), 218 connect( mViewManager, SIGNAL( selected( const QString& ) ),
219 SLOT( setContactSelected( const QString& ) ) ); 219 SLOT( setContactSelected( const QString& ) ) );
220 connect( mViewManager, SIGNAL( executed( const QString& ) ), 220 connect( mViewManager, SIGNAL( executed( const QString& ) ),
221 SLOT( executeContact( const QString& ) ) ); 221 SLOT( executeContact( const QString& ) ) );
222 222
223 connect( mViewManager, SIGNAL( deleteRequest( ) ), 223 connect( mViewManager, SIGNAL( deleteRequest( ) ),
224 SLOT( deleteContacts( ) ) ); 224 SLOT( deleteContacts( ) ) );
225 connect( mViewManager, SIGNAL( modified() ), 225 connect( mViewManager, SIGNAL( modified() ),
226 SLOT( setModified() ) ); 226 SLOT( setModified() ) );
227 227
228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
230 230
231 connect( mXXPortManager, SIGNAL( modified() ), 231 connect( mXXPortManager, SIGNAL( modified() ),
232 SLOT( setModified() ) ); 232 SLOT( setModified() ) );
233 233
234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
235 SLOT( incrementalSearch( const QString& ) ) ); 235 SLOT( incrementalSearch( const QString& ) ) );
236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
237 mJumpButtonBar, SLOT( recreateButtons() ) ); 237 mJumpButtonBar, SLOT( recreateButtons() ) );
238 238
239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
240 SLOT( sendMail( const QString& ) ) ); 240 SLOT( sendMail( const QString& ) ) );
241 241
242 242
243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
244 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 244 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
245 245
246 246
247#ifndef KAB_EMBEDDED 247#ifndef KAB_EMBEDDED
248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
249 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 249 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
250 250
251 connect( mDetails, SIGNAL( browse( const QString& ) ), 251 connect( mDetails, SIGNAL( browse( const QString& ) ),
252 SLOT( browse( const QString& ) ) ); 252 SLOT( browse( const QString& ) ) );
253 253
254 254
255 mAddressBookService = new KAddressBookService( this ); 255 mAddressBookService = new KAddressBookService( this );
256 256
257#endif //KAB_EMBEDDED 257#endif //KAB_EMBEDDED
258 mEditorDialog = 0; 258 mEditorDialog = 0;
259 createAddresseeEditorDialog( this ); 259 createAddresseeEditorDialog( this );
260 setModified( false ); 260 setModified( false );
261} 261}
262 262
263KABCore::~KABCore() 263KABCore::~KABCore()
264{ 264{
265 // save(); 265 // save();
266 //saveSettings(); 266 //saveSettings();
267 //KABPrefs::instance()->writeConfig(); 267 //KABPrefs::instance()->writeConfig();
268 delete AddresseeConfig::instance(); 268 delete AddresseeConfig::instance();
269 mAddressBook = 0; 269 mAddressBook = 0;
270 KABC::StdAddressBook::close(); 270 KABC::StdAddressBook::close();
271} 271}
272 272
273void KABCore::restoreSettings() 273void KABCore::restoreSettings()
274{ 274{
275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
276 276
277 bool state; 277 bool state;
278 278
279 if (mMultipleViewsAtOnce) 279 if (mMultipleViewsAtOnce)
280 state = KABPrefs::instance()->mDetailsPageVisible; 280 state = KABPrefs::instance()->mDetailsPageVisible;
281 else 281 else
282 state = false; 282 state = false;
283 283
284 mActionDetails->setChecked( state ); 284 mActionDetails->setChecked( state );
285 setDetailsVisible( state ); 285 setDetailsVisible( state );
286 286
287 state = KABPrefs::instance()->mJumpButtonBarVisible; 287 state = KABPrefs::instance()->mJumpButtonBarVisible;
288 288
289 mActionJumpBar->setChecked( state ); 289 mActionJumpBar->setChecked( state );
290 setJumpButtonBarVisible( state ); 290 setJumpButtonBarVisible( state );
291/*US 291/*US
292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
293 if ( splitterSize.count() == 0 ) { 293 if ( splitterSize.count() == 0 ) {
294 splitterSize.append( width() / 2 ); 294 splitterSize.append( width() / 2 );
295 splitterSize.append( width() / 2 ); 295 splitterSize.append( width() / 2 );
296 } 296 }
297 mMiniSplitter->setSizes( splitterSize ); 297 mMiniSplitter->setSizes( splitterSize );
298 if ( mExtensionBarSplitter ) { 298 if ( mExtensionBarSplitter ) {
299 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 299 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
300 if ( splitterSize.count() == 0 ) { 300 if ( splitterSize.count() == 0 ) {
301 splitterSize.append( width() / 2 ); 301 splitterSize.append( width() / 2 );
302 splitterSize.append( width() / 2 ); 302 splitterSize.append( width() / 2 );
303 } 303 }
304 mExtensionBarSplitter->setSizes( splitterSize ); 304 mExtensionBarSplitter->setSizes( splitterSize );
305 305
306 } 306 }
307*/ 307*/
308 mViewManager->restoreSettings(); 308 mViewManager->restoreSettings();
309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
310 mExtensionManager->restoreSettings(); 310 mExtensionManager->restoreSettings();
311#ifdef DESKTOP_VERSION 311#ifdef DESKTOP_VERSION
312 int wid = width(); 312 int wid = width();
313 if ( wid < 10 ) 313 if ( wid < 10 )
314 wid = 400; 314 wid = 400;
315#else 315#else
316 int wid = QApplication::desktop()->width(); 316 int wid = QApplication::desktop()->width();
317 if ( wid < 640 ) 317 if ( wid < 640 )
318 wid = QApplication::desktop()->height(); 318 wid = QApplication::desktop()->height();
319#endif 319#endif
320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; 320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
321 if ( true /*splitterSize.count() == 0*/ ) { 321 if ( true /*splitterSize.count() == 0*/ ) {
322 splitterSize.append( wid / 2 ); 322 splitterSize.append( wid / 2 );
323 splitterSize.append( wid / 2 ); 323 splitterSize.append( wid / 2 );
324 } 324 }
325 mMiniSplitter->setSizes( splitterSize ); 325 mMiniSplitter->setSizes( splitterSize );
326 if ( mExtensionBarSplitter ) { 326 if ( mExtensionBarSplitter ) {
327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter; 327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
328 if ( true /*splitterSize.count() == 0*/ ) { 328 if ( true /*splitterSize.count() == 0*/ ) {
329 splitterSize.append( wid / 2 ); 329 splitterSize.append( wid / 2 );
330 splitterSize.append( wid / 2 ); 330 splitterSize.append( wid / 2 );
331 } 331 }
332 mExtensionBarSplitter->setSizes( splitterSize ); 332 mExtensionBarSplitter->setSizes( splitterSize );
333 333
334 } 334 }
335 335
336 336
337} 337}
338 338
339void KABCore::saveSettings() 339void KABCore::saveSettings()
340{ 340{
341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
342 if ( mExtensionBarSplitter ) 342 if ( mExtensionBarSplitter )
343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
346#ifndef KAB_EMBEDDED 346#ifndef KAB_EMBEDDED
347 347
348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
350#endif //KAB_EMBEDDED 350#endif //KAB_EMBEDDED
351 mExtensionManager->saveSettings(); 351 mExtensionManager->saveSettings();
352 mViewManager->saveSettings(); 352 mViewManager->saveSettings();
353 353
354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
355} 355}
356 356
357KABC::AddressBook *KABCore::addressBook() const 357KABC::AddressBook *KABCore::addressBook() const
358{ 358{
359 return mAddressBook; 359 return mAddressBook;
360} 360}
361 361
362KConfig *KABCore::config() 362KConfig *KABCore::config()
363{ 363{
364#ifndef KAB_EMBEDDED 364#ifndef KAB_EMBEDDED
365 return KABPrefs::instance()->config(); 365 return KABPrefs::instance()->config();
366#else //KAB_EMBEDDED 366#else //KAB_EMBEDDED
367 return KABPrefs::instance()->getConfig(); 367 return KABPrefs::instance()->getConfig();
368#endif //KAB_EMBEDDED 368#endif //KAB_EMBEDDED
369} 369}
370 370
371KActionCollection *KABCore::actionCollection() const 371KActionCollection *KABCore::actionCollection() const
372{ 372{
373 return mGUIClient->actionCollection(); 373 return mGUIClient->actionCollection();
374} 374}
375 375
376KABC::Field *KABCore::currentSearchField() const 376KABC::Field *KABCore::currentSearchField() const
377{ 377{
378 if (mIncSearchWidget) 378 if (mIncSearchWidget)
379 return mIncSearchWidget->currentField(); 379 return mIncSearchWidget->currentField();
380 else 380 else
381 return 0; 381 return 0;
382} 382}
383 383
384QStringList KABCore::selectedUIDs() const 384QStringList KABCore::selectedUIDs() const
385{ 385{
386 return mViewManager->selectedUids(); 386 return mViewManager->selectedUids();
387} 387}
388 388
389KABC::Resource *KABCore::requestResource( QWidget *parent ) 389KABC::Resource *KABCore::requestResource( QWidget *parent )
390{ 390{
391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
392 392
393 QPtrList<KRES::Resource> kresResources; 393 QPtrList<KRES::Resource> kresResources;
394 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 394 QPtrListIterator<KABC::Resource> resIt( kabcResources );
395 KABC::Resource *resource; 395 KABC::Resource *resource;
396 while ( ( resource = resIt.current() ) != 0 ) { 396 while ( ( resource = resIt.current() ) != 0 ) {
397 ++resIt; 397 ++resIt;
398 if ( !resource->readOnly() ) { 398 if ( !resource->readOnly() ) {
399 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 399 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
400 if ( res ) 400 if ( res )
401 kresResources.append( res ); 401 kresResources.append( res );
402 } 402 }
403 } 403 }
404 404
405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
406 return static_cast<KABC::Resource*>( res ); 406 return static_cast<KABC::Resource*>( res );
407} 407}
408 408
409#ifndef KAB_EMBEDDED 409#ifndef KAB_EMBEDDED
410KAboutData *KABCore::createAboutData() 410KAboutData *KABCore::createAboutData()
411#else //KAB_EMBEDDED 411#else //KAB_EMBEDDED
412void KABCore::createAboutData() 412void KABCore::createAboutData()
413#endif //KAB_EMBEDDED 413#endif //KAB_EMBEDDED
414{ 414{
415#ifndef KAB_EMBEDDED 415#ifndef KAB_EMBEDDED
416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
417 "3.1", I18N_NOOP( "The KDE Address Book" ), 417 "3.1", I18N_NOOP( "The KDE Address Book" ),
418 KAboutData::License_GPL_V2, 418 KAboutData::License_GPL_V2,
419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
422 about->addAuthor( "Cornelius Schumacher", 422 about->addAuthor( "Cornelius Schumacher",
423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
424 "schumacher@kde.org" ); 424 "schumacher@kde.org" );
425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
426 "mpilone@slac.com" ); 426 "mpilone@slac.com" );
427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
430 "michel@klaralvdalens-datakonsult.se" ); 430 "michel@klaralvdalens-datakonsult.se" );
431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
432 "hansen@kde.org" ); 432 "hansen@kde.org" );
433 433
434 return about; 434 return about;
435#endif //KAB_EMBEDDED 435#endif //KAB_EMBEDDED
436 436
437 QString version; 437 QString version;
438#include <../version> 438#include <../version>
439 QMessageBox::about( this, "About KAddressbook/Pi", 439 QMessageBox::about( this, "About KAddressbook/Pi",
440 "KAddressbook/Platform-independent\n" 440 "KAddressbook/Platform-independent\n"
441 "(KA/Pi) " +version + " - " + 441 "(KA/Pi) " +version + " - " +
442#ifdef DESKTOP_VERSION 442#ifdef DESKTOP_VERSION
443 "Desktop Edition\n" 443 "Desktop Edition\n"
444#else 444#else
445 "PDA-Edition\n" 445 "PDA-Edition\n"
446 "for: Zaurus 5500 / 7x0 / 8x0\n" 446 "for: Zaurus 5500 / 7x0 / 8x0\n"
447#endif 447#endif
448 448
449 "(c) 2004 Ulf Schenk\n" 449 "(c) 2004 Ulf Schenk\n"
450 "(c) 2004 Lutz Rogowski\n" 450 "(c) 2004 Lutz Rogowski\n"
451 "(c) 1997-2003, The KDE PIM Team\n" 451 "(c) 1997-2003, The KDE PIM Team\n"
452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
453 "Don Sanders Original author\n" 453 "Don Sanders Original author\n"
454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
456 "Greg Stern DCOP interface\n" 456 "Greg Stern DCOP interface\n"
457 "Mark Westcot Contact pinning\n" 457 "Mark Westcot Contact pinning\n"
458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
460#ifdef _WIN32_ 460#ifdef _WIN32_
461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
462#endif 462#endif
463 ); 463 );
464} 464}
465 465
466void KABCore::setContactSelected( const QString &uid ) 466void KABCore::setContactSelected( const QString &uid )
467{ 467{
468 KABC::Addressee addr = mAddressBook->findByUid( uid ); 468 KABC::Addressee addr = mAddressBook->findByUid( uid );
469 if ( !mDetails->isHidden() ) 469 if ( !mDetails->isHidden() )
470 mDetails->setAddressee( addr ); 470 mDetails->setAddressee( addr );
471 471
472 if ( !addr.isEmpty() ) { 472 if ( !addr.isEmpty() ) {
473 emit contactSelected( addr.formattedName() ); 473 emit contactSelected( addr.formattedName() );
474 KABC::Picture pic = addr.photo(); 474 KABC::Picture pic = addr.photo();
475 if ( pic.isIntern() ) { 475 if ( pic.isIntern() ) {
476//US emit contactSelected( pic.data() ); 476//US emit contactSelected( pic.data() );
477//US instead use: 477//US instead use:
478 QPixmap px; 478 QPixmap px;
479 if (pic.data().isNull() != true) 479 if (pic.data().isNull() != true)
480 { 480 {
481 px.convertFromImage(pic.data()); 481 px.convertFromImage(pic.data());
482 } 482 }
483 483
484 emit contactSelected( px ); 484 emit contactSelected( px );
485 } 485 }
486 } 486 }
487 487
488 488
489 mExtensionManager->setSelectionChanged(); 489 mExtensionManager->setSelectionChanged();
490 490
491 // update the actions 491 // update the actions
492 bool selected = !uid.isEmpty(); 492 bool selected = !uid.isEmpty();
493 493
494 if ( mReadWrite ) { 494 if ( mReadWrite ) {
495 mActionCut->setEnabled( selected ); 495 mActionCut->setEnabled( selected );
496 mActionPaste->setEnabled( selected ); 496 mActionPaste->setEnabled( selected );
497 } 497 }
498 498
499 mActionCopy->setEnabled( selected ); 499 mActionCopy->setEnabled( selected );
500 mActionDelete->setEnabled( selected ); 500 mActionDelete->setEnabled( selected );
501 mActionEditAddressee->setEnabled( selected ); 501 mActionEditAddressee->setEnabled( selected );
502 mActionMail->setEnabled( selected ); 502 mActionMail->setEnabled( selected );
503 mActionMailVCard->setEnabled( selected ); 503 mActionMailVCard->setEnabled( selected );
504 //if (mActionBeam) 504 //if (mActionBeam)
505 //mActionBeam->setEnabled( selected ); 505 //mActionBeam->setEnabled( selected );
506 506
507 if (mActionBeamVCard) 507 if (mActionBeamVCard)
508 mActionBeamVCard->setEnabled( selected ); 508 mActionBeamVCard->setEnabled( selected );
509 509
510 mActionWhoAmI->setEnabled( selected ); 510 mActionWhoAmI->setEnabled( selected );
511 mActionCategories->setEnabled( selected ); 511 mActionCategories->setEnabled( selected );
512} 512}
513 513
514void KABCore::sendMail() 514void KABCore::sendMail()
515{ 515{
516 sendMail( mViewManager->selectedEmails().join( ", " ) ); 516 sendMail( mViewManager->selectedEmails().join( ", " ) );
517} 517}
518 518
519void KABCore::sendMail( const QString& emaillist ) 519void KABCore::sendMail( const QString& emaillist )
520{ 520{
521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
522 if (emaillist.contains(",") > 0) 522 if (emaillist.contains(",") > 0)
523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
524 else 524 else
525 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 525 ExternalAppHandler::instance()->mailToOneContact( emaillist );
526} 526}
527 527
528 528
529 529
530void KABCore::mailVCard() 530void KABCore::mailVCard()
531{ 531{
532 QStringList uids = mViewManager->selectedUids(); 532 QStringList uids = mViewManager->selectedUids();
533 if ( !uids.isEmpty() ) 533 if ( !uids.isEmpty() )
534 mailVCard( uids ); 534 mailVCard( uids );
535} 535}
536 536
537void KABCore::mailVCard( const QStringList& uids ) 537void KABCore::mailVCard( const QStringList& uids )
538{ 538{
539 QStringList urls; 539 QStringList urls;
540 540
541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
542 542
543 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 543 QString dirName = "/tmp/" + KApplication::randomString( 8 );
544 544
545 545
546 546
547 QDir().mkdir( dirName, true ); 547 QDir().mkdir( dirName, true );
548 548
549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
550 KABC::Addressee a = mAddressBook->findByUid( *it ); 550 KABC::Addressee a = mAddressBook->findByUid( *it );
551 551
552 if ( a.isEmpty() ) 552 if ( a.isEmpty() )
553 continue; 553 continue;
554 554
555 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 555 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
556 556
557 QString fileName = dirName + "/" + name; 557 QString fileName = dirName + "/" + name;
558 558
559 QFile outFile(fileName); 559 QFile outFile(fileName);
560 560
561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
562 KABC::VCardConverter converter; 562 KABC::VCardConverter converter;
563 QString vcard; 563 QString vcard;
564 564
565 converter.addresseeToVCard( a, vcard ); 565 converter.addresseeToVCard( a, vcard );
566 566
567 QTextStream t( &outFile ); // use a text stream 567 QTextStream t( &outFile ); // use a text stream
568 t.setEncoding( QTextStream::UnicodeUTF8 ); 568 t.setEncoding( QTextStream::UnicodeUTF8 );
569 t << vcard; 569 t << vcard;
570 570
571 outFile.close(); 571 outFile.close();
572 572
573 urls.append( fileName ); 573 urls.append( fileName );
574 } 574 }
575 } 575 }
576 576
577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
578 578
579 579
580/*US 580/*US
581 kapp->invokeMailer( QString::null, QString::null, QString::null, 581 kapp->invokeMailer( QString::null, QString::null, QString::null,
582 QString::null, // subject 582 QString::null, // subject
583 QString::null, // body 583 QString::null, // body
584 QString::null, 584 QString::null,
585 urls ); // attachments 585 urls ); // attachments
586*/ 586*/
587 587
588} 588}
589 589
590/** 590/**
591 Beams the "WhoAmI contact. 591 Beams the "WhoAmI contact.
592*/ 592*/
593void KABCore::beamMySelf() 593void KABCore::beamMySelf()
594{ 594{
595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
596 if (!a.isEmpty()) 596 if (!a.isEmpty())
597 { 597 {
598 QStringList uids; 598 QStringList uids;
599 uids << a.uid(); 599 uids << a.uid();
600 600
601 beamVCard(uids); 601 beamVCard(uids);
602 } else { 602 } else {
603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
604 604
605 605
606 } 606 }
607} 607}
608 608
609void KABCore::beamVCard() 609void KABCore::beamVCard()
610{ 610{
611 QStringList uids = mViewManager->selectedUids(); 611 QStringList uids = mViewManager->selectedUids();
612 if ( !uids.isEmpty() ) 612 if ( !uids.isEmpty() )
613 beamVCard( uids ); 613 beamVCard( uids );
614} 614}
615 615
616 616
617void KABCore::beamVCard(const QStringList& uids) 617void KABCore::beamVCard(const QStringList& uids)
618{ 618{
619/*US 619/*US
620 QString beamFilename; 620 QString beamFilename;
621 Opie::OPimContact c; 621 Opie::OPimContact c;
622 if ( actionPersonal->isOn() ) { 622 if ( actionPersonal->isOn() ) {
623 beamFilename = addressbookPersonalVCardName(); 623 beamFilename = addressbookPersonalVCardName();
624 if ( !QFile::exists( beamFilename ) ) 624 if ( !QFile::exists( beamFilename ) )
625 return; // can't beam a non-existent file 625 return; // can't beam a non-existent file
626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
627 beamFilename ); 627 beamFilename );
628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
629 Opie::OPimContactAccess::List allList = access->allRecords(); 629 Opie::OPimContactAccess::List allList = access->allRecords();
630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
631 c = *it; 631 c = *it;
632 632
633 delete access; 633 delete access;
634 } else { 634 } else {
635 unlink( beamfile ); // delete if exists 635 unlink( beamfile ); // delete if exists
636 mkdir("/tmp/obex/", 0755); 636 mkdir("/tmp/obex/", 0755);
637 c = m_abView -> currentEntry(); 637 c = m_abView -> currentEntry();
638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
639 beamfile ); 639 beamfile );
640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
641 access->add( c ); 641 access->add( c );
642 access->save(); 642 access->save();
643 delete access; 643 delete access;
644 644
645 beamFilename = beamfile; 645 beamFilename = beamfile;
646 } 646 }
647 647
648 owarn << "Beaming: " << beamFilename << oendl; 648 owarn << "Beaming: " << beamFilename << oendl;
649*/ 649*/
650 650
651#if 0 651#if 0
652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
653 653
654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
655 655
656 QString name = "contact.vcf"; 656 QString name = "contact.vcf";
657 657
658 QString fileName = dirName + "/" + name; 658 QString fileName = dirName + "/" + name;
659#endif 659#endif
660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
661 // 661 //
662 QString fileName = "/tmp/kapibeamfile.vcf"; 662 QString fileName = "/tmp/kapibeamfile.vcf";
663 663
664 664
665 //QDir().mkdir( dirName, true ); 665 //QDir().mkdir( dirName, true );
666 666
667 667
668 KABC::VCardConverter converter; 668 KABC::VCardConverter converter;
669 QString description; 669 QString description;
670 QString datastream; 670 QString datastream;
671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
672 KABC::Addressee a = mAddressBook->findByUid( *it ); 672 KABC::Addressee a = mAddressBook->findByUid( *it );
673 673
674 if ( a.isEmpty() ) 674 if ( a.isEmpty() )
675 continue; 675 continue;
676 676
677 if (description.isEmpty()) 677 if (description.isEmpty())
678 description = a.formattedName(); 678 description = a.formattedName();
679 679
680 QString vcard; 680 QString vcard;
681 converter.addresseeToVCard( a, vcard ); 681 converter.addresseeToVCard( a, vcard );
682 int start = 0; 682 int start = 0;
683 int next; 683 int next;
684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
685 int semi = vcard.find(";", next); 685 int semi = vcard.find(";", next);
686 int dopp = vcard.find(":", next); 686 int dopp = vcard.find(":", next);
687 int sep; 687 int sep;
688 if ( semi < dopp && semi >= 0 ) 688 if ( semi < dopp && semi >= 0 )
689 sep = semi ; 689 sep = semi ;
690 else 690 else
691 sep = dopp; 691 sep = dopp;
692 datastream +=vcard.mid( start, next - start); 692 datastream +=vcard.mid( start, next - start);
693 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 693 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
694 start = sep; 694 start = sep;
695 } 695 }
696 datastream += vcard.mid( start,vcard.length() ); 696 datastream += vcard.mid( start,vcard.length() );
697 } 697 }
698#ifndef DESKTOP_VERSION 698#ifndef DESKTOP_VERSION
699 QFile outFile(fileName); 699 QFile outFile(fileName);
700 if ( outFile.open(IO_WriteOnly) ) { 700 if ( outFile.open(IO_WriteOnly) ) {
701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
702 QTextStream t( &outFile ); // use a text stream 702 QTextStream t( &outFile ); // use a text stream
703 t.setEncoding( QTextStream::UnicodeUTF8 ); 703 t.setEncoding( QTextStream::UnicodeUTF8 );
704 t <<datastream; 704 t <<datastream;
705 outFile.close(); 705 outFile.close();
706 Ir *ir = new Ir( this ); 706 Ir *ir = new Ir( this );
707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
708 ir->send( fileName, description, "text/x-vCard" ); 708 ir->send( fileName, description, "text/x-vCard" );
709 } else { 709 } else {
710 qDebug("Error open temp beam file "); 710 qDebug("Error open temp beam file ");
711 return; 711 return;
712 } 712 }
713#endif 713#endif
714 714
715} 715}
716 716
717void KABCore::beamDone( Ir *ir ) 717void KABCore::beamDone( Ir *ir )
718{ 718{
719#ifndef DESKTOP_VERSION 719#ifndef DESKTOP_VERSION
720 delete ir; 720 delete ir;
721#endif 721#endif
722} 722}
723 723
724 724
725void KABCore::browse( const QString& url ) 725void KABCore::browse( const QString& url )
726{ 726{
727#ifndef KAB_EMBEDDED 727#ifndef KAB_EMBEDDED
728 kapp->invokeBrowser( url ); 728 kapp->invokeBrowser( url );
729#else //KAB_EMBEDDED 729#else //KAB_EMBEDDED
730 qDebug("KABCore::browse must be fixed"); 730 qDebug("KABCore::browse must be fixed");
731#endif //KAB_EMBEDDED 731#endif //KAB_EMBEDDED
732} 732}
733 733
734void KABCore::selectAllContacts() 734void KABCore::selectAllContacts()
735{ 735{
736 mViewManager->setSelected( QString::null, true ); 736 mViewManager->setSelected( QString::null, true );
737} 737}
738 738
739void KABCore::deleteContacts() 739void KABCore::deleteContacts()
740{ 740{
741 QStringList uidList = mViewManager->selectedUids(); 741 QStringList uidList = mViewManager->selectedUids();
742 deleteContacts( uidList ); 742 deleteContacts( uidList );
743} 743}
744 744
745void KABCore::deleteContacts( const QStringList &uids ) 745void KABCore::deleteContacts( const QStringList &uids )
746{ 746{
747 if ( uids.count() > 0 ) { 747 if ( uids.count() > 0 ) {
748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
749 UndoStack::instance()->push( command ); 749 UndoStack::instance()->push( command );
750 RedoStack::instance()->clear(); 750 RedoStack::instance()->clear();
751 751
752 // now if we deleted anything, refresh 752 // now if we deleted anything, refresh
753 setContactSelected( QString::null ); 753 setContactSelected( QString::null );
754 setModified( true ); 754 setModified( true );
755 } 755 }
756} 756}
757 757
758void KABCore::copyContacts() 758void KABCore::copyContacts()
759{ 759{
760 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 760 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
761 761
762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
763 763
764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
765 765
766 QClipboard *cb = QApplication::clipboard(); 766 QClipboard *cb = QApplication::clipboard();
767 cb->setText( clipText ); 767 cb->setText( clipText );
768} 768}
769 769
770void KABCore::cutContacts() 770void KABCore::cutContacts()
771{ 771{
772 QStringList uidList = mViewManager->selectedUids(); 772 QStringList uidList = mViewManager->selectedUids();
773 773
774//US if ( uidList.size() > 0 ) { 774//US if ( uidList.size() > 0 ) {
775 if ( uidList.count() > 0 ) { 775 if ( uidList.count() > 0 ) {
776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
777 UndoStack::instance()->push( command ); 777 UndoStack::instance()->push( command );
778 RedoStack::instance()->clear(); 778 RedoStack::instance()->clear();
779 779
780 setModified( true ); 780 setModified( true );
781 } 781 }
782} 782}
783 783
784void KABCore::pasteContacts() 784void KABCore::pasteContacts()
785{ 785{
786 QClipboard *cb = QApplication::clipboard(); 786 QClipboard *cb = QApplication::clipboard();
787 787
788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
789 789
790 pasteContacts( list ); 790 pasteContacts( list );
791} 791}
792 792
793void KABCore::pasteContacts( KABC::Addressee::List &list ) 793void KABCore::pasteContacts( KABC::Addressee::List &list )
794{ 794{
795 KABC::Resource *resource = requestResource( this ); 795 KABC::Resource *resource = requestResource( this );
796 KABC::Addressee::List::Iterator it; 796 KABC::Addressee::List::Iterator it;
797 for ( it = list.begin(); it != list.end(); ++it ) 797 for ( it = list.begin(); it != list.end(); ++it )
798 (*it).setResource( resource ); 798 (*it).setResource( resource );
799 799
800 PwPasteCommand *command = new PwPasteCommand( this, list ); 800 PwPasteCommand *command = new PwPasteCommand( this, list );
801 UndoStack::instance()->push( command ); 801 UndoStack::instance()->push( command );
802 RedoStack::instance()->clear(); 802 RedoStack::instance()->clear();
803 803
804 setModified( true ); 804 setModified( true );
805} 805}
806 806
807void KABCore::setWhoAmI() 807void KABCore::setWhoAmI()
808{ 808{
809 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 809 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
810 810
811 if ( addrList.count() > 1 ) { 811 if ( addrList.count() > 1 ) {
812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
813 return; 813 return;
814 } 814 }
815 815
816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
819} 819}
820 820
821void KABCore::setCategories() 821void KABCore::setCategories()
822{ 822{
823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
824 if ( !dlg.exec() ) 824 if ( !dlg.exec() )
825 return; 825 return;
826 826
827 bool merge = false; 827 bool merge = false;
828 QString msg = i18n( "Merge with existing categories?" ); 828 QString msg = i18n( "Merge with existing categories?" );
829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
830 merge = true; 830 merge = true;
831 831
832 QStringList categories = dlg.selectedCategories(); 832 QStringList categories = dlg.selectedCategories();
833 833
834 QStringList uids = mViewManager->selectedUids(); 834 QStringList uids = mViewManager->selectedUids();
835 QStringList::Iterator it; 835 QStringList::Iterator it;
836 for ( it = uids.begin(); it != uids.end(); ++it ) { 836 for ( it = uids.begin(); it != uids.end(); ++it ) {
837 KABC::Addressee addr = mAddressBook->findByUid( *it ); 837 KABC::Addressee addr = mAddressBook->findByUid( *it );
838 if ( !addr.isEmpty() ) { 838 if ( !addr.isEmpty() ) {
839 if ( !merge ) 839 if ( !merge )
840 addr.setCategories( categories ); 840 addr.setCategories( categories );
841 else { 841 else {
842 QStringList addrCategories = addr.categories(); 842 QStringList addrCategories = addr.categories();
843 QStringList::Iterator catIt; 843 QStringList::Iterator catIt;
844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
845 if ( !addrCategories.contains( *catIt ) ) 845 if ( !addrCategories.contains( *catIt ) )
846 addrCategories.append( *catIt ); 846 addrCategories.append( *catIt );
847 } 847 }
848 addr.setCategories( addrCategories ); 848 addr.setCategories( addrCategories );
849 } 849 }
850 850
851 mAddressBook->insertAddressee( addr ); 851 mAddressBook->insertAddressee( addr );
852 } 852 }
853 } 853 }
854 854
855 if ( uids.count() > 0 ) 855 if ( uids.count() > 0 )
856 setModified( true ); 856 setModified( true );
857} 857}
858 858
859void KABCore::setSearchFields( const KABC::Field::List &fields ) 859void KABCore::setSearchFields( const KABC::Field::List &fields )
860{ 860{
861 mIncSearchWidget->setFields( fields ); 861 mIncSearchWidget->setFields( fields );
862} 862}
863 863
864void KABCore::incrementalSearch( const QString& text ) 864void KABCore::incrementalSearch( const QString& text )
865{ 865{
866 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 866 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
867} 867}
868 868
869void KABCore::setModified() 869void KABCore::setModified()
870{ 870{
871 setModified( true ); 871 setModified( true );
872} 872}
873 873
874void KABCore::setModifiedWOrefresh() 874void KABCore::setModifiedWOrefresh()
875{ 875{
876 // qDebug("KABCore::setModifiedWOrefresh() "); 876 // qDebug("KABCore::setModifiedWOrefresh() ");
877 mModified = true; 877 mModified = true;
878 mActionSave->setEnabled( mModified ); 878 mActionSave->setEnabled( mModified );
879#ifdef DESKTOP_VERSION 879#ifdef DESKTOP_VERSION
880 mDetails->refreshView(); 880 mDetails->refreshView();
881#endif 881#endif
882 882
883} 883}
884void KABCore::setModified( bool modified ) 884void KABCore::setModified( bool modified )
885{ 885{
886 mModified = modified; 886 mModified = modified;
887 mActionSave->setEnabled( mModified ); 887 mActionSave->setEnabled( mModified );
888 888
889 if ( modified ) 889 if ( modified )
890 mJumpButtonBar->recreateButtons(); 890 mJumpButtonBar->recreateButtons();
891 891
892 mViewManager->refreshView(); 892 mViewManager->refreshView();
893 mDetails->refreshView(); 893 mDetails->refreshView();
894 894
895} 895}
896 896
897bool KABCore::modified() const 897bool KABCore::modified() const
898{ 898{
899 return mModified; 899 return mModified;
900} 900}
901 901
902void KABCore::contactModified( const KABC::Addressee &addr ) 902void KABCore::contactModified( const KABC::Addressee &addr )
903{ 903{
904 904
905 Command *command = 0; 905 Command *command = 0;
906 QString uid; 906 QString uid;
907 907
908 // check if it exists already 908 // check if it exists already
909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
910 if ( origAddr.isEmpty() ) 910 if ( origAddr.isEmpty() )
911 command = new PwNewCommand( mAddressBook, addr ); 911 command = new PwNewCommand( mAddressBook, addr );
912 else { 912 else {
913 command = new PwEditCommand( mAddressBook, origAddr, addr ); 913 command = new PwEditCommand( mAddressBook, origAddr, addr );
914 uid = addr.uid(); 914 uid = addr.uid();
915 } 915 }
916 916
917 UndoStack::instance()->push( command ); 917 UndoStack::instance()->push( command );
918 RedoStack::instance()->clear(); 918 RedoStack::instance()->clear();
919 919
920 setModified( true ); 920 setModified( true );
921} 921}
922 922
923void KABCore::newContact() 923void KABCore::newContact()
924{ 924{
925 925
926 926
927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
928 928
929 QPtrList<KRES::Resource> kresResources; 929 QPtrList<KRES::Resource> kresResources;
930 QPtrListIterator<KABC::Resource> it( kabcResources ); 930 QPtrListIterator<KABC::Resource> it( kabcResources );
931 KABC::Resource *resource; 931 KABC::Resource *resource;
932 while ( ( resource = it.current() ) != 0 ) { 932 while ( ( resource = it.current() ) != 0 ) {
933 ++it; 933 ++it;
934 if ( !resource->readOnly() ) { 934 if ( !resource->readOnly() ) {
935 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 935 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
936 if ( res ) 936 if ( res )
937 kresResources.append( res ); 937 kresResources.append( res );
938 } 938 }
939 } 939 }
940 940
941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
942 resource = static_cast<KABC::Resource*>( res ); 942 resource = static_cast<KABC::Resource*>( res );
943 943
944 if ( resource ) { 944 if ( resource ) {
945 KABC::Addressee addr; 945 KABC::Addressee addr;
946 addr.setResource( resource ); 946 addr.setResource( resource );
947 mEditorDialog->setAddressee( addr ); 947 mEditorDialog->setAddressee( addr );
948 KApplication::execDialog ( mEditorDialog ); 948 KApplication::execDialog ( mEditorDialog );
949 949
950 } else 950 } else
951 return; 951 return;
952 952
953 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 953 // mEditorDict.insert( dialog->addressee().uid(), dialog );
954 954
955 955
956} 956}
957 957
958void KABCore::addEmail( QString aStr ) 958void KABCore::addEmail( QString aStr )
959{ 959{
960#ifndef KAB_EMBEDDED 960#ifndef KAB_EMBEDDED
961 QString fullName, email; 961 QString fullName, email;
962 962
963 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 963 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
964 964
965 // Try to lookup the addressee matching the email address 965 // Try to lookup the addressee matching the email address
966 bool found = false; 966 bool found = false;
967 QStringList emailList; 967 QStringList emailList;
968 KABC::AddressBook::Iterator it; 968 KABC::AddressBook::Iterator it;
969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
970 emailList = (*it).emails(); 970 emailList = (*it).emails();
971 if ( emailList.contains( email ) > 0 ) { 971 if ( emailList.contains( email ) > 0 ) {
972 found = true; 972 found = true;
973 (*it).setNameFromString( fullName ); 973 (*it).setNameFromString( fullName );
974 editContact( (*it).uid() ); 974 editContact( (*it).uid() );
975 } 975 }
976 } 976 }
977 977
978 if ( !found ) { 978 if ( !found ) {
979 KABC::Addressee addr; 979 KABC::Addressee addr;
980 addr.setNameFromString( fullName ); 980 addr.setNameFromString( fullName );
981 addr.insertEmail( email, true ); 981 addr.insertEmail( email, true );
982 982
983 mAddressBook->insertAddressee( addr ); 983 mAddressBook->insertAddressee( addr );
984 mViewManager->refreshView( addr.uid() ); 984 mViewManager->refreshView( addr.uid() );
985 editContact( addr.uid() ); 985 editContact( addr.uid() );
986 } 986 }
987#else //KAB_EMBEDDED 987#else //KAB_EMBEDDED
988 qDebug("KABCore::addEmail finsih method"); 988 qDebug("KABCore::addEmail finsih method");
989#endif //KAB_EMBEDDED 989#endif //KAB_EMBEDDED
990} 990}
991 991
992void KABCore::importVCard( const KURL &url, bool showPreview ) 992void KABCore::importVCard( const KURL &url, bool showPreview )
993{ 993{
994 mXXPortManager->importVCard( url, showPreview ); 994 mXXPortManager->importVCard( url, showPreview );
995} 995}
996void KABCore::importFromOL() 996void KABCore::importFromOL()
997{ 997{
998#ifdef _WIN32_ 998#ifdef _WIN32_
999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1000 idgl->exec(); 1000 idgl->exec();
1001 KABC::Addressee::List list = idgl->getAddressList(); 1001 KABC::Addressee::List list = idgl->getAddressList();
1002 if ( list.count() > 0 ) { 1002 if ( list.count() > 0 ) {
1003 KABC::Addressee::List listNew; 1003 KABC::Addressee::List listNew;
1004 KABC::Addressee::List listExisting; 1004 KABC::Addressee::List listExisting;
1005 KABC::Addressee::List::Iterator it; 1005 KABC::Addressee::List::Iterator it;
1006 KABC::AddressBook::Iterator iter; 1006 KABC::AddressBook::Iterator iter;
1007 for ( it = list.begin(); it != list.end(); ++it ) { 1007 for ( it = list.begin(); it != list.end(); ++it ) {
1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1009 listNew.append( (*it) ); 1009 listNew.append( (*it) );
1010 else 1010 else
1011 listExisting.append( (*it) ); 1011 listExisting.append( (*it) );
1012 } 1012 }
1013 if ( listExisting.count() > 0 ) 1013 if ( listExisting.count() > 0 )
1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1015 if ( listNew.count() > 0 ) { 1015 if ( listNew.count() > 0 ) {
1016 pasteWithNewUid = false; 1016 pasteWithNewUid = false;
1017 pasteContacts( listNew ); 1017 pasteContacts( listNew );
1018 pasteWithNewUid = true; 1018 pasteWithNewUid = true;
1019 } 1019 }
1020 } 1020 }
1021 delete idgl; 1021 delete idgl;
1022#endif 1022#endif
1023} 1023}
1024 1024
1025void KABCore::importVCard( const QString &vCard, bool showPreview ) 1025void KABCore::importVCard( const QString &vCard, bool showPreview )
1026{ 1026{
1027 mXXPortManager->importVCard( vCard, showPreview ); 1027 mXXPortManager->importVCard( vCard, showPreview );
1028} 1028}
1029 1029
1030//US added a second method without defaultparameter 1030//US added a second method without defaultparameter
1031void KABCore::editContact2() { 1031void KABCore::editContact2() {
1032 editContact( QString::null ); 1032 editContact( QString::null );
1033} 1033}
1034 1034
1035void KABCore::editContact( const QString &uid ) 1035void KABCore::editContact( const QString &uid )
1036{ 1036{
1037 1037
1038 if ( mExtensionManager->isQuickEditVisible() ) 1038 if ( mExtensionManager->isQuickEditVisible() )
1039 return; 1039 return;
1040 1040
1041 // First, locate the contact entry 1041 // First, locate the contact entry
1042 QString localUID = uid; 1042 QString localUID = uid;
1043 if ( localUID.isNull() ) { 1043 if ( localUID.isNull() ) {
1044 QStringList uidList = mViewManager->selectedUids(); 1044 QStringList uidList = mViewManager->selectedUids();
1045 if ( uidList.count() > 0 ) 1045 if ( uidList.count() > 0 )
1046 localUID = *( uidList.at( 0 ) ); 1046 localUID = *( uidList.at( 0 ) );
1047 } 1047 }
1048 1048
1049 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1049 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1050 if ( !addr.isEmpty() ) { 1050 if ( !addr.isEmpty() ) {
1051 mEditorDialog->setAddressee( addr ); 1051 mEditorDialog->setAddressee( addr );
1052 KApplication::execDialog ( mEditorDialog ); 1052 KApplication::execDialog ( mEditorDialog );
1053 } 1053 }
1054} 1054}
1055 1055
1056/** 1056/**
1057 Shows or edits the detail view for the given uid. If the uid is QString::null, 1057 Shows or edits the detail view for the given uid. If the uid is QString::null,
1058 the method will try to find a selected addressee in the view. 1058 the method will try to find a selected addressee in the view.
1059 */ 1059 */
1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1061{ 1061{
1062 if ( mMultipleViewsAtOnce ) 1062 if ( mMultipleViewsAtOnce )
1063 { 1063 {
1064 editContact( uid ); 1064 editContact( uid );
1065 } 1065 }
1066 else 1066 else
1067 { 1067 {
1068 setDetailsVisible( true ); 1068 setDetailsVisible( true );
1069 mActionDetails->setChecked(true); 1069 mActionDetails->setChecked(true);
1070 } 1070 }
1071 1071
1072} 1072}
1073 1073
1074void KABCore::save() 1074void KABCore::save()
1075{ 1075{
1076 if (mBlockSaveFlag) 1076 if (mBlockSaveFlag)
1077 return; 1077 return;
1078 mBlockSaveFlag = true; 1078 mBlockSaveFlag = true;
1079 if ( !mModified ) 1079 if ( !mModified )
1080 return; 1080 return;
1081 QString text = i18n( "There was an error while attempting to save\n the " 1081 QString text = i18n( "There was an error while attempting to save\n the "
1082 "address book. Please check that some \nother application is " 1082 "address book. Please check that some \nother application is "
1083 "not using it. " ); 1083 "not using it. " );
1084 statusMessage(i18n("Saving addressbook ... ")); 1084 statusMessage(i18n("Saving addressbook ... "));
1085#ifndef KAB_EMBEDDED 1085#ifndef KAB_EMBEDDED
1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1087 if ( !b || !b->save() ) { 1087 if ( !b || !b->save() ) {
1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1089 } 1089 }
1090#else //KAB_EMBEDDED 1090#else //KAB_EMBEDDED
1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1092 if ( !b || !b->save() ) { 1092 if ( !b || !b->save() ) {
1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1094 } 1094 }
1095#endif //KAB_EMBEDDED 1095#endif //KAB_EMBEDDED
1096 1096
1097 statusMessage(i18n("Addressbook saved!")); 1097 statusMessage(i18n("Addressbook saved!"));
1098 setModified( false ); 1098 setModified( false );
1099 mBlockSaveFlag = false; 1099 mBlockSaveFlag = false;
1100} 1100}
1101 1101
1102void KABCore::statusMessage(QString mess , int time ) 1102void KABCore::statusMessage(QString mess , int time )
1103{ 1103{
1104 //topLevelWidget()->setCaption( mess ); 1104 //topLevelWidget()->setCaption( mess );
1105 // pending setting timer to revome message 1105 // pending setting timer to revome message
1106} 1106}
1107void KABCore::undo() 1107void KABCore::undo()
1108{ 1108{
1109 UndoStack::instance()->undo(); 1109 UndoStack::instance()->undo();
1110 1110
1111 // Refresh the view 1111 // Refresh the view
1112 mViewManager->refreshView(); 1112 mViewManager->refreshView();
1113} 1113}
1114 1114
1115void KABCore::redo() 1115void KABCore::redo()
1116{ 1116{
1117 RedoStack::instance()->redo(); 1117 RedoStack::instance()->redo();
1118 1118
1119 // Refresh the view 1119 // Refresh the view
1120 mViewManager->refreshView(); 1120 mViewManager->refreshView();
1121} 1121}
1122 1122
1123void KABCore::setJumpButtonBarVisible( bool visible ) 1123void KABCore::setJumpButtonBarVisible( bool visible )
1124{ 1124{
1125 if (mMultipleViewsAtOnce) 1125 if (mMultipleViewsAtOnce)
1126 { 1126 {
1127 if ( visible ) 1127 if ( visible )
1128 mJumpButtonBar->show(); 1128 mJumpButtonBar->show();
1129 else 1129 else
1130 mJumpButtonBar->hide(); 1130 mJumpButtonBar->hide();
1131 } 1131 }
1132 else 1132 else
1133 { 1133 {
1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1135 if (mViewManager->isVisible()) 1135 if (mViewManager->isVisible())
1136 { 1136 {
1137 if ( visible ) 1137 if ( visible )
1138 mJumpButtonBar->show(); 1138 mJumpButtonBar->show();
1139 else 1139 else
1140 mJumpButtonBar->hide(); 1140 mJumpButtonBar->hide();
1141 } 1141 }
1142 else 1142 else
1143 { 1143 {
1144 mJumpButtonBar->hide(); 1144 mJumpButtonBar->hide();
1145 } 1145 }
1146 } 1146 }
1147} 1147}
1148 1148
1149 1149
1150void KABCore::setDetailsToState() 1150void KABCore::setDetailsToState()
1151{ 1151{
1152 setDetailsVisible( mActionDetails->isChecked() ); 1152 setDetailsVisible( mActionDetails->isChecked() );
1153} 1153}
1154 1154
1155 1155
1156 1156
1157void KABCore::setDetailsVisible( bool visible ) 1157void KABCore::setDetailsVisible( bool visible )
1158{ 1158{
1159 if (visible && mDetails->isHidden()) 1159 if (visible && mDetails->isHidden())
1160 { 1160 {
1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1162 if ( addrList.count() > 0 ) 1162 if ( addrList.count() > 0 )
1163 mDetails->setAddressee( addrList[ 0 ] ); 1163 mDetails->setAddressee( addrList[ 0 ] );
1164 } 1164 }
1165 1165
1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1167 // the listview and the detailview. We do that by changing the splitbar size. 1167 // the listview and the detailview. We do that by changing the splitbar size.
1168 if (mMultipleViewsAtOnce) 1168 if (mMultipleViewsAtOnce)
1169 { 1169 {
1170 if ( visible ) 1170 if ( visible )
1171 mDetails->show(); 1171 mDetails->show();
1172 else 1172 else
1173 mDetails->hide(); 1173 mDetails->hide();
1174 } 1174 }
1175 else 1175 else
1176 { 1176 {
1177 if ( visible ) { 1177 if ( visible ) {
1178 mViewManager->hide(); 1178 mViewManager->hide();
1179 mDetails->show(); 1179 mDetails->show();
1180 } 1180 }
1181 else { 1181 else {
1182 mViewManager->show(); 1182 mViewManager->show();
1183 mDetails->hide(); 1183 mDetails->hide();
1184 } 1184 }
1185 setJumpButtonBarVisible( !visible ); 1185 setJumpButtonBarVisible( !visible );
1186 } 1186 }
1187 1187
1188} 1188}
1189 1189
1190void KABCore::extensionChanged( int id ) 1190void KABCore::extensionChanged( int id )
1191{ 1191{
1192 //change the details view only for non desktop systems 1192 //change the details view only for non desktop systems
1193#ifndef DESKTOP_VERSION 1193#ifndef DESKTOP_VERSION
1194 1194
1195 if (id == 0) 1195 if (id == 0)
1196 { 1196 {
1197 //the user disabled the extension. 1197 //the user disabled the extension.
1198 1198
1199 if (mMultipleViewsAtOnce) 1199 if (mMultipleViewsAtOnce)
1200 { // enable detailsview again 1200 { // enable detailsview again
1201 setDetailsVisible( true ); 1201 setDetailsVisible( true );
1202 mActionDetails->setChecked( true ); 1202 mActionDetails->setChecked( true );
1203 } 1203 }
1204 else 1204 else
1205 { //go back to the listview 1205 { //go back to the listview
1206 setDetailsVisible( false ); 1206 setDetailsVisible( false );
1207 mActionDetails->setChecked( false ); 1207 mActionDetails->setChecked( false );
1208 mActionDetails->setEnabled(true); 1208 mActionDetails->setEnabled(true);
1209 } 1209 }
1210 1210
1211 } 1211 }
1212 else 1212 else
1213 { 1213 {
1214 //the user enabled the extension. 1214 //the user enabled the extension.
1215 setDetailsVisible( false ); 1215 setDetailsVisible( false );
1216 mActionDetails->setChecked( false ); 1216 mActionDetails->setChecked( false );
1217 1217
1218 if (!mMultipleViewsAtOnce) 1218 if (!mMultipleViewsAtOnce)
1219 { 1219 {
1220 mActionDetails->setEnabled(false); 1220 mActionDetails->setEnabled(false);
1221 } 1221 }
1222 1222
1223 mExtensionManager->setSelectionChanged(); 1223 mExtensionManager->setSelectionChanged();
1224 1224
1225 } 1225 }
1226 1226
1227#endif// DESKTOP_VERSION 1227#endif// DESKTOP_VERSION
1228 1228
1229} 1229}
1230 1230
1231 1231
1232void KABCore::extensionModified( const KABC::Addressee::List &list ) 1232void KABCore::extensionModified( const KABC::Addressee::List &list )
1233{ 1233{
1234 1234
1235 if ( list.count() != 0 ) { 1235 if ( list.count() != 0 ) {
1236 KABC::Addressee::List::ConstIterator it; 1236 KABC::Addressee::List::ConstIterator it;
1237 for ( it = list.begin(); it != list.end(); ++it ) 1237 for ( it = list.begin(); it != list.end(); ++it )
1238 mAddressBook->insertAddressee( *it ); 1238 mAddressBook->insertAddressee( *it );
1239 if ( list.count() > 1 ) 1239 if ( list.count() > 1 )
1240 setModified(); 1240 setModified();
1241 else 1241 else
1242 setModifiedWOrefresh(); 1242 setModifiedWOrefresh();
1243 } 1243 }
1244 if ( list.count() == 0 ) 1244 if ( list.count() == 0 )
1245 mViewManager->refreshView(); 1245 mViewManager->refreshView();
1246 else 1246 else
1247 mViewManager->refreshView( list[ 0 ].uid() ); 1247 mViewManager->refreshView( list[ 0 ].uid() );
1248 1248
1249 1249
1250 1250
1251} 1251}
1252 1252
1253QString KABCore::getNameByPhone( const QString &phone ) 1253QString KABCore::getNameByPhone( const QString &phone )
1254{ 1254{
1255#ifndef KAB_EMBEDDED 1255#ifndef KAB_EMBEDDED
1256 QRegExp r( "[/*/-/ ]" ); 1256 QRegExp r( "[/*/-/ ]" );
1257 QString localPhone( phone ); 1257 QString localPhone( phone );
1258 1258
1259 bool found = false; 1259 bool found = false;
1260 QString ownerName = ""; 1260 QString ownerName = "";
1261 KABC::AddressBook::Iterator iter; 1261 KABC::AddressBook::Iterator iter;
1262 KABC::PhoneNumber::List::Iterator phoneIter; 1262 KABC::PhoneNumber::List::Iterator phoneIter;
1263 KABC::PhoneNumber::List phoneList; 1263 KABC::PhoneNumber::List phoneList;
1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1265 phoneList = (*iter).phoneNumbers(); 1265 phoneList = (*iter).phoneNumbers();
1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1267 ++phoneIter) { 1267 ++phoneIter) {
1268 // Get rid of separator chars so just the numbers are compared. 1268 // Get rid of separator chars so just the numbers are compared.
1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1270 ownerName = (*iter).formattedName(); 1270 ownerName = (*iter).formattedName();
1271 found = true; 1271 found = true;
1272 } 1272 }
1273 } 1273 }
1274 } 1274 }
1275 1275
1276 return ownerName; 1276 return ownerName;
1277#else //KAB_EMBEDDED 1277#else //KAB_EMBEDDED
1278 qDebug("KABCore::getNameByPhone finsih method"); 1278 qDebug("KABCore::getNameByPhone finsih method");
1279 return ""; 1279 return "";
1280#endif //KAB_EMBEDDED 1280#endif //KAB_EMBEDDED
1281 1281
1282} 1282}
1283 1283
1284void KABCore::openConfigDialog() 1284void KABCore::openConfigDialog()
1285{ 1285{
1286 KABPrefs* kab_prefs = KABPrefs::instance(); 1286 KABPrefs* kab_prefs = KABPrefs::instance();
1287 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance(); 1287 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance();
1288 1288
1289 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1289 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1290 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1290 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1291 ConfigureDialog->addModule(kabcfg ); 1291 ConfigureDialog->addModule(kabcfg );
1292 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1292 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1293 ConfigureDialog->addModule(kdelibcfg ); 1293 ConfigureDialog->addModule(kdelibcfg );
1294 1294
1295 1295
1296 1296
1297 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1297 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1298 this, SLOT( configurationChanged() ) ); 1298 this, SLOT( configurationChanged() ) );
1299 connect( ConfigureDialog, SIGNAL( okClicked() ), 1299 connect( ConfigureDialog, SIGNAL( okClicked() ),
1300 this, SLOT( configurationChanged() ) ); 1300 this, SLOT( configurationChanged() ) );
1301 saveSettings(); 1301 saveSettings();
1302#ifndef DESKTOP_VERSION 1302#ifndef DESKTOP_VERSION
1303 ConfigureDialog->showMaximized(); 1303 ConfigureDialog->showMaximized();
1304#endif 1304#endif
1305 if ( ConfigureDialog->exec() ) 1305 if ( ConfigureDialog->exec() )
1306 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1306 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1307 delete ConfigureDialog; 1307 delete ConfigureDialog;
1308} 1308}
1309 1309
1310void KABCore::openLDAPDialog() 1310void KABCore::openLDAPDialog()
1311{ 1311{
1312#ifndef KAB_EMBEDDED 1312#ifndef KAB_EMBEDDED
1313 if ( !mLdapSearchDialog ) { 1313 if ( !mLdapSearchDialog ) {
1314 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1314 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1315 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1315 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1316 SLOT( refreshView() ) ); 1316 SLOT( refreshView() ) );
1317 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1317 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1318 SLOT( setModified() ) ); 1318 SLOT( setModified() ) );
1319 } else 1319 } else
1320 mLdapSearchDialog->restoreSettings(); 1320 mLdapSearchDialog->restoreSettings();
1321 1321
1322 if ( mLdapSearchDialog->isOK() ) 1322 if ( mLdapSearchDialog->isOK() )
1323 mLdapSearchDialog->exec(); 1323 mLdapSearchDialog->exec();
1324#else //KAB_EMBEDDED 1324#else //KAB_EMBEDDED
1325 qDebug("KABCore::openLDAPDialog() finsih method"); 1325 qDebug("KABCore::openLDAPDialog() finsih method");
1326#endif //KAB_EMBEDDED 1326#endif //KAB_EMBEDDED
1327} 1327}
1328 1328
1329void KABCore::print() 1329void KABCore::print()
1330{ 1330{
1331#ifndef KAB_EMBEDDED 1331#ifndef KAB_EMBEDDED
1332 KPrinter printer; 1332 KPrinter printer;
1333 if ( !printer.setup( this ) ) 1333 if ( !printer.setup( this ) )
1334 return; 1334 return;
1335 1335
1336 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1336 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1337 mViewManager->selectedUids(), this ); 1337 mViewManager->selectedUids(), this );
1338 1338
1339 wizard.exec(); 1339 wizard.exec();
1340#else //KAB_EMBEDDED 1340#else //KAB_EMBEDDED
1341 qDebug("KABCore::print() finsih method"); 1341 qDebug("KABCore::print() finsih method");
1342#endif //KAB_EMBEDDED 1342#endif //KAB_EMBEDDED
1343 1343
1344} 1344}
1345 1345
1346 1346
1347void KABCore::addGUIClient( KXMLGUIClient *client ) 1347void KABCore::addGUIClient( KXMLGUIClient *client )
1348{ 1348{
1349 if ( mGUIClient ) 1349 if ( mGUIClient )
1350 mGUIClient->insertChildClient( client ); 1350 mGUIClient->insertChildClient( client );
1351 else 1351 else
1352 KMessageBox::error( this, "no KXMLGUICLient"); 1352 KMessageBox::error( this, "no KXMLGUICLient");
1353} 1353}
1354 1354
1355 1355
1356void KABCore::configurationChanged() 1356void KABCore::configurationChanged()
1357{ 1357{
1358 mExtensionManager->reconfigure(); 1358 mExtensionManager->reconfigure();
1359} 1359}
1360 1360
1361void KABCore::addressBookChanged() 1361void KABCore::addressBookChanged()
1362{ 1362{
1363/*US 1363/*US
1364 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1364 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1365 while ( it.current() ) { 1365 while ( it.current() ) {
1366 if ( it.current()->dirty() ) { 1366 if ( it.current()->dirty() ) {
1367 QString text = i18n( "Data has been changed externally. Unsaved " 1367 QString text = i18n( "Data has been changed externally. Unsaved "
1368 "changes will be lost." ); 1368 "changes will be lost." );
1369 KMessageBox::information( this, text ); 1369 KMessageBox::information( this, text );
1370 } 1370 }
1371 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1371 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1372 ++it; 1372 ++it;
1373 } 1373 }
1374*/ 1374*/
1375 if (mEditorDialog) 1375 if (mEditorDialog)
1376 { 1376 {
1377 if (mEditorDialog->dirty()) 1377 if (mEditorDialog->dirty())
1378 { 1378 {
1379 QString text = i18n( "Data has been changed externally. Unsaved " 1379 QString text = i18n( "Data has been changed externally. Unsaved "
1380 "changes will be lost." ); 1380 "changes will be lost." );
1381 KMessageBox::information( this, text ); 1381 KMessageBox::information( this, text );
1382 } 1382 }
1383 QString currentuid = mEditorDialog->addressee().uid(); 1383 QString currentuid = mEditorDialog->addressee().uid();
1384 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1384 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1385 } 1385 }
1386 mViewManager->refreshView(); 1386 mViewManager->refreshView();
1387// mDetails->refreshView(); 1387// mDetails->refreshView();
1388 1388
1389 1389
1390} 1390}
1391 1391
1392AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1392AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1393 const char *name ) 1393 const char *name )
1394{ 1394{
1395 1395
1396 if ( mEditorDialog == 0 ) { 1396 if ( mEditorDialog == 0 ) {
1397 mEditorDialog = new AddresseeEditorDialog( this, parent, 1397 mEditorDialog = new AddresseeEditorDialog( this, parent,
1398 name ? name : "editorDialog" ); 1398 name ? name : "editorDialog" );
1399 1399
1400 1400
1401 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1401 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1402 SLOT( contactModified( const KABC::Addressee& ) ) ); 1402 SLOT( contactModified( const KABC::Addressee& ) ) );
1403 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1403 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1404 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1404 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1405 } 1405 }
1406 1406
1407 return mEditorDialog; 1407 return mEditorDialog;
1408} 1408}
1409 1409
1410void KABCore::slotEditorDestroyed( const QString &uid ) 1410void KABCore::slotEditorDestroyed( const QString &uid )
1411{ 1411{
1412 //mEditorDict.remove( uid ); 1412 //mEditorDict.remove( uid );
1413} 1413}
1414 1414
1415void KABCore::initGUI() 1415void KABCore::initGUI()
1416{ 1416{
1417#ifndef KAB_EMBEDDED 1417#ifndef KAB_EMBEDDED
1418 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1418 QHBoxLayout *topLayout = new QHBoxLayout( this );
1419 topLayout->setSpacing( KDialogBase::spacingHint() ); 1419 topLayout->setSpacing( KDialogBase::spacingHint() );
1420 1420
1421 mExtensionBarSplitter = new QSplitter( this ); 1421 mExtensionBarSplitter = new QSplitter( this );
1422 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1422 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1423 1423
1424 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1424 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1425 1425
1426 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1426 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1427 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1427 mIncSearchWidget = new IncSearchWidget( viewSpace );
1428 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1428 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1429 SLOT( incrementalSearch( const QString& ) ) ); 1429 SLOT( incrementalSearch( const QString& ) ) );
1430 1430
1431 mViewManager = new ViewManager( this, viewSpace ); 1431 mViewManager = new ViewManager( this, viewSpace );
1432 viewSpace->setStretchFactor( mViewManager, 1 ); 1432 viewSpace->setStretchFactor( mViewManager, 1 );
1433 1433
1434 mDetails = new ViewContainer( mDetailsSplitter ); 1434 mDetails = new ViewContainer( mDetailsSplitter );
1435 1435
1436 mJumpButtonBar = new JumpButtonBar( this, this ); 1436 mJumpButtonBar = new JumpButtonBar( this, this );
1437 1437
1438 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1438 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1439 1439
1440 topLayout->addWidget( mExtensionBarSplitter ); 1440 topLayout->addWidget( mExtensionBarSplitter );
1441 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1441 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1442 topLayout->addWidget( mJumpButtonBar ); 1442 topLayout->addWidget( mJumpButtonBar );
1443 topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1443 topLayout->setStretchFactor( mJumpButtonBar, 1 );
1444 1444
1445 mXXPortManager = new XXPortManager( this, this ); 1445 mXXPortManager = new XXPortManager( this, this );
1446 1446
1447#else //KAB_EMBEDDED 1447#else //KAB_EMBEDDED
1448 //US initialize viewMenu before settingup viewmanager. 1448 //US initialize viewMenu before settingup viewmanager.
1449 // Viewmanager needs this menu to plugin submenues. 1449 // Viewmanager needs this menu to plugin submenues.
1450 viewMenu = new QPopupMenu( this ); 1450 viewMenu = new QPopupMenu( this );
1451 settingsMenu = new QPopupMenu( this ); 1451 settingsMenu = new QPopupMenu( this );
1452 //filterMenu = new QPopupMenu( this ); 1452 //filterMenu = new QPopupMenu( this );
1453 ImportMenu = new QPopupMenu( this ); 1453 ImportMenu = new QPopupMenu( this );
1454 ExportMenu = new QPopupMenu( this ); 1454 ExportMenu = new QPopupMenu( this );
1455 syncMenu = new QPopupMenu( this ); 1455 syncMenu = new QPopupMenu( this );
1456 changeMenu= new QPopupMenu( this ); 1456 changeMenu= new QPopupMenu( this );
1457 1457
1458//US since we have no splitter for the embedded system, setup 1458//US since we have no splitter for the embedded system, setup
1459// a layout with two frames. One left and one right. 1459// a layout with two frames. One left and one right.
1460 1460
1461 QBoxLayout *topLayout; 1461 QBoxLayout *topLayout;
1462 1462
1463 // = new QHBoxLayout( this ); 1463 // = new QHBoxLayout( this );
1464// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1464// QBoxLayout *topLayout = (QBoxLayout*)layout();
1465 1465
1466// QWidget *mainBox = new QWidget( this ); 1466// QWidget *mainBox = new QWidget( this );
1467// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1467// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1468 1468
1469#ifdef DESKTOP_VERSION 1469#ifdef DESKTOP_VERSION
1470 topLayout = new QHBoxLayout( this ); 1470 topLayout = new QHBoxLayout( this );
1471 1471
1472 1472
1473 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1473 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1474 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1474 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1475 1475
1476 topLayout->addWidget(mMiniSplitter ); 1476 topLayout->addWidget(mMiniSplitter );
1477 1477
1478 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1478 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1479 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1479 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1480 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1480 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1481 mDetails = new ViewContainer( mMiniSplitter ); 1481 mDetails = new ViewContainer( mMiniSplitter );
1482 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1482 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1483#else 1483#else
1484 if ( QApplication::desktop()->width() > 480 ) { 1484 if ( QApplication::desktop()->width() > 480 ) {
1485 topLayout = new QHBoxLayout( this ); 1485 topLayout = new QHBoxLayout( this );
1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1488 } else { 1488 } else {
1489 1489
1490 topLayout = new QHBoxLayout( this ); 1490 topLayout = new QHBoxLayout( this );
1491 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1491 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1492 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1492 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1493 } 1493 }
1494 1494
1495 topLayout->addWidget(mMiniSplitter ); 1495 topLayout->addWidget(mMiniSplitter );
1496 mViewManager = new ViewManager( this, mMiniSplitter ); 1496 mViewManager = new ViewManager( this, mMiniSplitter );
1497 mDetails = new ViewContainer( mMiniSplitter ); 1497 mDetails = new ViewContainer( mMiniSplitter );
1498 1498
1499 1499
1500 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1500 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1501#endif 1501#endif
1502 //eh->hide(); 1502 //eh->hide();
1503 // topLayout->addWidget(mExtensionManager ); 1503 // topLayout->addWidget(mExtensionManager );
1504 1504
1505 1505
1506/*US 1506/*US
1507#ifndef KAB_NOSPLITTER 1507#ifndef KAB_NOSPLITTER
1508 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1508 QHBoxLayout *topLayout = new QHBoxLayout( this );
1509//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1509//US topLayout->setSpacing( KDialogBase::spacingHint() );
1510 topLayout->setSpacing( 10 ); 1510 topLayout->setSpacing( 10 );
1511 1511
1512 mDetailsSplitter = new QSplitter( this ); 1512 mDetailsSplitter = new QSplitter( this );
1513 1513
1514 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1514 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1515 1515
1516 mViewManager = new ViewManager( this, viewSpace ); 1516 mViewManager = new ViewManager( this, viewSpace );
1517 viewSpace->setStretchFactor( mViewManager, 1 ); 1517 viewSpace->setStretchFactor( mViewManager, 1 );
1518 1518
1519 mDetails = new ViewContainer( mDetailsSplitter ); 1519 mDetails = new ViewContainer( mDetailsSplitter );
1520 1520
1521 topLayout->addWidget( mDetailsSplitter ); 1521 topLayout->addWidget( mDetailsSplitter );
1522 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1522 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1523#else //KAB_NOSPLITTER 1523#else //KAB_NOSPLITTER
1524 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1524 QHBoxLayout *topLayout = new QHBoxLayout( this );
1525//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1525//US topLayout->setSpacing( KDialogBase::spacingHint() );
1526 topLayout->setSpacing( 10 ); 1526 topLayout->setSpacing( 10 );
1527 1527
1528// mDetailsSplitter = new QSplitter( this ); 1528// mDetailsSplitter = new QSplitter( this );
1529 1529
1530 QVBox *viewSpace = new QVBox( this ); 1530 QVBox *viewSpace = new QVBox( this );
1531 1531
1532 mViewManager = new ViewManager( this, viewSpace ); 1532 mViewManager = new ViewManager( this, viewSpace );
1533 viewSpace->setStretchFactor( mViewManager, 1 ); 1533 viewSpace->setStretchFactor( mViewManager, 1 );
1534 1534
1535 mDetails = new ViewContainer( this ); 1535 mDetails = new ViewContainer( this );
1536 1536
1537 topLayout->addWidget( viewSpace ); 1537 topLayout->addWidget( viewSpace );
1538// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1538// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1539 topLayout->addWidget( mDetails ); 1539 topLayout->addWidget( mDetails );
1540#endif //KAB_NOSPLITTER 1540#endif //KAB_NOSPLITTER
1541*/ 1541*/
1542 1542
1543 1543
1544#endif //KAB_EMBEDDED 1544#endif //KAB_EMBEDDED
1545 initActions(); 1545 initActions();
1546 1546
1547#ifdef KAB_EMBEDDED 1547#ifdef KAB_EMBEDDED
1548 addActionsManually(); 1548 addActionsManually();
1549 //US make sure the export and import menues are initialized before creating the xxPortManager. 1549 //US make sure the export and import menues are initialized before creating the xxPortManager.
1550 mXXPortManager = new XXPortManager( this, this ); 1550 mXXPortManager = new XXPortManager( this, this );
1551 1551
1552 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1552 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1553 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1553 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1554 // mActionQuit->plug ( mMainWindow->toolBar()); 1554 // mActionQuit->plug ( mMainWindow->toolBar());
1555 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1555 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1556 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1556 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1557 // mIncSearchWidget->hide(); 1557 // mIncSearchWidget->hide();
1558 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1558 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1559 SLOT( incrementalSearch( const QString& ) ) ); 1559 SLOT( incrementalSearch( const QString& ) ) );
1560 1560
1561 1561
1562 mJumpButtonBar = new JumpButtonBar( this, this ); 1562 mJumpButtonBar = new JumpButtonBar( this, this );
1563 1563
1564 topLayout->addWidget( mJumpButtonBar ); 1564 topLayout->addWidget( mJumpButtonBar );
1565//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1565//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1566 1566
1567// mMainWindow->getIconToolBar()->raise(); 1567// mMainWindow->getIconToolBar()->raise();
1568 1568
1569#endif //KAB_EMBEDDED 1569#endif //KAB_EMBEDDED
1570 1570
1571} 1571}
1572void KABCore::initActions() 1572void KABCore::initActions()
1573{ 1573{
1574//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1574//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1575 1575
1576#ifndef KAB_EMBEDDED 1576#ifndef KAB_EMBEDDED
1577 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1577 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1578 SLOT( clipboardDataChanged() ) ); 1578 SLOT( clipboardDataChanged() ) );
1579#endif //KAB_EMBEDDED 1579#endif //KAB_EMBEDDED
1580 1580
1581 // file menu 1581 // file menu
1582 if ( mIsPart ) { 1582 if ( mIsPart ) {
1583 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1583 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1584 SLOT( sendMail() ), actionCollection(), 1584 SLOT( sendMail() ), actionCollection(),
1585 "kaddressbook_mail" ); 1585 "kaddressbook_mail" );
1586 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1586 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1587 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1587 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1588 1588
1589 } else { 1589 } else {
1590 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1590 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1591 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1591 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1592 } 1592 }
1593 1593
1594 1594
1595 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1595 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1596 SLOT( save() ), actionCollection(), "file_sync" ); 1596 SLOT( save() ), actionCollection(), "file_sync" );
1597 1597
1598 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1598 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1599 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1599 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1600 1600
1601 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1601 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1602 this, SLOT( mailVCard() ), 1602 this, SLOT( mailVCard() ),
1603 actionCollection(), "file_mail_vcard"); 1603 actionCollection(), "file_mail_vcard");
1604 1604
1605 mActionBeamVCard = 0; 1605 mActionBeamVCard = 0;
1606 mActionBeam = 0; 1606 mActionBeam = 0;
1607 1607
1608#ifndef DESKTOP_VERSION 1608#ifndef DESKTOP_VERSION
1609 if ( Ir::supported() ) { 1609 if ( Ir::supported() ) {
1610 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this, 1610 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this,
1611 SLOT( beamVCard() ), actionCollection(), 1611 SLOT( beamVCard() ), actionCollection(),
1612 "kaddressbook_beam_vcard" ); 1612 "kaddressbook_beam_vcard" );
1613 1613
1614 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1614 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1615 SLOT( beamMySelf() ), actionCollection(), 1615 SLOT( beamMySelf() ), actionCollection(),
1616 "kaddressbook_beam_myself" ); 1616 "kaddressbook_beam_myself" );
1617 } 1617 }
1618#endif 1618#endif
1619 1619
1620 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1620 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1621 this, SLOT( editContact2() ), 1621 this, SLOT( editContact2() ),
1622 actionCollection(), "file_properties" ); 1622 actionCollection(), "file_properties" );
1623 1623
1624#ifdef KAB_EMBEDDED 1624#ifdef KAB_EMBEDDED
1625 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1625 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1626 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1626 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1627 mMainWindow, SLOT( exit() ), 1627 mMainWindow, SLOT( exit() ),
1628 actionCollection(), "quit" ); 1628 actionCollection(), "quit" );
1629#endif //KAB_EMBEDDED 1629#endif //KAB_EMBEDDED
1630 1630
1631 // edit menu 1631 // edit menu
1632 if ( mIsPart ) { 1632 if ( mIsPart ) {
1633 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1633 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1634 SLOT( copyContacts() ), actionCollection(), 1634 SLOT( copyContacts() ), actionCollection(),
1635 "kaddressbook_copy" ); 1635 "kaddressbook_copy" );
1636 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1636 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1637 SLOT( cutContacts() ), actionCollection(), 1637 SLOT( cutContacts() ), actionCollection(),
1638 "kaddressbook_cut" ); 1638 "kaddressbook_cut" );
1639 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1639 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1640 SLOT( pasteContacts() ), actionCollection(), 1640 SLOT( pasteContacts() ), actionCollection(),
1641 "kaddressbook_paste" ); 1641 "kaddressbook_paste" );
1642 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1642 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1643 SLOT( selectAllContacts() ), actionCollection(), 1643 SLOT( selectAllContacts() ), actionCollection(),
1644 "kaddressbook_select_all" ); 1644 "kaddressbook_select_all" );
1645 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1645 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1646 SLOT( undo() ), actionCollection(), 1646 SLOT( undo() ), actionCollection(),
1647 "kaddressbook_undo" ); 1647 "kaddressbook_undo" );
1648 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1648 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1649 this, SLOT( redo() ), actionCollection(), 1649 this, SLOT( redo() ), actionCollection(),
1650 "kaddressbook_redo" ); 1650 "kaddressbook_redo" );
1651 } else { 1651 } else {
1652 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1652 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1653 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1653 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1654 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1654 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1655 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1655 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1656 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1656 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1657 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1657 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1658 } 1658 }
1659 1659
1660 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1660 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1661 Key_Delete, this, SLOT( deleteContacts() ), 1661 Key_Delete, this, SLOT( deleteContacts() ),
1662 actionCollection(), "edit_delete" ); 1662 actionCollection(), "edit_delete" );
1663 1663
1664 mActionUndo->setEnabled( false ); 1664 mActionUndo->setEnabled( false );
1665 mActionRedo->setEnabled( false ); 1665 mActionRedo->setEnabled( false );
1666 1666
1667 // settings menu 1667 // settings menu
1668#ifdef KAB_EMBEDDED 1668#ifdef KAB_EMBEDDED
1669//US special menuentry to configure the addressbook resources. On KDE 1669//US special menuentry to configure the addressbook resources. On KDE
1670// you do that through the control center !!! 1670// you do that through the control center !!!
1671 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1671 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1672 SLOT( configureResources() ), actionCollection(), 1672 SLOT( configureResources() ), actionCollection(),
1673 "kaddressbook_configure_resources" ); 1673 "kaddressbook_configure_resources" );
1674#endif //KAB_EMBEDDED 1674#endif //KAB_EMBEDDED
1675 1675
1676 if ( mIsPart ) { 1676 if ( mIsPart ) {
1677 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1677 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1678 SLOT( openConfigDialog() ), actionCollection(), 1678 SLOT( openConfigDialog() ), actionCollection(),
1679 "kaddressbook_configure" ); 1679 "kaddressbook_configure" );
1680 1680
1681 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1681 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1682 this, SLOT( configureKeyBindings() ), actionCollection(), 1682 this, SLOT( configureKeyBindings() ), actionCollection(),
1683 "kaddressbook_configure_shortcuts" ); 1683 "kaddressbook_configure_shortcuts" );
1684#ifdef KAB_EMBEDDED 1684#ifdef KAB_EMBEDDED
1685 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1685 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1686 mActionConfigureToolbars->setEnabled( false ); 1686 mActionConfigureToolbars->setEnabled( false );
1687#endif //KAB_EMBEDDED 1687#endif //KAB_EMBEDDED
1688 1688
1689 } else { 1689 } else {
1690 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 1690 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
1691 1691
1692 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 1692 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
1693 } 1693 }
1694 1694
1695 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 1695 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
1696 actionCollection(), "options_show_jump_bar" ); 1696 actionCollection(), "options_show_jump_bar" );
1697 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) ); 1697 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) );
1698 1698
1699 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 1699 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
1700 actionCollection(), "options_show_details" ); 1700 actionCollection(), "options_show_details" );
1701 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 1701 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
1702 1702
1703 // misc 1703 // misc
1704 // only enable LDAP lookup if we can handle the protocol 1704 // only enable LDAP lookup if we can handle the protocol
1705#ifndef KAB_EMBEDDED 1705#ifndef KAB_EMBEDDED
1706 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 1706 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
1707 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 1707 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
1708 this, SLOT( openLDAPDialog() ), actionCollection(), 1708 this, SLOT( openLDAPDialog() ), actionCollection(),
1709 "ldap_lookup" ); 1709 "ldap_lookup" );
1710 } 1710 }
1711#else //KAB_EMBEDDED 1711#else //KAB_EMBEDDED
1712 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1712 //qDebug("KABCore::initActions() LDAP has to be implemented");
1713#endif //KAB_EMBEDDED 1713#endif //KAB_EMBEDDED
1714 1714
1715 1715
1716 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1716 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1717 SLOT( setWhoAmI() ), actionCollection(), 1717 SLOT( setWhoAmI() ), actionCollection(),
1718 "set_personal" ); 1718 "set_personal" );
1719 1719
1720 1720
1721 1721
1722 1722
1723 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1723 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1724 SLOT( setCategories() ), actionCollection(), 1724 SLOT( setCategories() ), actionCollection(),
1725 "edit_set_categories" ); 1725 "edit_set_categories" );
1726 1726
1727 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1727 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1728 SLOT( removeVoice() ), actionCollection(), 1728 SLOT( removeVoice() ), actionCollection(),
1729 "remove_voice" ); 1729 "remove_voice" );
1730 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 1730 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
1731 SLOT( importFromOL() ), actionCollection(), 1731 SLOT( importFromOL() ), actionCollection(),
1732 "import_OL" ); 1732 "import_OL" );
1733#ifdef KAB_EMBEDDED 1733#ifdef KAB_EMBEDDED
1734 mActionLicence = new KAction( i18n( "Licence" ), 0, 1734 mActionLicence = new KAction( i18n( "Licence" ), 0,
1735 this, SLOT( showLicence() ), actionCollection(), 1735 this, SLOT( showLicence() ), actionCollection(),
1736 "licence_about_data" ); 1736 "licence_about_data" );
1737 mActionFaq = new KAction( i18n( "Faq" ), 0, 1737 mActionFaq = new KAction( i18n( "Faq" ), 0,
1738 this, SLOT( faq() ), actionCollection(), 1738 this, SLOT( faq() ), actionCollection(),
1739 "faq_about_data" ); 1739 "faq_about_data" );
1740 1740
1741 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1741 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1742 this, SLOT( createAboutData() ), actionCollection(), 1742 this, SLOT( createAboutData() ), actionCollection(),
1743 "kaddressbook_about_data" ); 1743 "kaddressbook_about_data" );
1744#endif //KAB_EMBEDDED 1744#endif //KAB_EMBEDDED
1745 1745
1746 clipboardDataChanged(); 1746 clipboardDataChanged();
1747 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1747 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1748 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1748 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1749} 1749}
1750 1750
1751//US we need this function, to plug all actions into the correct menues. 1751//US we need this function, to plug all actions into the correct menues.
1752// KDE uses a XML format to plug the actions, but we work her without this overhead. 1752// KDE uses a XML format to plug the actions, but we work her without this overhead.
1753void KABCore::addActionsManually() 1753void KABCore::addActionsManually()
1754{ 1754{
1755//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1755//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1756 1756
1757#ifdef KAB_EMBEDDED 1757#ifdef KAB_EMBEDDED
1758 QPopupMenu *fileMenu = new QPopupMenu( this ); 1758 QPopupMenu *fileMenu = new QPopupMenu( this );
1759 QPopupMenu *editMenu = new QPopupMenu( this ); 1759 QPopupMenu *editMenu = new QPopupMenu( this );
1760 QPopupMenu *helpMenu = new QPopupMenu( this ); 1760 QPopupMenu *helpMenu = new QPopupMenu( this );
1761 1761
1762 KToolBar* tb = mMainWindow->toolBar(); 1762 KToolBar* tb = mMainWindow->toolBar();
1763 1763
1764#ifdef DESKTOP_VERSION 1764#ifdef DESKTOP_VERSION
1765 QMenuBar* mb = mMainWindow->menuBar(); 1765 QMenuBar* mb = mMainWindow->menuBar();
1766 1766
1767 //US setup menubar. 1767 //US setup menubar.
1768 //Disable the following block if you do not want to have a menubar. 1768 //Disable the following block if you do not want to have a menubar.
1769 mb->insertItem( "&File", fileMenu ); 1769 mb->insertItem( "&File", fileMenu );
1770 mb->insertItem( "&Edit", editMenu ); 1770 mb->insertItem( "&Edit", editMenu );
1771 mb->insertItem( "&View", viewMenu ); 1771 mb->insertItem( "&View", viewMenu );
1772 mb->insertItem( "&Settings", settingsMenu ); 1772 mb->insertItem( "&Settings", settingsMenu );
1773 mb->insertItem( i18n("Synchronize"), syncMenu ); 1773 mb->insertItem( i18n("Synchronize"), syncMenu );
1774 mb->insertItem( "&Change selected", changeMenu ); 1774 mb->insertItem( "&Change selected", changeMenu );
1775 mb->insertItem( "&Help", helpMenu ); 1775 mb->insertItem( "&Help", helpMenu );
1776 mIncSearchWidget = new IncSearchWidget( tb ); 1776 mIncSearchWidget = new IncSearchWidget( tb );
1777 // tb->insertWidget(-1, 0, mIncSearchWidget); 1777 // tb->insertWidget(-1, 0, mIncSearchWidget);
1778 1778
1779#else 1779#else
1780 //US setup toolbar 1780 //US setup toolbar
1781 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 1781 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
1782 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1782 QPopupMenu *popupBarTB = new QPopupMenu( this );
1783 menuBarTB->insertItem( "ME", popupBarTB); 1783 menuBarTB->insertItem( "ME", popupBarTB);
1784 tb->insertWidget(-1, 0, menuBarTB); 1784 tb->insertWidget(-1, 0, menuBarTB);
1785 mIncSearchWidget = new IncSearchWidget( tb ); 1785 mIncSearchWidget = new IncSearchWidget( tb );
1786 1786
1787 tb->enableMoving(false); 1787 tb->enableMoving(false);
1788 popupBarTB->insertItem( "&File", fileMenu ); 1788 popupBarTB->insertItem( "&File", fileMenu );
1789 popupBarTB->insertItem( "&Edit", editMenu ); 1789 popupBarTB->insertItem( "&Edit", editMenu );
1790 popupBarTB->insertItem( "&View", viewMenu ); 1790 popupBarTB->insertItem( "&View", viewMenu );
1791 popupBarTB->insertItem( "&Settings", settingsMenu ); 1791 popupBarTB->insertItem( "&Settings", settingsMenu );
1792 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 1792 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
1793 mViewManager->getFilterAction()->plug ( popupBarTB); 1793 mViewManager->getFilterAction()->plug ( popupBarTB);
1794 popupBarTB->insertItem( "&Change selected", changeMenu ); 1794 popupBarTB->insertItem( "&Change selected", changeMenu );
1795 popupBarTB->insertItem( "&Help", helpMenu ); 1795 popupBarTB->insertItem( "&Help", helpMenu );
1796 if (QApplication::desktop()->width() > 320 ) { 1796 if (QApplication::desktop()->width() > 320 ) {
1797 // mViewManager->getFilterAction()->plug ( tb); 1797 // mViewManager->getFilterAction()->plug ( tb);
1798 } 1798 }
1799#endif 1799#endif
1800 // mActionQuit->plug ( mMainWindow->toolBar()); 1800 // mActionQuit->plug ( mMainWindow->toolBar());
1801 1801
1802 1802
1803 1803
1804 //US Now connect the actions with the menue entries. 1804 //US Now connect the actions with the menue entries.
1805 mActionPrint->plug( fileMenu ); 1805 mActionPrint->plug( fileMenu );
1806 mActionMail->plug( fileMenu ); 1806 mActionMail->plug( fileMenu );
1807 fileMenu->insertSeparator(); 1807 fileMenu->insertSeparator();
1808 1808
1809 mActionNewContact->plug( fileMenu ); 1809 mActionNewContact->plug( fileMenu );
1810 mActionNewContact->plug( tb ); 1810 mActionNewContact->plug( tb );
1811 1811
1812 mActionEditAddressee->plug( fileMenu ); 1812 mActionEditAddressee->plug( fileMenu );
1813 if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 1813 if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1814 (!KABPrefs::instance()->mMultipleViewsAtOnce )) 1814 (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1815 mActionEditAddressee->plug( tb ); 1815 mActionEditAddressee->plug( tb );
1816 1816
1817 fileMenu->insertSeparator(); 1817 fileMenu->insertSeparator();
1818 mActionSave->plug( fileMenu ); 1818 mActionSave->plug( fileMenu );
1819 fileMenu->insertItem( "&Import", ImportMenu ); 1819 fileMenu->insertItem( "&Import", ImportMenu );
1820 fileMenu->insertItem( "&Export", ExportMenu ); 1820 fileMenu->insertItem( "&Export", ExportMenu );
1821 fileMenu->insertSeparator(); 1821 fileMenu->insertSeparator();
1822 mActionMailVCard->plug( fileMenu ); 1822 mActionMailVCard->plug( fileMenu );
1823#ifndef DESKTOP_VERSION 1823#ifndef DESKTOP_VERSION
1824 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 1824 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
1825 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 1825 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
1826#endif 1826#endif
1827 fileMenu->insertSeparator(); 1827 fileMenu->insertSeparator();
1828 mActionQuit->plug( fileMenu ); 1828 mActionQuit->plug( fileMenu );
1829#ifdef _WIN32_ 1829#ifdef _WIN32_
1830 mActionImportOL->plug( ImportMenu ); 1830 mActionImportOL->plug( ImportMenu );
1831#endif 1831#endif
1832 // edit menu 1832 // edit menu
1833 mActionUndo->plug( editMenu ); 1833 mActionUndo->plug( editMenu );
1834 mActionRedo->plug( editMenu ); 1834 mActionRedo->plug( editMenu );
1835 editMenu->insertSeparator(); 1835 editMenu->insertSeparator();
1836 mActionCut->plug( editMenu ); 1836 mActionCut->plug( editMenu );
1837 mActionCopy->plug( editMenu ); 1837 mActionCopy->plug( editMenu );
1838 mActionPaste->plug( editMenu ); 1838 mActionPaste->plug( editMenu );
1839 mActionDelete->plug( editMenu ); 1839 mActionDelete->plug( editMenu );
1840 editMenu->insertSeparator(); 1840 editMenu->insertSeparator();
1841 mActionSelectAll->plug( editMenu ); 1841 mActionSelectAll->plug( editMenu );
1842 1842
1843 mActionRemoveVoice->plug( changeMenu ); 1843 mActionRemoveVoice->plug( changeMenu );
1844 // settings menu 1844 // settings menu
1845//US special menuentry to configure the addressbook resources. On KDE 1845//US special menuentry to configure the addressbook resources. On KDE
1846// you do that through the control center !!! 1846// you do that through the control center !!!
1847 mActionConfigResources->plug( settingsMenu ); 1847 mActionConfigResources->plug( settingsMenu );
1848 settingsMenu->insertSeparator(); 1848 settingsMenu->insertSeparator();
1849 1849
1850 mActionConfigKAddressbook->plug( settingsMenu ); 1850 mActionConfigKAddressbook->plug( settingsMenu );
1851 1851
1852 if ( mIsPart ) { 1852 if ( mIsPart ) {
1853 mActionConfigShortcuts->plug( settingsMenu ); 1853 mActionConfigShortcuts->plug( settingsMenu );
1854 mActionConfigureToolbars->plug( settingsMenu ); 1854 mActionConfigureToolbars->plug( settingsMenu );
1855 1855
1856 } else { 1856 } else {
1857 mActionKeyBindings->plug( settingsMenu ); 1857 mActionKeyBindings->plug( settingsMenu );
1858 } 1858 }
1859 1859
1860 settingsMenu->insertSeparator(); 1860 settingsMenu->insertSeparator();
1861 1861
1862 mActionJumpBar->plug( settingsMenu ); 1862 mActionJumpBar->plug( settingsMenu );
1863 mActionDetails->plug( settingsMenu ); 1863 mActionDetails->plug( settingsMenu );
1864 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 1864 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
1865 mActionDetails->plug( tb ); 1865 mActionDetails->plug( tb );
1866 settingsMenu->insertSeparator(); 1866 settingsMenu->insertSeparator();
1867 1867
1868 mActionWhoAmI->plug( settingsMenu ); 1868 mActionWhoAmI->plug( settingsMenu );
1869 mActionCategories->plug( settingsMenu ); 1869 mActionCategories->plug( settingsMenu );
1870 1870
1871 mActionLicence->plug( helpMenu ); 1871 mActionLicence->plug( helpMenu );
1872 mActionFaq->plug( helpMenu ); 1872 mActionFaq->plug( helpMenu );
1873 mActionAboutKAddressbook->plug( helpMenu ); 1873 mActionAboutKAddressbook->plug( helpMenu );
1874 1874
1875 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1875 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
1876 1876
1877 mActionSave->plug( tb ); 1877 mActionSave->plug( tb );
1878 mViewManager->getFilterAction()->plug ( tb); 1878 mViewManager->getFilterAction()->plug ( tb);
1879 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 1879 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
1880 mActionUndo->plug( tb ); 1880 mActionUndo->plug( tb );
1881 mActionDelete->plug( tb ); 1881 mActionDelete->plug( tb );
1882 mActionRedo->plug( tb ); 1882 mActionRedo->plug( tb );
1883 } 1883 }
1884 } 1884 }
1885 //mActionQuit->plug ( tb ); 1885 //mActionQuit->plug ( tb );
1886 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 1886 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
1887 1887
1888 //US link the searchwidget first to this. 1888 //US link the searchwidget first to this.
1889 // The real linkage to the toolbar happens later. 1889 // The real linkage to the toolbar happens later.
1890//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 1890//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
1891//US tb->insertItem( mIncSearchWidget ); 1891//US tb->insertItem( mIncSearchWidget );
1892/*US 1892/*US
1893 mIncSearchWidget = new IncSearchWidget( tb ); 1893 mIncSearchWidget = new IncSearchWidget( tb );
1894 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1894 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1895 SLOT( incrementalSearch( const QString& ) ) ); 1895 SLOT( incrementalSearch( const QString& ) ) );
1896 1896
1897 mJumpButtonBar = new JumpButtonBar( this, this ); 1897 mJumpButtonBar = new JumpButtonBar( this, this );
1898 1898
1899//US topLayout->addWidget( mJumpButtonBar ); 1899//US topLayout->addWidget( mJumpButtonBar );
1900 this->layout()->add( mJumpButtonBar ); 1900 this->layout()->add( mJumpButtonBar );
1901*/ 1901*/
1902 1902
1903#endif //KAB_EMBEDDED 1903#endif //KAB_EMBEDDED
1904 1904
1905 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) ); 1905 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) );
1906 fillSyncMenu(); 1906 fillSyncMenu();
1907 1907
1908} 1908}
1909void KABCore::showLicence() 1909void KABCore::showLicence()
1910{ 1910{
1911 KApplication::showLicence(); 1911 KApplication::showLicence();
1912} 1912}
1913void KABCore::removeVoice() 1913void KABCore::removeVoice()
1914{ 1914{
1915 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 1915 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
1916 return; 1916 return;
1917 KABC::Addressee::List list = mViewManager->selectedAddressees(); 1917 KABC::Addressee::List list = mViewManager->selectedAddressees();
1918 KABC::Addressee::List::Iterator it; 1918 KABC::Addressee::List::Iterator it;
1919 for ( it = list.begin(); it != list.end(); ++it ) { 1919 for ( it = list.begin(); it != list.end(); ++it ) {
1920 PhoneNumber::List phoneNumbers = (*it).phoneNumbers(); 1920 PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
1921 PhoneNumber::List::Iterator phoneIt; 1921 PhoneNumber::List::Iterator phoneIt;
1922 bool found = false; 1922 bool found = false;
1923 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { 1923 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
1924 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 1924 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
1925 if ((*phoneIt).type() - PhoneNumber::Voice ) { 1925 if ((*phoneIt).type() - PhoneNumber::Voice ) {
1926 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 1926 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
1927 (*it).insertPhoneNumber( (*phoneIt) ); 1927 (*it).insertPhoneNumber( (*phoneIt) );
1928 found = true; 1928 found = true;
1929 } 1929 }
1930 } 1930 }
1931 1931
1932 } 1932 }
1933 if ( found ) 1933 if ( found )
1934 contactModified((*it) ); 1934 contactModified((*it) );
1935 } 1935 }
1936} 1936}
1937 1937
1938 1938
1939 1939
1940void KABCore::clipboardDataChanged() 1940void KABCore::clipboardDataChanged()
1941{ 1941{
1942 1942
1943 if ( mReadWrite ) 1943 if ( mReadWrite )
1944 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 1944 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
1945 1945
1946} 1946}
1947 1947
1948void KABCore::updateActionMenu() 1948void KABCore::updateActionMenu()
1949{ 1949{
1950 UndoStack *undo = UndoStack::instance(); 1950 UndoStack *undo = UndoStack::instance();
1951 RedoStack *redo = RedoStack::instance(); 1951 RedoStack *redo = RedoStack::instance();
1952 1952
1953 if ( undo->isEmpty() ) 1953 if ( undo->isEmpty() )
1954 mActionUndo->setText( i18n( "Undo" ) ); 1954 mActionUndo->setText( i18n( "Undo" ) );
1955 else 1955 else
1956 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 1956 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
1957 1957
1958 mActionUndo->setEnabled( !undo->isEmpty() ); 1958 mActionUndo->setEnabled( !undo->isEmpty() );
1959 1959
1960 if ( !redo->top() ) 1960 if ( !redo->top() )
1961 mActionRedo->setText( i18n( "Redo" ) ); 1961 mActionRedo->setText( i18n( "Redo" ) );
1962 else 1962 else
1963 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 1963 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
1964 1964
1965 mActionRedo->setEnabled( !redo->isEmpty() ); 1965 mActionRedo->setEnabled( !redo->isEmpty() );
1966} 1966}
1967 1967
1968void KABCore::configureKeyBindings() 1968void KABCore::configureKeyBindings()
1969{ 1969{
1970#ifndef KAB_EMBEDDED 1970#ifndef KAB_EMBEDDED
1971 KKeyDialog::configure( actionCollection(), true ); 1971 KKeyDialog::configure( actionCollection(), true );
1972#else //KAB_EMBEDDED 1972#else //KAB_EMBEDDED
1973 qDebug("KABCore::configureKeyBindings() not implemented"); 1973 qDebug("KABCore::configureKeyBindings() not implemented");
1974#endif //KAB_EMBEDDED 1974#endif //KAB_EMBEDDED
1975} 1975}
1976 1976
1977#ifdef KAB_EMBEDDED 1977#ifdef KAB_EMBEDDED
1978void KABCore::configureResources() 1978void KABCore::configureResources()
1979{ 1979{
1980 KRES::KCMKResources dlg( this, "" , 0 ); 1980 KRES::KCMKResources dlg( this, "" , 0 );
1981 1981
1982 if ( !dlg.exec() ) 1982 if ( !dlg.exec() )
1983 return; 1983 return;
1984 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 1984 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
1985} 1985}
1986#endif //KAB_EMBEDDED 1986#endif //KAB_EMBEDDED
1987 1987
1988 1988
1989/* this method will be called through the QCop interface from Ko/Pi to select addresses 1989/* this method will be called through the QCop interface from Ko/Pi to select addresses
1990 * for the attendees list of an event. 1990 * for the attendees list of an event.
1991 */ 1991 */
1992void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 1992void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
1993{ 1993{
1994 QStringList nameList; 1994 QStringList nameList;
1995 QStringList emailList; 1995 QStringList emailList;
1996 QStringList uidList; 1996 QStringList uidList;
1997 1997
1998 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 1998 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
1999 uint i=0; 1999 uint i=0;
2000 for (i=0; i < list.count(); i++) 2000 for (i=0; i < list.count(); i++)
2001 { 2001 {
2002 nameList.append(list[i].realName()); 2002 nameList.append(list[i].realName());
2003 emailList.append(list[i].preferredEmail()); 2003 emailList.append(list[i].preferredEmail());
2004 uidList.append(list[i].uid()); 2004 uidList.append(list[i].uid());
2005 } 2005 }
2006 2006
2007 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2007 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2008 2008
2009} 2009}
2010 2010
2011/* this method will be called through the QCop interface from other apps to show details of a contact. 2011/* this method will be called through the QCop interface from other apps to show details of a contact.
2012 */ 2012 */
2013void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2013void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2014{ 2014{
2015 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2015 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2016 2016
2017 QString foundUid = QString::null; 2017 QString foundUid = QString::null;
2018 if ( ! uid.isEmpty() ) { 2018 if ( ! uid.isEmpty() ) {
2019 Addressee adrr = mAddressBook->findByUid( uid ); 2019 Addressee adrr = mAddressBook->findByUid( uid );
2020 if ( !adrr.isEmpty() ) { 2020 if ( !adrr.isEmpty() ) {
2021 foundUid = uid; 2021 foundUid = uid;
2022 } 2022 }
2023 if ( email == "sendbacklist" ) { 2023 if ( email == "sendbacklist" ) {
2024 //qDebug("ssssssssssssssssssssssend "); 2024 //qDebug("ssssssssssssssssssssssend ");
2025 QStringList nameList; 2025 QStringList nameList;
2026 QStringList emailList; 2026 QStringList emailList;
2027 QStringList uidList; 2027 QStringList uidList;
2028 nameList.append(adrr.realName()); 2028 nameList.append(adrr.realName());
2029 emailList = adrr.emails(); 2029 emailList = adrr.emails();
2030 uidList.append( adrr.preferredEmail()); 2030 uidList.append( adrr.preferredEmail());
2031 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2031 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2032 return; 2032 return;
2033 } 2033 }
2034 2034
2035 } 2035 }
2036 2036
2037 if ( email == "sendbacklist" ) 2037 if ( email == "sendbacklist" )
2038 return; 2038 return;
2039 if (foundUid.isEmpty()) 2039 if (foundUid.isEmpty())
2040 { 2040 {
2041 //find the uid of the person first 2041 //find the uid of the person first
2042 Addressee::List namelist; 2042 Addressee::List namelist;
2043 Addressee::List emaillist; 2043 Addressee::List emaillist;
2044 2044
2045 if (!name.isEmpty()) 2045 if (!name.isEmpty())
2046 namelist = mAddressBook->findByName( name ); 2046 namelist = mAddressBook->findByName( name );
2047 2047
2048 if (!email.isEmpty()) 2048 if (!email.isEmpty())
2049 emaillist = mAddressBook->findByEmail( email ); 2049 emaillist = mAddressBook->findByEmail( email );
2050 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2050 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2051 //check if we have a match in Namelist and Emaillist 2051 //check if we have a match in Namelist and Emaillist
2052 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2052 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2053 foundUid = emaillist[0].uid(); 2053 foundUid = emaillist[0].uid();
2054 } 2054 }
2055 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2055 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2056 foundUid = namelist[0].uid(); 2056 foundUid = namelist[0].uid();
2057 else 2057 else
2058 { 2058 {
2059 for (int i = 0; i < namelist.count(); i++) 2059 for (int i = 0; i < namelist.count(); i++)
2060 { 2060 {
2061 for (int j = 0; j < emaillist.count(); j++) 2061 for (int j = 0; j < emaillist.count(); j++)
2062 { 2062 {
2063 if (namelist[i] == emaillist[j]) 2063 if (namelist[i] == emaillist[j])
2064 { 2064 {
2065 foundUid = namelist[i].uid(); 2065 foundUid = namelist[i].uid();
2066 } 2066 }
2067 } 2067 }
2068 } 2068 }
2069 } 2069 }
2070 } 2070 }
2071 else 2071 else
2072 { 2072 {
2073 foundUid = uid; 2073 foundUid = uid;
2074 } 2074 }
2075 2075
2076 if (!foundUid.isEmpty()) 2076 if (!foundUid.isEmpty())
2077 { 2077 {
2078 2078
2079 // raise Ka/Pi if it is in the background 2079 // raise Ka/Pi if it is in the background
2080#ifndef DESKTOP_VERSION 2080#ifndef DESKTOP_VERSION
2081#ifndef KORG_NODCOP 2081#ifndef KORG_NODCOP
2082 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2082 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2083#endif 2083#endif
2084#endif 2084#endif
2085 2085
2086 mMainWindow->showMaximized(); 2086 mMainWindow->showMaximized();
2087 mMainWindow-> raise(); 2087 mMainWindow-> raise();
2088 2088
2089 mViewManager->setSelected( "", false); 2089 mViewManager->setSelected( "", false);
2090 mViewManager->refreshView( "" ); 2090 mViewManager->refreshView( "" );
2091 mViewManager->setSelected( foundUid, true ); 2091 mViewManager->setSelected( foundUid, true );
2092 mViewManager->refreshView( foundUid ); 2092 mViewManager->refreshView( foundUid );
2093 2093
2094 if ( !mMultipleViewsAtOnce ) 2094 if ( !mMultipleViewsAtOnce )
2095 { 2095 {
2096 setDetailsVisible( true ); 2096 setDetailsVisible( true );
2097 mActionDetails->setChecked(true); 2097 mActionDetails->setChecked(true);
2098 } 2098 }
2099 } 2099 }
2100} 2100}
2101 2101
2102 2102
2103void KABCore::faq() 2103void KABCore::faq()
2104{ 2104{
2105 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2105 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2106} 2106}
2107 2107
2108 2108
2109void KABCore::fillSyncMenu() 2109void KABCore::fillSyncMenu()
2110{ 2110{
2111 if ( syncMenu->count() ) 2111 if ( syncMenu->count() )
2112 syncMenu->clear(); 2112 syncMenu->clear();
2113 syncMenu->insertItem( i18n("Configure..."), 0 ); 2113 syncMenu->insertItem( i18n("Configure..."), 0 );
2114 syncMenu->insertSeparator(); 2114 syncMenu->insertSeparator();
2115 syncMenu->insertItem( i18n("Multiple sync"), 1 ); 2115 syncMenu->insertItem( i18n("Multiple sync"), 1 );
2116 syncMenu->insertSeparator(); 2116 syncMenu->insertSeparator();
2117 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2117 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2118 config.setGroup("General"); 2118 config.setGroup("General");
2119 QStringList prof = config.readListEntry("SyncProfileNames"); 2119 QStringList prof = config.readListEntry("SyncProfileNames");
2120 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 2120 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
2121 if ( prof.count() < 3 ) { 2121 if ( prof.count() < 3 ) {
2122 prof.clear(); 2122 prof.clear();
2123 prof << i18n("Sharp_DTM"); 2123 prof << i18n("Sharp_DTM");
2124 prof << i18n("Local_file"); 2124 prof << i18n("Local_file");
2125 prof << i18n("Last_file"); 2125 prof << i18n("Last_file");
2126 KSyncProfile* temp = new KSyncProfile (); 2126 KSyncProfile* temp = new KSyncProfile ();
2127 temp->setName( prof[0] ); 2127 temp->setName( prof[0] );
2128 temp->writeConfig(&config); 2128 temp->writeConfig(&config);
2129 temp->setName( prof[1] ); 2129 temp->setName( prof[1] );
2130 temp->writeConfig(&config); 2130 temp->writeConfig(&config);
2131 temp->setName( prof[2] ); 2131 temp->setName( prof[2] );
2132 temp->writeConfig(&config); 2132 temp->writeConfig(&config);
2133 config.setGroup("General"); 2133 config.setGroup("General");
2134 config.writeEntry("SyncProfileNames",prof); 2134 config.writeEntry("SyncProfileNames",prof);
2135 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 2135 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
2136 config.sync(); 2136 config.sync();
2137 delete temp; 2137 delete temp;
2138 } 2138 }
2139 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 2139 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
2140 KABPrefs::instance()->mSyncProfileNames = prof; 2140 KABPrefs::instance()->mSyncProfileNames = prof;
2141 int i; 2141 int i;
2142 for ( i = 0; i < prof.count(); ++i ) { 2142 for ( i = 0; i < prof.count(); ++i ) {
2143 2143
2144 syncMenu->insertItem( prof[i], 1000+i ); 2144 syncMenu->insertItem( prof[i], 1000+i );
2145 if ( i == 2 ) 2145 if ( i == 2 )
2146 syncMenu->insertSeparator(); 2146 syncMenu->insertSeparator();
2147 } 2147 }
2148 QDir app_dir; 2148 QDir app_dir;
2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
2150 syncMenu->setItemEnabled( false , 1000 ); 2150 syncMenu->setItemEnabled( false , 1000 );
2151 } 2151 }
2152 //probaly useless 2152 //probaly useless
2153 //mView->setupExternSyncProfiles(); 2153 //mView->setupExternSyncProfiles();
2154} 2154}
2155void KABCore::slotSyncMenu( int action ) 2155void KABCore::slotSyncMenu( int action )
2156{ 2156{
2157 //qDebug("syncaction %d ", action); 2157 //qDebug("syncaction %d ", action);
2158 if ( action == 0 ) { 2158 if ( action == 0 ) {
2159 2159
2160 // seems to be a Qt2 event handling bug 2160 // seems to be a Qt2 event handling bug
2161 // syncmenu.clear causes a segfault at first time 2161 // syncmenu.clear causes a segfault at first time
2162 // when we call it after the main event loop, it is ok 2162 // when we call it after the main event loop, it is ok
2163 // same behaviour when calling OM/Pi via QCOP for the first time 2163 // same behaviour when calling OM/Pi via QCOP for the first time
2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
2165 //confSync(); 2165 //confSync();
2166 2166
2167 return; 2167 return;
2168 } 2168 }
2169 if ( action == 1 ) { 2169 if ( action == 1 ) {
2170 multiSync( true ); 2170 multiSync( true );
2171 return; 2171 return;
2172 } 2172 }
2173 2173
2174 if (mBlockSaveFlag) 2174 if (mBlockSaveFlag)
2175 return; 2175 return;
2176 mBlockSaveFlag = true; 2176 mBlockSaveFlag = true;
2177 mCurrentSyncProfile = action - 1000 ; 2177 mCurrentSyncProfile = action - 1000 ;
2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ; 2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ; 2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2181 KSyncProfile* temp = new KSyncProfile (); 2181 KSyncProfile* temp = new KSyncProfile ();
2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2183 temp->readConfig(&config); 2183 temp->readConfig(&config);
2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2188 KABPrefs::instance()->mWriteBackInFuture = 0; 2188 KABPrefs::instance()->mWriteBackInFuture = 0;
2189 if ( temp->getWriteBackFuture() ) 2189 if ( temp->getWriteBackFuture() )
2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
2192 if ( action == 1000 ) { 2192 if ( action == 1000 ) {
2193 syncSharp(); 2193 syncSharp();
2194 2194
2195 } else if ( action == 1001 ) { 2195 } else if ( action == 1001 ) {
2196 syncLocalFile(); 2196 syncLocalFile();
2197 2197
2198 } else if ( action == 1002 ) { 2198 } else if ( action == 1002 ) {
2199 quickSyncLocalFile(); 2199 quickSyncLocalFile();
2200 2200
2201 } else if ( action >= 1003 ) { 2201 } else if ( action >= 1003 ) {
2202 if ( temp->getIsLocalFileSync() ) { 2202 if ( temp->getIsLocalFileSync() ) {
2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2205 } else { 2205 } else {
2206 if ( temp->getIsPhoneSync() ) { 2206 if ( temp->getIsPhoneSync() ) {
2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2210 syncPhone(); 2210 syncPhone();
2211 } else 2211 } else
2212 syncRemote( temp ); 2212 syncRemote( temp );
2213 2213
2214 } 2214 }
2215 } 2215 }
2216 delete temp; 2216 delete temp;
2217 mBlockSaveFlag = false; 2217 mBlockSaveFlag = false;
2218} 2218}
2219 2219
2220void KABCore::syncLocalFile() 2220void KABCore::syncLocalFile()
2221{ 2221{
2222 2222
2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile; 2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
2224 2224
2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
2226 if ( fn == "" ) 2226 if ( fn == "" )
2227 return; 2227 return;
2228 if ( syncWithFile( fn, false ) ) { 2228 if ( syncWithFile( fn, false ) ) {
2229 qDebug("syncLocalFile() successful "); 2229 qDebug("syncLocalFile() successful ");
2230 } 2230 }
2231 2231
2232} 2232}
2233bool KABCore::syncWithFile( QString fn , bool quick ) 2233bool KABCore::syncWithFile( QString fn , bool quick )
2234{ 2234{
2235 bool ret = false; 2235 bool ret = false;
2236 QFileInfo info; 2236 QFileInfo info;
2237 info.setFile( fn ); 2237 info.setFile( fn );
2238 QString mess; 2238 QString mess;
2239 bool loadbup = true; 2239 bool loadbup = true;
2240 if ( !info. exists() ) { 2240 if ( !info. exists() ) {
2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2243 mess ); 2243 mess );
2244 return ret; 2244 return ret;
2245 } 2245 }
2246 int result = 0; 2246 int result = 0;
2247 if ( !quick ) { 2247 if ( !quick ) {
2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2250 mess, 2250 mess,
2251 i18n("Sync"), i18n("Cancel"), 0, 2251 i18n("Sync"), i18n("Cancel"), 0,
2252 0, 1 ); 2252 0, 1 );
2253 if ( result ) 2253 if ( result )
2254 return false; 2254 return false;
2255 } 2255 }
2256 if ( KABPrefs::instance()->mAskForPreferences ) 2256 if ( KABPrefs::instance()->mAskForPreferences )
2257 edit_sync_options(); 2257 edit_sync_options();
2258 if ( result == 0 ) { 2258 if ( result == 0 ) {
2259 //qDebug("Now sycing ... "); 2259 //qDebug("Now sycing ... ");
2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) ) 2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
2261 setCaption( i18n("Synchronization successful") ); 2261 setCaption( i18n("Synchronization successful") );
2262 else 2262 else
2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
2264 if ( ! quick ) 2264 if ( ! quick )
2265 KABPrefs::instance()->mLastSyncedLocalFile = fn; 2265 KABPrefs::instance()->mLastSyncedLocalFile = fn;
2266 setModified(); 2266 setModified();
2267 } 2267 }
2268 return ret; 2268 return ret;
2269} 2269}
2270void KABCore::quickSyncLocalFile() 2270void KABCore::quickSyncLocalFile()
2271{ 2271{
2272 2272
2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) { 2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
2274 qDebug("quick syncLocalFile() successful "); 2274 qDebug("quick syncLocalFile() successful ");
2275 2275
2276 } 2276 }
2277} 2277}
2278void KABCore::multiSync( bool askforPrefs ) 2278void KABCore::multiSync( bool askforPrefs )
2279{ 2279{
2280 if (mBlockSaveFlag) 2280 if (mBlockSaveFlag)
2281 return; 2281 return;
2282 mBlockSaveFlag = true; 2282 mBlockSaveFlag = true;
2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2285 question, 2285 question,
2286 i18n("Yes"), i18n("No"), 2286 i18n("Yes"), i18n("No"),
2287 0, 0 ) != 0 ) { 2287 0, 0 ) != 0 ) {
2288 mBlockSaveFlag = false; 2288 mBlockSaveFlag = false;
2289 setCaption(i18n("Aborted! Nothing synced!")); 2289 setCaption(i18n("Aborted! Nothing synced!"));
2290 return; 2290 return;
2291 } 2291 }
2292 mCurrentSyncDevice = i18n("Multiple profiles") ; 2292 mCurrentSyncDevice = i18n("Multiple profiles") ;
2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs; 2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
2294 if ( askforPrefs ) { 2294 if ( askforPrefs ) {
2295 edit_sync_options(); 2295 edit_sync_options();
2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs; 2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
2297 } 2297 }
2298 setCaption(i18n("Multiple sync started.") ); 2298 setCaption(i18n("Multiple sync started.") );
2299 qApp->processEvents(); 2299 qApp->processEvents();
2300 int num = ringSync() ; 2300 int num = ringSync() ;
2301 if ( num > 1 ) 2301 if ( num > 1 )
2302 ringSync(); 2302 ringSync();
2303 mBlockSaveFlag = false; 2303 mBlockSaveFlag = false;
2304 if ( num ) 2304 if ( num )
2305 save(); 2305 save();
2306 if ( num ) 2306 if ( num )
2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
2308 else 2308 else
2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
2310 return; 2310 return;
2311} 2311}
2312int KABCore::ringSync() 2312int KABCore::ringSync()
2313{ 2313{
2314 int syncedProfiles = 0; 2314 int syncedProfiles = 0;
2315 int i; 2315 int i;
2316 QTime timer; 2316 QTime timer;
2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames; 2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
2319 KSyncProfile* temp = new KSyncProfile (); 2319 KSyncProfile* temp = new KSyncProfile ();
2320 KABPrefs::instance()->mAskForPreferences = false; 2320 KABPrefs::instance()->mAskForPreferences = false;
2321 for ( i = 0; i < syncProfileNames.count(); ++i ) { 2321 for ( i = 0; i < syncProfileNames.count(); ++i ) {
2322 mCurrentSyncProfile = i; 2322 mCurrentSyncProfile = i;
2323 temp->setName(syncProfileNames[mCurrentSyncProfile]); 2323 temp->setName(syncProfileNames[mCurrentSyncProfile]);
2324 temp->readConfig(&config); 2324 temp->readConfig(&config);
2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
2327 ++syncedProfiles; 2327 ++syncedProfiles;
2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2331 KABPrefs::instance()->mWriteBackInFuture = 0; 2331 KABPrefs::instance()->mWriteBackInFuture = 0;
2332 if ( temp->getWriteBackFuture() ) 2332 if ( temp->getWriteBackFuture() )
2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2334 KABPrefs::instance()->mShowSyncSummary = false; 2334 KABPrefs::instance()->mShowSyncSummary = false;
2335 mCurrentSyncDevice = syncProfileNames[i] ; 2335 mCurrentSyncDevice = syncProfileNames[i] ;
2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName; 2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
2337 if ( i == 0 ) { 2337 if ( i == 0 ) {
2338 syncSharp(); 2338 syncSharp();
2339 } else { 2339 } else {
2340 if ( temp->getIsLocalFileSync() ) { 2340 if ( temp->getIsLocalFileSync() ) {
2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2343 } else { 2343 } else {
2344 if ( temp->getIsPhoneSync() ) { 2344 if ( temp->getIsPhoneSync() ) {
2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2348 syncPhone(); 2348 syncPhone();
2349 } else 2349 } else
2350 syncRemote( temp, false ); 2350 syncRemote( temp, false );
2351 2351
2352 } 2352 }
2353 } 2353 }
2354 timer.start(); 2354 timer.start();
2355 setCaption(i18n("Multiple sync in progress ... please wait!") ); 2355 setCaption(i18n("Multiple sync in progress ... please wait!") );
2356 while ( timer.elapsed () < 2000 ) { 2356 while ( timer.elapsed () < 2000 ) {
2357 qApp->processEvents(); 2357 qApp->processEvents();
2358#ifndef _WIN32_ 2358#ifndef _WIN32_
2359 sleep (1); 2359 sleep (1);
2360#endif 2360#endif
2361 } 2361 }
2362 2362
2363 } 2363 }
2364 2364
2365 } 2365 }
2366 delete temp; 2366 delete temp;
2367 return syncedProfiles; 2367 return syncedProfiles;
2368} 2368}
2369 2369
2370void KABCore::syncRemote( KSyncProfile* prof, bool ask) 2370void KABCore::syncRemote( KSyncProfile* prof, bool ask)
2371{ 2371{
2372 QString question; 2372 QString question;
2373 if ( ask ) { 2373 if ( ask ) {
2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2376 question, 2376 question,
2377 i18n("Yes"), i18n("No"), 2377 i18n("Yes"), i18n("No"),
2378 0, 0 ) != 0 ) 2378 0, 0 ) != 0 )
2379 return; 2379 return;
2380 } 2380 }
2381 QString command = prof->getPreSyncCommandAB(); 2381 QString command = prof->getPreSyncCommandAB();
2382 int fi; 2382 int fi;
2383 if ( (fi = command.find("$PWD$")) > 0 ) { 2383 if ( (fi = command.find("$PWD$")) > 0 ) {
2384 QString pwd = getPassword(); 2384 QString pwd = getPassword();
2385 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2385 command = command.left( fi )+ pwd + command.mid( fi+5 );
2386 2386
2387 } 2387 }
2388 int maxlen = 30; 2388 int maxlen = 30;
2389 if ( QApplication::desktop()->width() > 320 ) 2389 if ( QApplication::desktop()->width() > 320 )
2390 maxlen += 25; 2390 maxlen += 25;
2391 setCaption ( i18n( "Copy remote file to local machine..." ) ); 2391 setCaption ( i18n( "Copy remote file to local machine..." ) );
2392 int fileSize = 0; 2392 int fileSize = 0;
2393 int result = system ( command ); 2393 int result = system ( command );
2394 // 0 : okay 2394 // 0 : okay
2395 // 256: no such file or dir 2395 // 256: no such file or dir
2396 // 2396 //
2397 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 2397 qDebug("KO: Remote copy result(0 = okay): %d ",result );
2398 if ( result != 0 ) { 2398 if ( result != 0 ) {
2399 int len = maxlen; 2399 int len = maxlen;
2400 while ( len < command.length() ) { 2400 while ( len < command.length() ) {
2401 command.insert( len , "\n" ); 2401 command.insert( len , "\n" );
2402 len += maxlen +2; 2402 len += maxlen +2;
2403 } 2403 }
2404 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ; 2404 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ;
2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), 2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
2406 question, 2406 question,
2407 i18n("Okay!")) ; 2407 i18n("Okay!")) ;
2408 setCaption ("KO/Pi"); 2408 setCaption ("KO/Pi");
2409 return; 2409 return;
2410 } 2410 }
2411 setCaption ( i18n( "Copying succeed." ) ); 2411 setCaption ( i18n( "Copying succeed." ) );
2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
2414// Event* e = mView->getLastSyncEvent(); 2414// Event* e = mView->getLastSyncEvent();
2415// e->setReadOnly( false ); 2415// e->setReadOnly( false );
2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2417// e->setReadOnly( true ); 2417// e->setReadOnly( true );
2418 if ( KABPrefs::instance()->mWriteBackFile ) { 2418 if ( KABPrefs::instance()->mWriteBackFile ) {
2419 command = prof->getPostSyncCommandAB(); 2419 command = prof->getPostSyncCommandAB();
2420 int fi; 2420 int fi;
2421 if ( (fi = command.find("$PWD$")) > 0 ) { 2421 if ( (fi = command.find("$PWD$")) > 0 ) {
2422 QString pwd = getPassword(); 2422 QString pwd = getPassword();
2423 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2423 command = command.left( fi )+ pwd + command.mid( fi+5 );
2424 2424
2425 } 2425 }
2426 setCaption ( i18n( "Writing back file ..." ) ); 2426 setCaption ( i18n( "Writing back file ..." ) );
2427 result = system ( command ); 2427 result = system ( command );
2428 qDebug("KO: Writing back file result: %d ", result); 2428 qDebug("KO: Writing back file result: %d ", result);
2429 if ( result != 0 ) { 2429 if ( result != 0 ) {
2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
2431 return; 2431 return;
2432 } else { 2432 } else {
2433 setCaption ( i18n( "Syncronization sucessfully completed" ) ); 2433 setCaption ( i18n( "Syncronization sucessfully completed" ) );
2434 } 2434 }
2435 } 2435 }
2436 } 2436 }
2437 return; 2437 return;
2438} 2438}
2439#include <qpushbutton.h> 2439#include <qpushbutton.h>
2440#include <qradiobutton.h> 2440#include <qradiobutton.h>
2441#include <qbuttongroup.h> 2441#include <qbuttongroup.h>
2442void KABCore::edit_sync_options() 2442void KABCore::edit_sync_options()
2443{ 2443{
2444 //mDialogManager->showSyncOptions(); 2444 //mDialogManager->showSyncOptions();
2445 //KABPrefs::instance()->mSyncAlgoPrefs 2445 //KABPrefs::instance()->mSyncAlgoPrefs
2446 QDialog dia( this, "dia", true ); 2446 QDialog dia( this, "dia", true );
2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2449 QVBoxLayout lay ( &dia ); 2449 QVBoxLayout lay ( &dia );
2450 lay.setSpacing( 2 ); 2450 lay.setSpacing( 2 );
2451 lay.setMargin( 3 ); 2451 lay.setMargin( 3 );
2452 lay.addWidget(&gr); 2452 lay.addWidget(&gr);
2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2459 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2459 //QRadioButton both( i18n("Take both on conflict"), &gr );
2460 QPushButton pb ( "OK", &dia); 2460 QPushButton pb ( "OK", &dia);
2461 lay.addWidget( &pb ); 2461 lay.addWidget( &pb );
2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) { 2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
2464 case 0: 2464 case 0:
2465 loc.setChecked( true); 2465 loc.setChecked( true);
2466 break; 2466 break;
2467 case 1: 2467 case 1:
2468 rem.setChecked( true ); 2468 rem.setChecked( true );
2469 break; 2469 break;
2470 case 2: 2470 case 2:
2471 newest.setChecked( true); 2471 newest.setChecked( true);
2472 break; 2472 break;
2473 case 3: 2473 case 3:
2474 ask.setChecked( true); 2474 ask.setChecked( true);
2475 break; 2475 break;
2476 case 4: 2476 case 4:
2477 f_loc.setChecked( true); 2477 f_loc.setChecked( true);
2478 break; 2478 break;
2479 case 5: 2479 case 5:
2480 f_rem.setChecked( true); 2480 f_rem.setChecked( true);
2481 break; 2481 break;
2482 case 6: 2482 case 6:
2483 // both.setChecked( true); 2483 // both.setChecked( true);
2484 break; 2484 break;
2485 default: 2485 default:
2486 break; 2486 break;
2487 } 2487 }
2488 if ( dia.exec() ) { 2488 if ( dia.exec() ) {
2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2490 } 2490 }
2491 2491
2492 2492
2493} 2493}
2494QString KABCore::getPassword( ) 2494QString KABCore::getPassword( )
2495{ 2495{
2496 QString retfile = ""; 2496 QString retfile = "";
2497 QDialog dia ( this, "input-dialog", true ); 2497 QDialog dia ( this, "input-dialog", true );
2498 QLineEdit lab ( &dia ); 2498 QLineEdit lab ( &dia );
2499 lab.setEchoMode( QLineEdit::Password ); 2499 lab.setEchoMode( QLineEdit::Password );
2500 QVBoxLayout lay( &dia ); 2500 QVBoxLayout lay( &dia );
2501 lay.setMargin(7); 2501 lay.setMargin(7);
2502 lay.setSpacing(7); 2502 lay.setSpacing(7);
2503 lay.addWidget( &lab); 2503 lay.addWidget( &lab);
2504 dia.setFixedSize( 230,50 ); 2504 dia.setFixedSize( 230,50 );
2505 dia.setCaption( i18n("Enter password") ); 2505 dia.setCaption( i18n("Enter password") );
2506 QPushButton pb ( "OK", &dia); 2506 QPushButton pb ( "OK", &dia);
2507 lay.addWidget( &pb ); 2507 lay.addWidget( &pb );
2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2509 dia.show(); 2509 dia.show();
2510 int res = dia.exec(); 2510 int res = dia.exec();
2511 if ( res ) 2511 if ( res )
2512 retfile = lab.text(); 2512 retfile = lab.text();
2513 dia.hide(); 2513 dia.hide();
2514 qApp->processEvents(); 2514 qApp->processEvents();
2515 return retfile; 2515 return retfile;
2516 2516
2517} 2517}
2518#include <libkcal/syncdefines.h> 2518#include <libkcal/syncdefines.h>
2519 2519
2520KABC::Addressee KABCore::getLastSyncAddressee() 2520KABC::Addressee KABCore::getLastSyncAddressee()
2521{ 2521{
2522 Addressee lse; 2522 Addressee lse;
2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2525 if (lse.isEmpty()) { 2525 if (lse.isEmpty()) {
2526 qDebug("Creating new last-syncAddressee "); 2526 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2528 QString sum = ""; 2528 QString sum = "";
2529 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2529 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2530 sum = "E: "; 2530 sum = "E: ";
2531 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2531 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2532 lse.setRevision( mLastAddressbookSync ); 2532 lse.setRevision( mLastAddressbookSync );
2533 lse.setCategories( i18n("SyncEvent") ); 2533 lse.setCategories( i18n("SyncEvent") );
2534 mAddressBook->insertAddressee( lse ); 2534 mAddressBook->insertAddressee( lse );
2535 } 2535 }
2536 return lse; 2536 return lse;
2537} 2537}
2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{ 2539{
2540 2540
2541 //void setZaurusId(int id); 2541 //void setZaurusId(int id);
2542 // int zaurusId() const; 2542 // int zaurusId() const;
2543 // void setZaurusUid(int id); 2543 // void setZaurusUid(int id);
2544 // int zaurusUid() const; 2544 // int zaurusUid() const;
2545 // void setZaurusStat(int id); 2545 // void setZaurusStat(int id);
2546 // int zaurusStat() const; 2546 // int zaurusStat() const;
2547 // 0 equal 2547 // 0 equal
2548 // 1 take local 2548 // 1 take local
2549 // 2 take remote 2549 // 2 take remote
2550 // 3 cancel 2550 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync; 2551 QDateTime lastSync = mLastAddressbookSync;
2552 QDateTime localMod = local->revision(); 2552 QDateTime localMod = local->revision();
2553 QDateTime remoteMod = remote->revision(); 2553 QDateTime remoteMod = remote->revision();
2554 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2554 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2555 bool remCh, locCh; 2555 bool remCh, locCh;
2556 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2556 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2557 2557
2558 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2558 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2559 locCh = ( localMod > mLastAddressbookSync ); 2559 locCh = ( localMod > mLastAddressbookSync );
2560 if ( !remCh && ! locCh ) { 2560 if ( !remCh && ! locCh ) {
2561 qDebug("both not changed "); 2561 //qDebug("both not changed ");
2562 lastSync = localMod.addDays(1); 2562 lastSync = localMod.addDays(1);
2563 if ( mode <= SYNC_PREF_ASK ) 2563 if ( mode <= SYNC_PREF_ASK )
2564 return 0; 2564 return 0;
2565 } else { 2565 } else {
2566 if ( locCh ) { 2566 if ( locCh ) {
2567 qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2567 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2568 lastSync = localMod.addDays( -1 ); 2568 lastSync = localMod.addDays( -1 );
2569 if ( !remCh ) 2569 if ( !remCh )
2570 remoteMod =( lastSync.addDays( -1 ) ); 2570 remoteMod =( lastSync.addDays( -1 ) );
2571 } else { 2571 } else {
2572 //qDebug(" not loc changed "); 2572 //qDebug(" not loc changed ");
2573 lastSync = localMod.addDays( 1 ); 2573 lastSync = localMod.addDays( 1 );
2574 if ( remCh ) 2574 if ( remCh )
2575 remoteMod =( lastSync.addDays( 1 ) ); 2575 remoteMod =( lastSync.addDays( 1 ) );
2576 2576
2577 } 2577 }
2578 } 2578 }
2579 full = true; 2579 full = true;
2580 if ( mode < SYNC_PREF_ASK ) 2580 if ( mode < SYNC_PREF_ASK )
2581 mode = SYNC_PREF_ASK; 2581 mode = SYNC_PREF_ASK;
2582 } else { 2582 } else {
2583 if ( localMod == remoteMod ) 2583 if ( localMod == remoteMod )
2584 return 0; 2584 return 0;
2585 2585
2586 } 2586 }
2587 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2587 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2588 2588
2589 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2589 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2590 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2590 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2591 //full = true; //debug only 2591 //full = true; //debug only
2592 if ( full ) { 2592 if ( full ) {
2593 bool equ = ( (*local) == (*remote) ); 2593 bool equ = ( (*local) == (*remote) );
2594 if ( equ ) { 2594 if ( equ ) {
2595 //qDebug("equal "); 2595 //qDebug("equal ");
2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2597 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2597 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2598 } 2598 }
2599 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2599 if ( mode < SYNC_PREF_FORCE_LOCAL )
2600 return 0; 2600 return 0;
2601 2601
2602 }//else //debug only 2602 }//else //debug only
2603 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2603 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2604 } 2604 }
2605 int result; 2605 int result;
2606 bool localIsNew; 2606 bool localIsNew;
2607 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2607 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2608 2608
2609 if ( full && mode < SYNC_PREF_NEWEST ) 2609 if ( full && mode < SYNC_PREF_NEWEST )
2610 mode = SYNC_PREF_ASK; 2610 mode = SYNC_PREF_ASK;
2611 2611
2612 switch( mode ) { 2612 switch( mode ) {
2613 case SYNC_PREF_LOCAL: 2613 case SYNC_PREF_LOCAL:
2614 if ( lastSync > remoteMod ) 2614 if ( lastSync > remoteMod )
2615 return 1; 2615 return 1;
2616 if ( lastSync > localMod ) 2616 if ( lastSync > localMod )
2617 return 2; 2617 return 2;
2618 return 1; 2618 return 1;
2619 break; 2619 break;
2620 case SYNC_PREF_REMOTE: 2620 case SYNC_PREF_REMOTE:
2621 if ( lastSync > remoteMod ) 2621 if ( lastSync > remoteMod )
2622 return 1; 2622 return 1;
2623 if ( lastSync > localMod ) 2623 if ( lastSync > localMod )
2624 return 2; 2624 return 2;
2625 return 2; 2625 return 2;
2626 break; 2626 break;
2627 case SYNC_PREF_NEWEST: 2627 case SYNC_PREF_NEWEST:
2628 if ( localMod > remoteMod ) 2628 if ( localMod > remoteMod )
2629 return 1; 2629 return 1;
2630 else 2630 else
2631 return 2; 2631 return 2;
2632 break; 2632 break;
2633 case SYNC_PREF_ASK: 2633 case SYNC_PREF_ASK:
2634 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2634 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2635 if ( lastSync > remoteMod ) 2635 if ( lastSync > remoteMod )
2636 return 1; 2636 return 1;
2637 if ( lastSync > localMod ) 2637 if ( lastSync > localMod )
2638 return 2; 2638 return 2;
2639 localIsNew = localMod >= remoteMod; 2639 localIsNew = localMod >= remoteMod;
2640 //qDebug("conflict! ************************************** "); 2640 //qDebug("conflict! ************************************** ");
2641 { 2641 {
2642 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2642 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2643 result = acd.executeD(localIsNew); 2643 result = acd.executeD(localIsNew);
2644 return result; 2644 return result;
2645 } 2645 }
2646 break; 2646 break;
2647 case SYNC_PREF_FORCE_LOCAL: 2647 case SYNC_PREF_FORCE_LOCAL:
2648 return 1; 2648 return 1;
2649 break; 2649 break;
2650 case SYNC_PREF_FORCE_REMOTE: 2650 case SYNC_PREF_FORCE_REMOTE:
2651 return 2; 2651 return 2;
2652 break; 2652 break;
2653 2653
2654 default: 2654 default:
2655 // SYNC_PREF_TAKE_BOTH not implemented 2655 // SYNC_PREF_TAKE_BOTH not implemented
2656 break; 2656 break;
2657 } 2657 }
2658 return 0; 2658 return 0;
2659} 2659}
2660bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2660bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2661{ 2661{
2662 bool syncOK = true; 2662 bool syncOK = true;
2663 int addedAddressee = 0; 2663 int addedAddressee = 0;
2664 int addedAddresseeR = 0; 2664 int addedAddresseeR = 0;
2665 int deletedAddresseeR = 0; 2665 int deletedAddresseeR = 0;
2666 int deletedAddresseeL = 0; 2666 int deletedAddresseeL = 0;
2667 int changedLocal = 0; 2667 int changedLocal = 0;
2668 int changedRemote = 0; 2668 int changedRemote = 0;
2669 //QPtrList<Addressee> el = local->rawAddressees(); 2669 //QPtrList<Addressee> el = local->rawAddressees();
2670 Addressee addresseeR; 2670 Addressee addresseeR;
2671 QString uid; 2671 QString uid;
2672 int take; 2672 int take;
2673 Addressee addresseeL; 2673 Addressee addresseeL;
2674 Addressee addresseeRSync; 2674 Addressee addresseeRSync;
2675 Addressee addresseeLSync; 2675 Addressee addresseeLSync;
2676 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2676 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2677 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2677 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2678 bool fullDateRange = false; 2678 bool fullDateRange = false;
2679 local->resetTempSyncStat(); 2679 local->resetTempSyncStat();
2680 mLastAddressbookSync = QDateTime::currentDateTime(); 2680 mLastAddressbookSync = QDateTime::currentDateTime();
2681 QDateTime modifiedCalendar = mLastAddressbookSync;; 2681 QDateTime modifiedCalendar = mLastAddressbookSync;;
2682 addresseeLSync = getLastSyncAddressee(); 2682 addresseeLSync = getLastSyncAddressee();
2683 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2683 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2684 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2684 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2685 if ( !addresseeR.isEmpty() ) { 2685 if ( !addresseeR.isEmpty() ) {
2686 addresseeRSync = addresseeR; 2686 addresseeRSync = addresseeR;
2687 remote->removeAddressee(addresseeR ); 2687 remote->removeAddressee(addresseeR );
2688 2688
2689 } else { 2689 } else {
2690 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2690 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2691 addresseeRSync = addresseeLSync ; 2691 addresseeRSync = addresseeLSync ;
2692 } else { 2692 } else {
2693 qDebug("FULLDATE 1"); 2693 qDebug("FULLDATE 1");
2694 fullDateRange = true; 2694 fullDateRange = true;
2695 Addressee newAdd; 2695 Addressee newAdd;
2696 addresseeRSync = newAdd; 2696 addresseeRSync = newAdd;
2697 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2697 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2698 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2698 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2699 addresseeRSync.setRevision( mLastAddressbookSync ); 2699 addresseeRSync.setRevision( mLastAddressbookSync );
2700 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2700 addresseeRSync.setCategories( i18n("SyncAddressee") );
2701 } 2701 }
2702 } 2702 }
2703 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2703 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2704 qDebug("FULLDATE 2"); 2704 qDebug("FULLDATE 2");
2705 fullDateRange = true; 2705 fullDateRange = true;
2706 } 2706 }
2707 if ( ! fullDateRange ) { 2707 if ( ! fullDateRange ) {
2708 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2708 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2709 2709
2710 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2710 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2711 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2711 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2712 fullDateRange = true; 2712 fullDateRange = true;
2713 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2713 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2714 } 2714 }
2715 } 2715 }
2716 // fullDateRange = true; // debug only! 2716 // fullDateRange = true; // debug only!
2717 if ( fullDateRange ) 2717 if ( fullDateRange )
2718 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2718 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2719 else 2719 else
2720 mLastAddressbookSync = addresseeLSync.revision(); 2720 mLastAddressbookSync = addresseeLSync.revision();
2721 // for resyncing if own file has changed 2721 // for resyncing if own file has changed
2722 // PENDING fixme later when implemented 2722 // PENDING fixme later when implemented
2723#if 0 2723#if 0
2724 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2724 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2725 mLastAddressbookSync = loadedFileVersion; 2725 mLastAddressbookSync = loadedFileVersion;
2726 qDebug("setting mLastAddressbookSync "); 2726 qDebug("setting mLastAddressbookSync ");
2727 } 2727 }
2728#endif 2728#endif
2729 2729
2730 //qDebug("*************************** "); 2730 //qDebug("*************************** ");
2731 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2731 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2732 QStringList er = remote->uidList(); 2732 QStringList er = remote->uidList();
2733 Addressee inR ;//= er.first(); 2733 Addressee inR ;//= er.first();
2734 Addressee inL; 2734 Addressee inL;
2735 QProgressBar bar( er.count(),0 ); 2735 QProgressBar bar( er.count(),0 );
2736 bar.setCaption (i18n("Syncing - close to abort!") ); 2736 bar.setCaption (i18n("Syncing - close to abort!") );
2737 2737
2738 int w = 300; 2738 int w = 300;
2739 if ( QApplication::desktop()->width() < 320 ) 2739 if ( QApplication::desktop()->width() < 320 )
2740 w = 220; 2740 w = 220;
2741 int h = bar.sizeHint().height() ; 2741 int h = bar.sizeHint().height() ;
2742 int dw = QApplication::desktop()->width(); 2742 int dw = QApplication::desktop()->width();
2743 int dh = QApplication::desktop()->height(); 2743 int dh = QApplication::desktop()->height();
2744 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2744 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2745 bar.show(); 2745 bar.show();
2746 int modulo = (er.count()/10)+1; 2746 int modulo = (er.count()/10)+1;
2747 int incCounter = 0; 2747 int incCounter = 0;
2748 while ( incCounter < er.count()) { 2748 while ( incCounter < er.count()) {
2749 if ( ! bar.isVisible() ) 2749 if ( ! bar.isVisible() )
2750 return false; 2750 return false;
2751 if ( incCounter % modulo == 0 ) 2751 if ( incCounter % modulo == 0 )
2752 bar.setProgress( incCounter ); 2752 bar.setProgress( incCounter );
2753 uid = er[ incCounter ]; 2753 uid = er[ incCounter ];
2754 bool skipIncidence = false; 2754 bool skipIncidence = false;
2755 if ( uid.left(19) == QString("last-syncAddressee-") ) 2755 if ( uid.left(19) == QString("last-syncAddressee-") )
2756 skipIncidence = true; 2756 skipIncidence = true;
2757 QString idS,OidS; 2757 QString idS,OidS;
2758 qApp->processEvents(); 2758 qApp->processEvents();
2759 if ( !skipIncidence ) { 2759 if ( !skipIncidence ) {
2760 inL = local->findByUid( uid ); 2760 inL = local->findByUid( uid );
2761 inR = remote->findByUid( uid ); 2761 inR = remote->findByUid( uid );
2762 //inL.setResource( 0 ); 2762 //inL.setResource( 0 );
2763 //inR.setResource( 0 ); 2763 //inR.setResource( 0 );
2764 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2764 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2765 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2765 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2766 //qDebug("take %d %s ", take, inL.summary().latin1()); 2766 //qDebug("take %d %s ", take, inL.summary().latin1());
2767 if ( take == 3 ) 2767 if ( take == 3 )
2768 return false; 2768 return false;
2769 if ( take == 1 ) {// take local 2769 if ( take == 1 ) {// take local
2770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2771 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2771 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2772 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2772 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2773 local->insertAddressee( inL, false ); 2773 local->insertAddressee( inL, false );
2774 idS = inR.externalUID(); 2774 idS = inR.externalUID();
2775 OidS = inR.originalExternalUID(); 2775 OidS = inR.originalExternalUID();
2776 } 2776 }
2777 else 2777 else
2778 idS = inR.IDStr(); 2778 idS = inR.IDStr();
2779 remote->removeAddressee( inR ); 2779 remote->removeAddressee( inR );
2780 inR = inL; 2780 inR = inL;
2781 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2781 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2782 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2782 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2783 inR.setOriginalExternalUID( OidS ); 2783 inR.setOriginalExternalUID( OidS );
2784 inR.setExternalUID( idS ); 2784 inR.setExternalUID( idS );
2785 } else { 2785 } else {
2786 inR.setIDStr( idS ); 2786 inR.setIDStr( idS );
2787 } 2787 }
2788 inR.setResource( 0 ); 2788 inR.setResource( 0 );
2789 remote->insertAddressee( inR , false); 2789 remote->insertAddressee( inR , false);
2790 ++changedRemote; 2790 ++changedRemote;
2791 } else { // take == 2 take remote 2791 } else { // take == 2 take remote
2792 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2792 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2793 if ( inR.revision().date().year() < 2004 ) 2793 if ( inR.revision().date().year() < 2004 )
2794 inR.setRevision( modifiedCalendar ); 2794 inR.setRevision( modifiedCalendar );
2795 } 2795 }
2796 idS = inL.IDStr(); 2796 idS = inL.IDStr();
2797 local->removeAddressee( inL ); 2797 local->removeAddressee( inL );
2798 inL = inR; 2798 inL = inR;
2799 inL.setIDStr( idS ); 2799 inL.setIDStr( idS );
2800 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2800 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2801 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2801 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2802 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2802 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2803 } 2803 }
2804 inL.setResource( 0 ); 2804 inL.setResource( 0 );
2805 local->insertAddressee( inL , false ); 2805 local->insertAddressee( inL , false );
2806 ++changedLocal; 2806 ++changedLocal;
2807 } 2807 }
2808 } 2808 }
2809 } else { // no conflict 2809 } else { // no conflict
2810 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2810 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2811 QString des = addresseeLSync.note(); 2811 QString des = addresseeLSync.note();
2812 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2812 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2813 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2813 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2814 remote->insertAddressee( inR, false ); 2814 remote->insertAddressee( inR, false );
2815 ++deletedAddresseeR; 2815 ++deletedAddresseeR;
2816 } else { 2816 } else {
2817 inR.setRevision( modifiedCalendar ); 2817 inR.setRevision( modifiedCalendar );
2818 remote->insertAddressee( inR, false ); 2818 remote->insertAddressee( inR, false );
2819 inL = inR; 2819 inL = inR;
2820 inL.setResource( 0 ); 2820 inL.setResource( 0 );
2821 local->insertAddressee( inL , false); 2821 local->insertAddressee( inL , false);
2822 ++addedAddressee; 2822 ++addedAddressee;
2823 } 2823 }
2824 } else { 2824 } else {
2825 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2825 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2826 inR.setRevision( modifiedCalendar ); 2826 inR.setRevision( modifiedCalendar );
2827 remote->insertAddressee( inR, false ); 2827 remote->insertAddressee( inR, false );
2828 inR.setResource( 0 ); 2828 inR.setResource( 0 );
2829 local->insertAddressee( inR, false ); 2829 local->insertAddressee( inR, false );
2830 ++addedAddressee; 2830 ++addedAddressee;
2831 } else { 2831 } else {
2832 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2832 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2833 remote->removeAddressee( inR ); 2833 remote->removeAddressee( inR );
2834 ++deletedAddresseeR; 2834 ++deletedAddresseeR;
2835 } 2835 }
2836 } 2836 }
2837 } 2837 }
2838 } 2838 }
2839 ++incCounter; 2839 ++incCounter;
2840 } 2840 }
2841 er.clear(); 2841 er.clear();
2842 QStringList el = local->uidList(); 2842 QStringList el = local->uidList();
2843 modulo = (el.count()/10)+1; 2843 modulo = (el.count()/10)+1;
2844 bar.setCaption (i18n("Add / remove addressees") ); 2844 bar.setCaption (i18n("Add / remove addressees") );
2845 bar.setTotalSteps ( el.count() ) ; 2845 bar.setTotalSteps ( el.count() ) ;
2846 bar.show(); 2846 bar.show();
2847 incCounter = 0; 2847 incCounter = 0;
2848 while ( incCounter < el.count()) { 2848 while ( incCounter < el.count()) {
2849 qApp->processEvents(); 2849 qApp->processEvents();
2850 if ( ! bar.isVisible() ) 2850 if ( ! bar.isVisible() )
2851 return false; 2851 return false;
2852 if ( incCounter % modulo == 0 ) 2852 if ( incCounter % modulo == 0 )
2853 bar.setProgress( incCounter ); 2853 bar.setProgress( incCounter );
2854 uid = el[ incCounter ]; 2854 uid = el[ incCounter ];
2855 bool skipIncidence = false; 2855 bool skipIncidence = false;
2856 if ( uid.left(19) == QString("last-syncAddressee-") ) 2856 if ( uid.left(19) == QString("last-syncAddressee-") )
2857 skipIncidence = true; 2857 skipIncidence = true;
2858 if ( !skipIncidence ) { 2858 if ( !skipIncidence ) {
2859 inL = local->findByUid( uid ); 2859 inL = local->findByUid( uid );
2860 inR = remote->findByUid( uid ); 2860 inR = remote->findByUid( uid );
2861 if ( inR.isEmpty() ) { 2861 if ( inR.isEmpty() ) {
2862 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2862 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2863 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2863 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2864 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2864 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2865 local->removeAddressee( inL ); 2865 local->removeAddressee( inL );
2866 ++deletedAddresseeL; 2866 ++deletedAddresseeL;
2867 } else { 2867 } else {
2868 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2868 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2869 inL.removeID(mCurrentSyncDevice ); 2869 inL.removeID(mCurrentSyncDevice );
2870 ++addedAddresseeR; 2870 ++addedAddresseeR;
2871 inL.setRevision( modifiedCalendar ); 2871 inL.setRevision( modifiedCalendar );
2872 local->insertAddressee( inL, false ); 2872 local->insertAddressee( inL, false );
2873 inR = inL; 2873 inR = inL;
2874 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2874 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2875 inR.setResource( 0 ); 2875 inR.setResource( 0 );
2876 remote->insertAddressee( inR, false ); 2876 remote->insertAddressee( inR, false );
2877 } 2877 }
2878 } 2878 }
2879 } else { 2879 } else {
2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2882 local->removeAddressee( inL ); 2882 local->removeAddressee( inL );
2883 ++deletedAddresseeL; 2883 ++deletedAddresseeL;
2884 } else { 2884 } else {
2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2886 ++addedAddresseeR; 2886 ++addedAddresseeR;
2887 inL.setRevision( modifiedCalendar ); 2887 inL.setRevision( modifiedCalendar );
2888 local->insertAddressee( inL, false ); 2888 local->insertAddressee( inL, false );
2889 inR = inL; 2889 inR = inL;
2890 inR.setResource( 0 ); 2890 inR.setResource( 0 );
2891 remote->insertAddressee( inR, false ); 2891 remote->insertAddressee( inR, false );
2892 } 2892 }
2893 } 2893 }
2894 } 2894 }
2895 } 2895 }
2896 } 2896 }
2897 ++incCounter; 2897 ++incCounter;
2898 } 2898 }
2899 el.clear(); 2899 el.clear();
2900 bar.hide(); 2900 bar.hide();
2901 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2901 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2902 // get rid of micro seconds 2902 // get rid of micro seconds
2903 QTime t = mLastAddressbookSync.time(); 2903 QTime t = mLastAddressbookSync.time();
2904 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2904 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2905 addresseeLSync.setRevision( mLastAddressbookSync ); 2905 addresseeLSync.setRevision( mLastAddressbookSync );
2906 addresseeRSync.setRevision( mLastAddressbookSync ); 2906 addresseeRSync.setRevision( mLastAddressbookSync );
2907 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2907 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2908 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2908 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2909 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2909 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2910 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2910 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2911 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2911 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2912 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2912 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2913 addresseeRSync.setNote( "" ) ; 2913 addresseeRSync.setNote( "" ) ;
2914 addresseeLSync.setNote( "" ); 2914 addresseeLSync.setNote( "" );
2915 2915
2916 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2916 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2917 remote->insertAddressee( addresseeRSync, false ); 2917 remote->insertAddressee( addresseeRSync, false );
2918 local->insertAddressee( addresseeLSync, false ); 2918 local->insertAddressee( addresseeLSync, false );
2919 QString mes; 2919 QString mes;
2920 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2920 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2921 if ( KABPrefs::instance()->mShowSyncSummary ) { 2921 if ( KABPrefs::instance()->mShowSyncSummary ) {
2922 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2922 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2923 } 2923 }
2924 qDebug( mes ); 2924 qDebug( mes );
2925 return syncOK; 2925 return syncOK;
2926} 2926}
2927 2927
2928bool KABCore::syncAB(QString filename, int mode) 2928bool KABCore::syncAB(QString filename, int mode)
2929{ 2929{
2930 2930
2931 //pending prepare addresseeview for output 2931 //pending prepare addresseeview for output
2932 //pending detect, if remote file has REV field. if not switch to external sync 2932 //pending detect, if remote file has REV field. if not switch to external sync
2933 mGlobalSyncMode = SYNC_MODE_NORMAL; 2933 mGlobalSyncMode = SYNC_MODE_NORMAL;
2934 AddressBook abLocal(filename,"syncContact"); 2934 AddressBook abLocal(filename,"syncContact");
2935 bool syncOK = false; 2935 bool syncOK = false;
2936 if ( abLocal.load() ) { 2936 if ( abLocal.load() ) {
2937 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2937 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2938 bool external = false; 2938 bool external = false;
2939 bool isXML = false; 2939 bool isXML = false;
2940 if ( filename.right(4) == ".xml") { 2940 if ( filename.right(4) == ".xml") {
2941 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2941 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2942 isXML = true; 2942 isXML = true;
2943 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2943 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2944 } else { 2944 } else {
2945 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2945 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2946 if ( ! lse.isEmpty() ) { 2946 if ( ! lse.isEmpty() ) {
2947 if ( lse.familyName().left(4) == "!E: " ) 2947 if ( lse.familyName().left(4) == "!E: " )
2948 external = true; 2948 external = true;
2949 } else { 2949 } else {
2950 bool found = false; 2950 bool found = false;
2951 AddressBook::Iterator it; 2951 AddressBook::Iterator it;
2952 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2952 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2953 if ( (*it).revision().date().year() > 2003 ) { 2953 if ( (*it).revision().date().year() > 2003 ) {
2954 found = true; 2954 found = true;
2955 break; 2955 break;
2956 } 2956 }
2957 } 2957 }
2958 external = ! found; 2958 external = ! found;
2959 } 2959 }
2960 2960
2961 if ( external ) { 2961 if ( external ) {
2962 qDebug("Setting vcf mode to external "); 2962 qDebug("Setting vcf mode to external ");
2963 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2963 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2964 AddressBook::Iterator it; 2964 AddressBook::Iterator it;
2965 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2965 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2966 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2966 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2967 (*it).computeCsum( mCurrentSyncDevice ); 2967 (*it).computeCsum( mCurrentSyncDevice );
2968 } 2968 }
2969 } 2969 }
2970 } 2970 }
2971 //AddressBook::Iterator it; 2971 //AddressBook::Iterator it;
2972 //QStringList vcards; 2972 //QStringList vcards;
2973 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2973 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2974 // qDebug("Name %s ", (*it).familyName().latin1()); 2974 // qDebug("Name %s ", (*it).familyName().latin1());
2975 //} 2975 //}
2976 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2976 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2977 if ( syncOK ) { 2977 if ( syncOK ) {
2978 if ( KABPrefs::instance()->mWriteBackFile ) 2978 if ( KABPrefs::instance()->mWriteBackFile )
2979 { 2979 {
2980 if ( external ) 2980 if ( external )
2981 abLocal.removeSyncAddressees( !isXML); 2981 abLocal.removeSyncAddressees( !isXML);
2982 qDebug("Saving remote AB "); 2982 qDebug("Saving remote AB ");
2983 abLocal.saveAB(); 2983 abLocal.saveAB();
2984 if ( isXML ) { 2984 if ( isXML ) {
2985 // afterwrite processing 2985 // afterwrite processing
2986 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2986 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2987 } 2987 }
2988 } 2988 }
2989 } 2989 }
2990 setModified(); 2990 setModified();
2991 2991
2992 } 2992 }
2993 if ( syncOK ) 2993 if ( syncOK )
2994 mViewManager->refreshView(); 2994 mViewManager->refreshView();
2995 return syncOK; 2995 return syncOK;
2996#if 0 2996#if 0
2997 2997
2998 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2998 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2999 getEventViewerDialog()->setSyncMode( true ); 2999 getEventViewerDialog()->setSyncMode( true );
3000 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 3000 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
3001 getEventViewerDialog()->setSyncMode( false ); 3001 getEventViewerDialog()->setSyncMode( false );
3002 if ( syncOK ) { 3002 if ( syncOK ) {
3003 if ( KOPrefs::instance()->mWriteBackFile ) 3003 if ( KOPrefs::instance()->mWriteBackFile )
3004 { 3004 {
3005 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3005 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3006 storage->save(); 3006 storage->save();
3007 } 3007 }
3008 } 3008 }
3009 setModified(); 3009 setModified();
3010 } 3010 }
3011 3011
3012#endif 3012#endif
3013} 3013}
3014 3014
3015void KABCore::confSync() 3015void KABCore::confSync()
3016{ 3016{
3017 static KSyncPrefsDialog* sp = 0; 3017 static KSyncPrefsDialog* sp = 0;
3018 if ( ! sp ) { 3018 if ( ! sp ) {
3019 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 3019 sp = new KSyncPrefsDialog( this, "syncprefs", true );
3020 } 3020 }
3021 sp->usrReadConfig(); 3021 sp->usrReadConfig();
3022#ifndef DESKTOP_VERSION 3022#ifndef DESKTOP_VERSION
3023 sp->showMaximized(); 3023 sp->showMaximized();
3024#else 3024#else
3025 sp->show(); 3025 sp->show();
3026#endif 3026#endif
3027 sp->exec(); 3027 sp->exec();
3028 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 3028 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
3029 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 3029 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
3030 fillSyncMenu(); 3030 fillSyncMenu();
3031} 3031}
3032void KABCore::syncSharp() 3032void KABCore::syncSharp()
3033{ 3033{
3034 if ( ! syncExternal("sharp") ) 3034 if ( ! syncExternal("sharp") )
3035 qDebug("ERROR sync sharp ");; 3035 qDebug("ERROR sync sharp ");;
3036} 3036}
3037bool KABCore::syncExternal(QString resource) 3037bool KABCore::syncExternal(QString resource)
3038{ 3038{
3039 if ( mModified ) 3039 if ( mModified )
3040 save(); 3040 save();
3041 if ( KABPrefs::instance()->mAskForPreferences ) 3041 if ( KABPrefs::instance()->mAskForPreferences )
3042 edit_sync_options(); 3042 edit_sync_options();
3043 qDebug("syncSharp() "); 3043 qDebug("syncSharp() ");
3044 AddressBook abLocal( resource,"syncContact"); 3044 AddressBook abLocal( resource,"syncContact");
3045 bool syncOK = false; 3045 bool syncOK = false;
3046 if ( abLocal.load() ) { 3046 if ( abLocal.load() ) {
3047 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 3047 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
3048 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3048 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3049 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 3049 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
3050 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs ); 3050 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs );
3051 if ( syncOK ) { 3051 if ( syncOK ) {
3052 if ( KABPrefs::instance()->mWriteBackFile ) { 3052 if ( KABPrefs::instance()->mWriteBackFile ) {
3053 abLocal.saveAB(); 3053 abLocal.saveAB();
3054 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 3054 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
3055 } 3055 }
3056 } 3056 }
3057 setModified(); 3057 setModified();
3058 } 3058 }
3059 if ( syncOK ) 3059 if ( syncOK )
3060 mViewManager->refreshView(); 3060 mViewManager->refreshView();
3061 return syncOK; 3061 return syncOK;
3062 3062
3063} 3063}
3064void KABCore::syncPhone() 3064void KABCore::syncPhone()
3065{ 3065{
3066 if ( mModified ) 3066 if ( mModified )
3067 save(); 3067 save();
3068 qDebug("pending syncPhone(); "); 3068 qDebug("pending syncPhone(); ");
3069 //mView->syncPhone(); 3069 //mView->syncPhone();
3070 setModified(); 3070 setModified();
3071 3071
3072} 3072}