summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-11-25 23:24:37 (UTC)
committer zautrix <zautrix>2005-11-25 23:24:37 (UTC)
commit3cd0013c04172b312ee21e80224a3b7734b4d413 (patch) (unidiff)
tree9c5557ecfe874a8a4901a674c5eddcc91f585b0c
parent0e18027f386280bf427ef9d0ffec61a5516cebda (diff)
downloadkdepimpi-3cd0013c04172b312ee21e80224a3b7734b4d413.zip
kdepimpi-3cd0013c04172b312ee21e80224a3b7734b4d413.tar.gz
kdepimpi-3cd0013c04172b312ee21e80224a3b7734b4d413.tar.bz2
sync
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendar.cpp2
-rw-r--r--libkcal/calendarlocal.cpp12
-rw-r--r--libkcal/incidencebase.cpp7
-rw-r--r--libkcal/incidencebase.h1
-rw-r--r--libkdepim/ksyncmanager.cpp2
-rw-r--r--libkdepim/ksyncprefsdialog.cpp2
6 files changed, 17 insertions, 9 deletions
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index b1806ee..8535191 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -1,523 +1,523 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <stdlib.h> 22#include <stdlib.h>
23#include <time.h> 23#include <time.h>
24 24
25#include <kdebug.h> 25#include <kdebug.h>
26#include <kglobal.h> 26#include <kglobal.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29#include "exceptions.h" 29#include "exceptions.h"
30#include "calfilter.h" 30#include "calfilter.h"
31 31
32#include "calendar.h" 32#include "calendar.h"
33#include "syncdefines.h" 33#include "syncdefines.h"
34 34
35using namespace KCal; 35using namespace KCal;
36 36
37Calendar::Calendar() 37Calendar::Calendar()
38{ 38{
39 39
40 init(); 40 init();
41 setTimeZoneId( " 00:00 Europe/London(UTC)" ); 41 setTimeZoneId( " 00:00 Europe/London(UTC)" );
42} 42}
43 43
44Calendar::Calendar( const QString &timeZoneId ) 44Calendar::Calendar( const QString &timeZoneId )
45{ 45{
46 46
47 init(); 47 init();
48 setTimeZoneId(timeZoneId); 48 setTimeZoneId(timeZoneId);
49} 49}
50 50
51void Calendar::init() 51void Calendar::init()
52{ 52{
53 mObserver = 0; 53 mObserver = 0;
54 mNewObserver = false; 54 mNewObserver = false;
55 mUndoIncidence = 0; 55 mUndoIncidence = 0;
56 mDeleteIncidencesOnClose = true; 56 mDeleteIncidencesOnClose = true;
57 mModified = false; 57 mModified = false;
58 mDefaultCalendar = 1; 58 mDefaultCalendar = 1;
59 // Setup default filter, which does nothing 59 // Setup default filter, which does nothing
60 mDefaultFilter = new CalFilter; 60 mDefaultFilter = new CalFilter;
61 mFilter = mDefaultFilter; 61 mFilter = mDefaultFilter;
62 mFilter->setEnabled(false); 62 mFilter->setEnabled(false);
63 63
64 // initialize random numbers. This is a hack, and not 64 // initialize random numbers. This is a hack, and not
65 // even that good of one at that. 65 // even that good of one at that.
66// srandom(time(0)); 66// srandom(time(0));
67 67
68 // user information... 68 // user information...
69 setOwner(i18n("Unknown Name")); 69 setOwner(i18n("Unknown Name"));
70 setEmail(i18n("unknown@nowhere")); 70 setEmail(i18n("unknown@nowhere"));
71 71
72#if 0 72#if 0
73 tmpStr = KOPrefs::instance()->mTimeZone; 73 tmpStr = KOPrefs::instance()->mTimeZone;
74// kdDebug(5800) << "Calendar::Calendar(): TimeZone: " << tmpStr << endl; 74// kdDebug(5800) << "Calendar::Calendar(): TimeZone: " << tmpStr << endl;
75 int dstSetting = KOPrefs::instance()->mDaylightSavings; 75 int dstSetting = KOPrefs::instance()->mDaylightSavings;
76 extern long int timezone; 76 extern long int timezone;
77 struct tm *now; 77 struct tm *now;
78 time_t curtime; 78 time_t curtime;
79 curtime = time(0); 79 curtime = time(0);
80 now = localtime(&curtime); 80 now = localtime(&curtime);
81 int hourOff = - ((timezone / 60) / 60); 81 int hourOff = - ((timezone / 60) / 60);
82 if (now->tm_isdst) 82 if (now->tm_isdst)
83 hourOff += 1; 83 hourOff += 1;
84 QString tzStr; 84 QString tzStr;
85 tzStr.sprintf("%.2d%.2d", 85 tzStr.sprintf("%.2d%.2d",
86 hourOff, 86 hourOff,
87 abs((timezone / 60) % 60)); 87 abs((timezone / 60) % 60));
88 88
89 // if no time zone was in the config file, write what we just discovered. 89 // if no time zone was in the config file, write what we just discovered.
90 if (tmpStr.isEmpty()) { 90 if (tmpStr.isEmpty()) {
91// KOPrefs::instance()->mTimeZone = tzStr; 91// KOPrefs::instance()->mTimeZone = tzStr;
92 } else { 92 } else {
93 tzStr = tmpStr; 93 tzStr = tmpStr;
94 } 94 }
95 95
96 // if daylight savings has changed since last load time, we need 96 // if daylight savings has changed since last load time, we need
97 // to rewrite these settings to the config file. 97 // to rewrite these settings to the config file.
98 if ((now->tm_isdst && !dstSetting) || 98 if ((now->tm_isdst && !dstSetting) ||
99 (!now->tm_isdst && dstSetting)) { 99 (!now->tm_isdst && dstSetting)) {
100 KOPrefs::instance()->mTimeZone = tzStr; 100 KOPrefs::instance()->mTimeZone = tzStr;
101 KOPrefs::instance()->mDaylightSavings = now->tm_isdst; 101 KOPrefs::instance()->mDaylightSavings = now->tm_isdst;
102 } 102 }
103 103
104 setTimeZone(tzStr); 104 setTimeZone(tzStr);
105#endif 105#endif
106 106
107// KOPrefs::instance()->writeConfig(); 107// KOPrefs::instance()->writeConfig();
108} 108}
109 109
110Calendar::~Calendar() 110Calendar::~Calendar()
111{ 111{
112 delete mDefaultFilter; 112 delete mDefaultFilter;
113 clearUndo( 0 ); 113 clearUndo( 0 );
114} 114}
115void Calendar::clearUndo( Incidence * newUndo ) 115void Calendar::clearUndo( Incidence * newUndo )
116{ 116{
117 117
118 if ( mUndoIncidence ) { 118 if ( mUndoIncidence ) {
119 if ( mUndoIncidence->typeID() == eventID ) 119 if ( mUndoIncidence->typeID() == eventID )
120 delete ((Event*) mUndoIncidence) ; 120 delete ((Event*) mUndoIncidence) ;
121 else if ( mUndoIncidence->typeID() == todoID ) 121 else if ( mUndoIncidence->typeID() == todoID )
122 delete ( (Todo*) mUndoIncidence ); 122 delete ( (Todo*) mUndoIncidence );
123 else if ( mUndoIncidence->typeID() == journalID ) 123 else if ( mUndoIncidence->typeID() == journalID )
124 delete ( (Journal*) mUndoIncidence ); 124 delete ( (Journal*) mUndoIncidence );
125 else 125 else
126 delete mUndoIncidence; 126 delete mUndoIncidence;
127 } 127 }
128 mUndoIncidence = newUndo; 128 mUndoIncidence = newUndo;
129 if ( mUndoIncidence ) { 129 if ( mUndoIncidence ) {
130 mUndoIncidence->clearRelations(); 130 mUndoIncidence->clearRelations();
131 } 131 }
132 132
133} 133}
134 134
135void Calendar::setDontDeleteIncidencesOnClose () 135void Calendar::setDontDeleteIncidencesOnClose ()
136{ 136{
137 mDeleteIncidencesOnClose = false; 137 mDeleteIncidencesOnClose = false;
138} 138}
139void Calendar::setDefaultCalendar( int d ) 139void Calendar::setDefaultCalendar( int d )
140{ 140{
141 mDefaultCalendar = d; 141 mDefaultCalendar = d;
142} 142}
143int Calendar::defaultCalendar() 143int Calendar::defaultCalendar()
144{ 144{
145 return mDefaultCalendar; 145 return mDefaultCalendar;
146} 146}
147const QString &Calendar::getOwner() const 147const QString &Calendar::getOwner() const
148{ 148{
149 return mOwner; 149 return mOwner;
150} 150}
151 151
152bool Calendar::undoDeleteIncidence() 152bool Calendar::undoDeleteIncidence()
153{ 153{
154 if (!mUndoIncidence) 154 if (!mUndoIncidence)
155 return false; 155 return false;
156 addIncidence(mUndoIncidence); 156 addIncidence(mUndoIncidence);
157 mUndoIncidence = 0; 157 mUndoIncidence = 0;
158 return true; 158 return true;
159} 159}
160void Calendar::setOwner(const QString &os) 160void Calendar::setOwner(const QString &os)
161{ 161{
162 int i; 162 int i;
163 mOwner = os; 163 mOwner = os;
164 i = mOwner.find(','); 164 i = mOwner.find(',');
165 if (i != -1) 165 if (i != -1)
166 mOwner = mOwner.left(i); 166 mOwner = mOwner.left(i);
167 167
168 setModified( true ); 168 setModified( true );
169} 169}
170 170
171void Calendar::setTimeZone(const QString & tz) 171void Calendar::setTimeZone(const QString & tz)
172{ 172{
173 bool neg = FALSE; 173 bool neg = FALSE;
174 int hours, minutes; 174 int hours, minutes;
175 QString tmpStr(tz); 175 QString tmpStr(tz);
176 176
177 if (tmpStr.left(1) == "-") 177 if (tmpStr.left(1) == "-")
178 neg = TRUE; 178 neg = TRUE;
179 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+") 179 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+")
180 tmpStr.remove(0, 1); 180 tmpStr.remove(0, 1);
181 hours = tmpStr.left(2).toInt(); 181 hours = tmpStr.left(2).toInt();
182 if (tmpStr.length() > 2) 182 if (tmpStr.length() > 2)
183 minutes = tmpStr.right(2).toInt(); 183 minutes = tmpStr.right(2).toInt();
184 else 184 else
185 minutes = 0; 185 minutes = 0;
186 mTimeZone = (60*hours+minutes); 186 mTimeZone = (60*hours+minutes);
187 if (neg) 187 if (neg)
188 mTimeZone = -mTimeZone; 188 mTimeZone = -mTimeZone;
189 mLocalTime = false; 189 mLocalTime = false;
190 190
191 setModified( true ); 191 setModified( true );
192} 192}
193 193
194QString Calendar::getTimeZoneStr() const 194QString Calendar::getTimeZoneStr() const
195{ 195{
196 if (mLocalTime) 196 if (mLocalTime)
197 return ""; 197 return "";
198 QString tmpStr; 198 QString tmpStr;
199 int hours = abs(mTimeZone / 60); 199 int hours = abs(mTimeZone / 60);
200 int minutes = abs(mTimeZone % 60); 200 int minutes = abs(mTimeZone % 60);
201 bool neg = mTimeZone < 0; 201 bool neg = mTimeZone < 0;
202 202
203 tmpStr.sprintf("%c%.2d%.2d", 203 tmpStr.sprintf("%c%.2d%.2d",
204 (neg ? '-' : '+'), 204 (neg ? '-' : '+'),
205 hours, minutes); 205 hours, minutes);
206 return tmpStr; 206 return tmpStr;
207} 207}
208 208
209void Calendar::setTimeZone(int tz) 209void Calendar::setTimeZone(int tz)
210{ 210{
211 mTimeZone = tz; 211 mTimeZone = tz;
212 mLocalTime = false; 212 mLocalTime = false;
213 213
214 setModified( true ); 214 setModified( true );
215} 215}
216 216
217int Calendar::getTimeZone() const 217int Calendar::getTimeZone() const
218{ 218{
219 return mTimeZone; 219 return mTimeZone;
220} 220}
221 221
222void Calendar::setTimeZoneId(const QString &id) 222void Calendar::setTimeZoneId(const QString &id)
223{ 223{
224 mTimeZoneId = id; 224 mTimeZoneId = id;
225 mLocalTime = false; 225 mLocalTime = false;
226 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId); 226 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId);
227 if ( mTimeZone > 1000) 227 if ( mTimeZone > 1000)
228 setLocalTime(); 228 setLocalTime();
229 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone); 229 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone);
230 setModified( true ); 230 setModified( true );
231} 231}
232 232
233QString Calendar::timeZoneId() const 233QString Calendar::timeZoneId() const
234{ 234{
235 return mTimeZoneId; 235 return mTimeZoneId;
236} 236}
237 237
238void Calendar::setLocalTime() 238void Calendar::setLocalTime()
239{ 239{
240 //qDebug("Calendar::setLocalTime() "); 240 //qDebug("Calendar::setLocalTime() ");
241 mLocalTime = true; 241 mLocalTime = true;
242 mTimeZone = 0; 242 mTimeZone = 0;
243 mTimeZoneId = ""; 243 mTimeZoneId = "";
244 244
245 setModified( true ); 245 setModified( true );
246} 246}
247 247
248bool Calendar::isLocalTime() const 248bool Calendar::isLocalTime() const
249{ 249{
250 return mLocalTime; 250 return mLocalTime;
251} 251}
252 252
253const QString &Calendar::getEmail() 253const QString &Calendar::getEmail()
254{ 254{
255 return mOwnerEmail; 255 return mOwnerEmail;
256} 256}
257 257
258void Calendar::setEmail(const QString &e) 258void Calendar::setEmail(const QString &e)
259{ 259{
260 mOwnerEmail = e; 260 mOwnerEmail = e;
261 261
262 setModified( true ); 262 setModified( true );
263} 263}
264 264
265void Calendar::setFilter(CalFilter *filter) 265void Calendar::setFilter(CalFilter *filter)
266{ 266{
267 mFilter = filter; 267 mFilter = filter;
268} 268}
269 269
270CalFilter *Calendar::filter() 270CalFilter *Calendar::filter()
271{ 271{
272 return mFilter; 272 return mFilter;
273} 273}
274 274
275QPtrList<Incidence> Calendar::incidences() 275QPtrList<Incidence> Calendar::incidences()
276{ 276{
277 QPtrList<Incidence> incidences; 277 QPtrList<Incidence> incidences;
278 278
279 Incidence *i; 279 Incidence *i;
280 280
281 QPtrList<Event> e = events(); 281 QPtrList<Event> e = events();
282 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 282 for( i = e.first(); i; i = e.next() ) incidences.append( i );
283 283
284 QPtrList<Todo> t = todos(); 284 QPtrList<Todo> t = todos();
285 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 285 for( i = t.first(); i; i = t.next() ) incidences.append( i );
286 286
287 QPtrList<Journal> j = journals(); 287 QPtrList<Journal> j = journals();
288 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 288 for( i = j.first(); i; i = j.next() ) incidences.append( i );
289 289
290 return incidences; 290 return incidences;
291} 291}
292 292
293void Calendar::resetPilotStat(int id ) 293void Calendar::resetPilotStat(int id )
294{ 294{
295 QPtrList<Incidence> incidences; 295 QPtrList<Incidence> incidences;
296 296
297 Incidence *i; 297 Incidence *i;
298 298
299 QPtrList<Event> e = rawEvents(); 299 QPtrList<Event> e = rawEvents();
300 for( i = e.first(); i; i = e.next() ) i->setPilotId( id ); 300 for( i = e.first(); i; i = e.next() ) i->setPilotId( id );
301 301
302 QPtrList<Todo> t = rawTodos(); 302 QPtrList<Todo> t = rawTodos();
303 for( i = t.first(); i; i = t.next() ) i->setPilotId( id ); 303 for( i = t.first(); i; i = t.next() ) i->setPilotId( id );
304 304
305 QPtrList<Journal> j = journals(); 305 QPtrList<Journal> j = journals();
306 for( i = j.first(); i; i = j.next() ) i->setPilotId( id ); 306 for( i = j.first(); i; i = j.next() ) i->setPilotId( id );
307} 307}
308void Calendar::resetTempSyncStat() 308void Calendar::resetTempSyncStat()
309{ 309{
310 QPtrList<Incidence> incidences; 310 QPtrList<Incidence> incidences;
311 311
312 Incidence *i; 312 Incidence *i;
313 313
314 QPtrList<Event> e = rawEvents(); 314 QPtrList<Event> e = rawEvents();
315 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 315 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
316 316
317 QPtrList<Todo> t = rawTodos(); 317 QPtrList<Todo> t = rawTodos();
318 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 318 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
319 319
320 QPtrList<Journal> j = journals(); 320 QPtrList<Journal> j = journals();
321 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 321 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
322} 322}
323QPtrList<Incidence> Calendar::rawIncidences() 323QPtrList<Incidence> Calendar::rawIncidences()
324{ 324{
325 QPtrList<Incidence> incidences; 325 QPtrList<Incidence> incidences;
326 326
327 Incidence *i; 327 Incidence *i;
328 328
329 QPtrList<Event> e = rawEvents(); 329 QPtrList<Event> e = rawEvents();
330 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 330 for( i = e.first(); i; i = e.next() ) incidences.append( i );
331 331
332 QPtrList<Todo> t = rawTodos(); 332 QPtrList<Todo> t = rawTodos();
333 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 333 for( i = t.first(); i; i = t.next() ) incidences.append( i );
334 334
335 QPtrList<Journal> j = journals(); 335 QPtrList<Journal> j = journals();
336 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 336 for( i = j.first(); i; i = j.next() ) incidences.append( i );
337 337
338 return incidences; 338 return incidences;
339} 339}
340 340
341QPtrList<Event> Calendar::events( const QDate &date, bool sorted ) 341QPtrList<Event> Calendar::events( const QDate &date, bool sorted )
342{ 342{
343 QPtrList<Event> el = rawEventsForDate(date,sorted); 343 QPtrList<Event> el = rawEventsForDate(date,sorted);
344 mFilter->apply(&el); 344 mFilter->apply(&el);
345 return el; 345 return el;
346} 346}
347 347
348QPtrList<Event> Calendar::events( const QDateTime &qdt ) 348QPtrList<Event> Calendar::events( const QDateTime &qdt )
349{ 349{
350 QPtrList<Event> el = rawEventsForDate(qdt); 350 QPtrList<Event> el = rawEventsForDate(qdt);
351 mFilter->apply(&el); 351 mFilter->apply(&el);
352 return el; 352 return el;
353} 353}
354 354
355QPtrList<Event> Calendar::events( const QDate &start, const QDate &end, 355QPtrList<Event> Calendar::events( const QDate &start, const QDate &end,
356 bool inclusive) 356 bool inclusive)
357{ 357{
358 QPtrList<Event> el = rawEvents(start,end,inclusive); 358 QPtrList<Event> el = rawEvents(start,end,inclusive);
359 mFilter->apply(&el); 359 mFilter->apply(&el);
360 return el; 360 return el;
361} 361}
362 362
363QPtrList<Event> Calendar::events() 363QPtrList<Event> Calendar::events()
364{ 364{
365 QPtrList<Event> el = rawEvents(); 365 QPtrList<Event> el = rawEvents();
366 mFilter->apply(&el); 366 mFilter->apply(&el);
367 return el; 367 return el;
368} 368}
369void Calendar::addIncidenceBranch(Incidence *i) 369void Calendar::addIncidenceBranch(Incidence *i)
370{ 370{
371 addIncidence( i ); 371 addIncidence( i );
372 Incidence * inc; 372 Incidence * inc;
373 QPtrList<Incidence> Relations = i->relations(); 373 QPtrList<Incidence> Relations = i->relations();
374 for (inc=Relations.first();inc;inc=Relations.next()) { 374 for (inc=Relations.first();inc;inc=Relations.next()) {
375 addIncidenceBranch( inc ); 375 addIncidenceBranch( inc );
376 } 376 }
377} 377}
378 378
379bool Calendar::addIncidence(Incidence *i) 379bool Calendar::addIncidence(Incidence *i)
380{ 380{
381 Incidence::AddVisitor<Calendar> v(this); 381 Incidence::AddVisitor<Calendar> v(this);
382 if ( i->calID() == 0 ) 382 if ( i->calID() == 0 )
383 i->setCalID( mDefaultCalendar ); 383 i->setCalID_block( mDefaultCalendar );
384 i->setCalEnabled( true ); 384 i->setCalEnabled( true );
385 return i->accept(v); 385 return i->accept(v);
386} 386}
387void Calendar::deleteIncidence(Incidence *in) 387void Calendar::deleteIncidence(Incidence *in)
388{ 388{
389 if ( in->typeID() == eventID ) 389 if ( in->typeID() == eventID )
390 deleteEvent( (Event*) in ); 390 deleteEvent( (Event*) in );
391 else if ( in->typeID() == todoID ) 391 else if ( in->typeID() == todoID )
392 deleteTodo( (Todo*) in); 392 deleteTodo( (Todo*) in);
393 else if ( in->typeID() == journalID ) 393 else if ( in->typeID() == journalID )
394 deleteJournal( (Journal*) in ); 394 deleteJournal( (Journal*) in );
395} 395}
396 396
397Incidence* Calendar::incidence( const QString& uid ) 397Incidence* Calendar::incidence( const QString& uid )
398{ 398{
399 Incidence* i; 399 Incidence* i;
400 400
401 if( (i = todo( uid )) != 0 ) 401 if( (i = todo( uid )) != 0 )
402 return i; 402 return i;
403 if( (i = event( uid )) != 0 ) 403 if( (i = event( uid )) != 0 )
404 return i; 404 return i;
405 if( (i = journal( uid )) != 0 ) 405 if( (i = journal( uid )) != 0 )
406 return i; 406 return i;
407 407
408 return 0; 408 return 0;
409} 409}
410 410
411QPtrList<Todo> Calendar::todos() 411QPtrList<Todo> Calendar::todos()
412{ 412{
413 QPtrList<Todo> tl = rawTodos(); 413 QPtrList<Todo> tl = rawTodos();
414 mFilter->apply( &tl ); 414 mFilter->apply( &tl );
415 return tl; 415 return tl;
416} 416}
417 417
418// When this is called, the todo have already been added to the calendar. 418// When this is called, the todo have already been added to the calendar.
419// This method is only about linking related todos 419// This method is only about linking related todos
420void Calendar::setupRelations( Incidence *incidence ) 420void Calendar::setupRelations( Incidence *incidence )
421{ 421{
422 QString uid = incidence->uid(); 422 QString uid = incidence->uid();
423 //qDebug("Calendar::setupRelations "); 423 //qDebug("Calendar::setupRelations ");
424 // First, go over the list of orphans and see if this is their parent 424 // First, go over the list of orphans and see if this is their parent
425 while( Incidence* i = mOrphans[ uid ] ) { 425 while( Incidence* i = mOrphans[ uid ] ) {
426 mOrphans.remove( uid ); 426 mOrphans.remove( uid );
427 i->setRelatedTo( incidence ); 427 i->setRelatedTo( incidence );
428 incidence->addRelation( i ); 428 incidence->addRelation( i );
429 mOrphanUids.remove( i->uid() ); 429 mOrphanUids.remove( i->uid() );
430 } 430 }
431 431
432 // Now see about this incidences parent 432 // Now see about this incidences parent
433 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) { 433 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) {
434 // This incidence has a uid it is related to, but is not registered to it yet 434 // This incidence has a uid it is related to, but is not registered to it yet
435 // Try to find it 435 // Try to find it
436 Incidence* parent = this->incidence( incidence->relatedToUid() ); 436 Incidence* parent = this->incidence( incidence->relatedToUid() );
437 if( parent ) { 437 if( parent ) {
438 // Found it 438 // Found it
439 incidence->setRelatedTo( parent ); 439 incidence->setRelatedTo( parent );
440 parent->addRelation( incidence ); 440 parent->addRelation( incidence );
441 } else { 441 } else {
442 // Not found, put this in the mOrphans list 442 // Not found, put this in the mOrphans list
443 mOrphans.insert( incidence->relatedToUid(), incidence ); 443 mOrphans.insert( incidence->relatedToUid(), incidence );
444 mOrphanUids.insert( incidence->uid(), incidence ); 444 mOrphanUids.insert( incidence->uid(), incidence );
445 } 445 }
446 } 446 }
447} 447}
448 448
449// If a task with subtasks is deleted, move it's subtasks to the orphans list 449// If a task with subtasks is deleted, move it's subtasks to the orphans list
450void Calendar::removeRelations( Incidence *incidence ) 450void Calendar::removeRelations( Incidence *incidence )
451{ 451{
452 // qDebug("Calendar::removeRelations "); 452 // qDebug("Calendar::removeRelations ");
453 QString uid = incidence->uid(); 453 QString uid = incidence->uid();
454 454
455 QPtrList<Incidence> relations = incidence->relations(); 455 QPtrList<Incidence> relations = incidence->relations();
456 for( Incidence* i = relations.first(); i; i = relations.next() ) 456 for( Incidence* i = relations.first(); i; i = relations.next() )
457 if( !mOrphanUids.find( i->uid() ) ) { 457 if( !mOrphanUids.find( i->uid() ) ) {
458 mOrphans.insert( uid, i ); 458 mOrphans.insert( uid, i );
459 mOrphanUids.insert( i->uid(), i ); 459 mOrphanUids.insert( i->uid(), i );
460 i->setRelatedTo( 0 ); 460 i->setRelatedTo( 0 );
461 i->setRelatedToUid( uid ); 461 i->setRelatedToUid( uid );
462 } 462 }
463 463
464 // If this incidence is related to something else, tell that about it 464 // If this incidence is related to something else, tell that about it
465 if( incidence->relatedTo() ) 465 if( incidence->relatedTo() )
466 incidence->relatedTo()->removeRelation( incidence ); 466 incidence->relatedTo()->removeRelation( incidence );
467 467
468 // Remove this one from the orphans list 468 // Remove this one from the orphans list
469 if( mOrphanUids.remove( uid ) ) { 469 if( mOrphanUids.remove( uid ) ) {
470 QString r2uid = incidence->relatedToUid(); 470 QString r2uid = incidence->relatedToUid();
471 QPtrList<Incidence> tempList; 471 QPtrList<Incidence> tempList;
472 while( Incidence* i = mOrphans[ r2uid ] ) { 472 while( Incidence* i = mOrphans[ r2uid ] ) {
473 mOrphans.remove( r2uid ); 473 mOrphans.remove( r2uid );
474 if ( i != incidence ) tempList.append( i ); 474 if ( i != incidence ) tempList.append( i );
475 } 475 }
476 Incidence* inc = tempList.first(); 476 Incidence* inc = tempList.first();
477 while ( inc ) { 477 while ( inc ) {
478 mOrphans.insert( r2uid, inc ); 478 mOrphans.insert( r2uid, inc );
479 inc = tempList.next(); 479 inc = tempList.next();
480 } 480 }
481 } 481 }
482 // LR: and another big bad bug found 482 // LR: and another big bad bug found
483#if 0 483#if 0
484 // This incidence is located in the orphans list - it should be removed 484 // This incidence is located in the orphans list - it should be removed
485 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) { 485 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) {
486 // Removing wasn't that easy 486 // Removing wasn't that easy
487 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) { 487 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) {
488 if( it.current()->uid() == uid ) { 488 if( it.current()->uid() == uid ) {
489 mOrphans.remove( it.currentKey() ); 489 mOrphans.remove( it.currentKey() );
490 break; 490 break;
491 } 491 }
492 } 492 }
493 } 493 }
494#endif 494#endif
495} 495}
496 496
497void Calendar::registerObserver( Observer *observer ) 497void Calendar::registerObserver( Observer *observer )
498{ 498{
499 mObserver = observer; 499 mObserver = observer;
500 mNewObserver = true; 500 mNewObserver = true;
501} 501}
502 502
503void Calendar::setModified( bool modified ) 503void Calendar::setModified( bool modified )
504{ 504{
505 if ( mObserver ) mObserver->calendarModified( modified, this ); 505 if ( mObserver ) mObserver->calendarModified( modified, this );
506 if ( modified != mModified || mNewObserver ) { 506 if ( modified != mModified || mNewObserver ) {
507 mNewObserver = false; 507 mNewObserver = false;
508 // if ( mObserver ) mObserver->calendarModified( modified, this ); 508 // if ( mObserver ) mObserver->calendarModified( modified, this );
509 mModified = modified; 509 mModified = modified;
510 } 510 }
511} 511}
512 512
513void Calendar::setLoadedProductId( const QString &id ) 513void Calendar::setLoadedProductId( const QString &id )
514{ 514{
515 mLoadedProductId = id; 515 mLoadedProductId = id;
516} 516}
517 517
518QString Calendar::loadedProductId() 518QString Calendar::loadedProductId()
519{ 519{
520 return mLoadedProductId; 520 return mLoadedProductId;
521} 521}
522 522
523//#include "calendar.moc" 523//#include "calendar.moc"
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index c82ea92..b02f706 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,1080 +1,1080 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 registerObserver( 0 ); 68 registerObserver( 0 );
69 if ( mDeleteIncidencesOnClose ) 69 if ( mDeleteIncidencesOnClose )
70 close(); 70 close();
71} 71}
72bool CalendarLocal::mergeCalendarFile( QString name ) 72bool CalendarLocal::mergeCalendarFile( QString name )
73{ 73{
74 CalendarLocal calendar( timeZoneId() ); 74 CalendarLocal calendar( timeZoneId() );
75 calendar.setDefaultCalendar( 1 ); 75 calendar.setDefaultCalendar( 1 );
76 if ( calendar.load( name ) ) { 76 if ( calendar.load( name ) ) {
77 mergeCalendar( &calendar ); 77 mergeCalendar( &calendar );
78 return true; 78 return true;
79 } 79 }
80 return false; 80 return false;
81} 81}
82 82
83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates) 83Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckDuplicates)
84{ 84{
85 Todo *todo;; 85 Todo *todo;;
86 Incidence *retVal = 0; 86 Incidence *retVal = 0;
87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 87 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
88 if ( todo->uid() == uid ) { 88 if ( todo->uid() == uid ) {
89 if ( doNotCheckDuplicates ) return todo; 89 if ( doNotCheckDuplicates ) return todo;
90 if ( retVal ) { 90 if ( retVal ) {
91 if ( retVal->calID() > todo->calID() ) { 91 if ( retVal->calID() > todo->calID() ) {
92 retVal = todo; 92 retVal = todo;
93 } 93 }
94 } else { 94 } else {
95 retVal = todo; 95 retVal = todo;
96 } 96 }
97 } 97 }
98 } 98 }
99 if ( retVal ) return retVal; 99 if ( retVal ) return retVal;
100 Event *event; 100 Event *event;
101 for ( event = mEventList.first(); event; event = mEventList.next() ) { 101 for ( event = mEventList.first(); event; event = mEventList.next() ) {
102 if ( event->uid() == uid ) { 102 if ( event->uid() == uid ) {
103 if ( doNotCheckDuplicates ) return event; 103 if ( doNotCheckDuplicates ) return event;
104 if ( retVal ) { 104 if ( retVal ) {
105 if ( retVal->calID() > event->calID() ) { 105 if ( retVal->calID() > event->calID() ) {
106 retVal = event; 106 retVal = event;
107 } 107 }
108 } else { 108 } else {
109 retVal = event; 109 retVal = event;
110 } 110 }
111 } 111 }
112 } 112 }
113 if ( retVal ) return retVal; 113 if ( retVal ) return retVal;
114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 114 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
115 if ( it->uid() == uid ) { 115 if ( it->uid() == uid ) {
116 if ( doNotCheckDuplicates ) return it; 116 if ( doNotCheckDuplicates ) return it;
117 if ( retVal ) { 117 if ( retVal ) {
118 if ( retVal->calID() > it->calID() ) { 118 if ( retVal->calID() > it->calID() ) {
119 retVal = it; 119 retVal = it;
120 } 120 }
121 } else { 121 } else {
122 retVal = it; 122 retVal = it;
123 } 123 }
124 } 124 }
125 return retVal; 125 return retVal;
126} 126}
127 127
128bool CalendarLocal::mergeCalendar( Calendar* remote ) 128bool CalendarLocal::mergeCalendar( Calendar* remote )
129{ 129{
130 // 1 look for raw inc in local 130 // 1 look for raw inc in local
131 // if inc not in remote, delete in local 131 // if inc not in remote, delete in local
132 // 2 look for raw inc in remote 132 // 2 look for raw inc in remote
133 // if inc in local, replace it 133 // if inc in local, replace it
134 // if not in local, add it to default calendar 134 // if not in local, add it to default calendar
135 QPtrList<Incidence> localInc = rawIncidences(); 135 QPtrList<Incidence> localInc = rawIncidences();
136 Incidence* inL = localInc.first(); 136 Incidence* inL = localInc.first();
137 while ( inL ) { 137 while ( inL ) {
138 if ( ! inL->isReadOnly () ) 138 if ( ! inL->isReadOnly () )
139 if ( !remote->incidenceForUid( inL->uid(), true )) 139 if ( !remote->incidenceForUid( inL->uid(), true ))
140 deleteIncidence( inL ); 140 deleteIncidence( inL );
141 inL = localInc.next(); 141 inL = localInc.next();
142 } 142 }
143 QPtrList<Incidence> er = remote->rawIncidences(); 143 QPtrList<Incidence> er = remote->rawIncidences();
144 Incidence* inR = er.first(); 144 Incidence* inR = er.first();
145 while ( inR ) { 145 while ( inR ) {
146 inL = incidenceForUid( inR->uid(),false ); 146 inL = incidenceForUid( inR->uid(),false );
147 if ( inL ) { 147 if ( inL ) {
148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) { 148 if ( ! inL->isReadOnly () || inL->uid().left(15) == QString("last-syncEvent-") ) {
149 int calID = inL->calID(); 149 int calID = inL->calID();
150 deleteIncidence( inL ); 150 deleteIncidence( inL );
151 inL = inR->clone(); 151 inL = inR->clone();
152 inL->setCalID( calID ); 152 inL->setCalID_block( calID );
153 addIncidence( inL ); 153 addIncidence( inL );
154 } 154 }
155 } else { 155 } else {
156 inL = inR->clone(); 156 inL = inR->clone();
157 inL->setCalID( 0 );// add to default cal 157 inL->setCalID_block( 0 );// add to default cal
158 addIncidence( inL ); 158 addIncidence( inL );
159 } 159 }
160 inR = er.next(); 160 inR = er.next();
161 } 161 }
162 return true; 162 return true;
163} 163}
164 164
165 165
166bool CalendarLocal::addCalendarFile( QString name, int id ) 166bool CalendarLocal::addCalendarFile( QString name, int id )
167{ 167{
168 CalendarLocal calendar( timeZoneId() ); 168 CalendarLocal calendar( timeZoneId() );
169 calendar.setDefaultCalendar( id ); 169 calendar.setDefaultCalendar( id );
170 if ( calendar.load( name ) ) { 170 if ( calendar.load( name ) ) {
171 addCalendar( &calendar ); 171 addCalendar( &calendar );
172 return true; 172 return true;
173 } 173 }
174 return false; 174 return false;
175} 175}
176void CalendarLocal::setSyncEventsEnabled() 176void CalendarLocal::setSyncEventsEnabled()
177{ 177{
178 Event * ev; 178 Event * ev;
179 ev = mEventList.first(); 179 ev = mEventList.first();
180 while ( ev ) { 180 while ( ev ) {
181 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 181 if ( ev->uid().left(15) == QString("last-syncEvent-") )
182 ev->setCalEnabled( true ); 182 ev->setCalEnabled( true );
183 ev = mEventList.next(); 183 ev = mEventList.next();
184 } 184 }
185} 185}
186void CalendarLocal::setSyncEventsReadOnly() 186void CalendarLocal::setSyncEventsReadOnly()
187{ 187{
188 Event * ev; 188 Event * ev;
189 ev = mEventList.first(); 189 ev = mEventList.first();
190 while ( ev ) { 190 while ( ev ) {
191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) { 191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) {
192 ev->setReadOnly( true ); 192 ev->setReadOnly( true );
193 } 193 }
194 ev = mEventList.next(); 194 ev = mEventList.next();
195 } 195 }
196} 196}
197 197
198void CalendarLocal::addCalendar( Calendar* cal ) 198void CalendarLocal::addCalendar( Calendar* cal )
199{ 199{
200 cal->setDontDeleteIncidencesOnClose(); 200 cal->setDontDeleteIncidencesOnClose();
201 setSyncEventsEnabled(); 201 setSyncEventsEnabled();
202 { 202 {
203 QPtrList<Event> EventList = cal->rawEvents(); 203 QPtrList<Event> EventList = cal->rawEvents();
204 QPtrList<Event> el; 204 QPtrList<Event> el;
205 Event * ev = EventList.first(); 205 Event * ev = EventList.first();
206 while ( ev ) { 206 while ( ev ) {
207 if ( ev->uid().left( 15 ) == QString("last-syncEvent-") ) { 207 if ( ev->uid().left( 15 ) == QString("last-syncEvent-") ) {
208 Event * se = event( ev->uid() ); 208 Event * se = event( ev->uid() );
209 if ( se ) 209 if ( se )
210 el.append( se ); 210 el.append( se );
211 ev->setCalID( 1 ); 211 ev->setCalID_block( 1 );
212 } 212 }
213 ev->unRegisterObserver( cal ); 213 ev->unRegisterObserver( cal );
214 ev->registerObserver( this ); 214 ev->registerObserver( this );
215 mEventList.append( ev ); 215 mEventList.append( ev );
216 ev = EventList.next(); 216 ev = EventList.next();
217 } 217 }
218 for ( ev = el.first(); ev; ev = el.next() ) { 218 for ( ev = el.first(); ev; ev = el.next() ) {
219 deleteIncidence ( ev ); 219 deleteIncidence ( ev );
220 } 220 }
221 } 221 }
222 { 222 {
223 223
224 QPtrList<Todo> TodoList = cal->rawTodos(); 224 QPtrList<Todo> TodoList = cal->rawTodos();
225 Todo * ev = TodoList.first(); 225 Todo * ev = TodoList.first();
226 while ( ev ) { 226 while ( ev ) {
227 QString rel = ev->relatedToUid(); 227 QString rel = ev->relatedToUid();
228 if ( !rel.isEmpty() ){ 228 if ( !rel.isEmpty() ){
229 ev->setRelatedTo ( 0 ); 229 ev->setRelatedTo ( 0 );
230 ev->setRelatedToUid( rel ); 230 ev->setRelatedToUid( rel );
231 } 231 }
232 ev = TodoList.next(); 232 ev = TodoList.next();
233 } 233 }
234 //TodoList = cal->rawTodos(); 234 //TodoList = cal->rawTodos();
235 ev = TodoList.first(); 235 ev = TodoList.first();
236 while ( ev ) { 236 while ( ev ) {
237 ev->unRegisterObserver( cal ); 237 ev->unRegisterObserver( cal );
238 ev->registerObserver( this ); 238 ev->registerObserver( this );
239 mTodoList.append( ev ); 239 mTodoList.append( ev );
240 setupRelations( ev ); 240 setupRelations( ev );
241 ev = TodoList.next(); 241 ev = TodoList.next();
242 } 242 }
243 } 243 }
244 { 244 {
245 QPtrList<Journal> JournalList = cal->journals(); 245 QPtrList<Journal> JournalList = cal->journals();
246 Journal * ev = JournalList.first(); 246 Journal * ev = JournalList.first();
247 while ( ev ) { 247 while ( ev ) {
248 ev->unRegisterObserver( cal ); 248 ev->unRegisterObserver( cal );
249 ev->registerObserver( this ); 249 ev->registerObserver( this );
250 mJournalList.append( ev ); 250 mJournalList.append( ev );
251 ev = JournalList.next(); 251 ev = JournalList.next();
252 } 252 }
253 } 253 }
254 setModified( true ); 254 setModified( true );
255} 255}
256bool CalendarLocal::load( const QString &fileName ) 256bool CalendarLocal::load( const QString &fileName )
257{ 257{
258 FileStorage storage( this, fileName ); 258 FileStorage storage( this, fileName );
259 return storage.load(); 259 return storage.load();
260} 260}
261 261
262bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 262bool CalendarLocal::save( const QString &fileName, CalFormat *format )
263{ 263{
264 FileStorage storage( this, fileName, format ); 264 FileStorage storage( this, fileName, format );
265 return storage.save(); 265 return storage.save();
266} 266}
267 267
268void CalendarLocal::stopAllTodos() 268void CalendarLocal::stopAllTodos()
269{ 269{
270 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 270 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
271 it->setRunning( false ); 271 it->setRunning( false );
272 272
273} 273}
274void CalendarLocal::close() 274void CalendarLocal::close()
275{ 275{
276 276
277 Todo * i; 277 Todo * i;
278 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 278 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
279 279
280 mEventList.setAutoDelete( true ); 280 mEventList.setAutoDelete( true );
281 mTodoList.setAutoDelete( true ); 281 mTodoList.setAutoDelete( true );
282 mJournalList.setAutoDelete( true ); 282 mJournalList.setAutoDelete( true );
283 283
284 mEventList.clear(); 284 mEventList.clear();
285 mTodoList.clear(); 285 mTodoList.clear();
286 mJournalList.clear(); 286 mJournalList.clear();
287 287
288 mEventList.setAutoDelete( false ); 288 mEventList.setAutoDelete( false );
289 mTodoList.setAutoDelete( false ); 289 mTodoList.setAutoDelete( false );
290 mJournalList.setAutoDelete( false ); 290 mJournalList.setAutoDelete( false );
291 291
292 setModified( false ); 292 setModified( false );
293} 293}
294 294
295bool CalendarLocal::addAnniversaryNoDup( Event *event ) 295bool CalendarLocal::addAnniversaryNoDup( Event *event )
296{ 296{
297 QString cat; 297 QString cat;
298 bool isBirthday = true; 298 bool isBirthday = true;
299 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 299 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
300 isBirthday = false; 300 isBirthday = false;
301 cat = i18n( "Anniversary" ); 301 cat = i18n( "Anniversary" );
302 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 302 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
303 isBirthday = true; 303 isBirthday = true;
304 cat = i18n( "Birthday" ); 304 cat = i18n( "Birthday" );
305 } else { 305 } else {
306 qDebug("addAnniversaryNoDup called without fitting category! "); 306 qDebug("addAnniversaryNoDup called without fitting category! ");
307 return false; 307 return false;
308 } 308 }
309 Event * eve; 309 Event * eve;
310 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 310 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
311 if ( !(eve->categories().contains( cat ) )) 311 if ( !(eve->categories().contains( cat ) ))
312 continue; 312 continue;
313 // now we have an event with fitting category 313 // now we have an event with fitting category
314 if ( eve->dtStart().date() != event->dtStart().date() ) 314 if ( eve->dtStart().date() != event->dtStart().date() )
315 continue; 315 continue;
316 // now we have an event with fitting category+date 316 // now we have an event with fitting category+date
317 if ( eve->summary() != event->summary() ) 317 if ( eve->summary() != event->summary() )
318 continue; 318 continue;
319 // now we have an event with fitting category+date+summary 319 // now we have an event with fitting category+date+summary
320 return false; 320 return false;
321 } 321 }
322 return addEvent( event ); 322 return addEvent( event );
323 323
324} 324}
325bool CalendarLocal::addEventNoDup( Event *event ) 325bool CalendarLocal::addEventNoDup( Event *event )
326{ 326{
327 Event * eve; 327 Event * eve;
328 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 328 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
329 if ( *eve == *event ) { 329 if ( *eve == *event ) {
330 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 330 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
331 return false; 331 return false;
332 } 332 }
333 } 333 }
334 return addEvent( event ); 334 return addEvent( event );
335} 335}
336 336
337bool CalendarLocal::addEvent( Event *event ) 337bool CalendarLocal::addEvent( Event *event )
338{ 338{
339 insertEvent( event ); 339 insertEvent( event );
340 340
341 event->registerObserver( this ); 341 event->registerObserver( this );
342 342
343 setModified( true ); 343 setModified( true );
344 if ( event->calID() == 0 ) 344 if ( event->calID() == 0 )
345 event->setCalID( mDefaultCalendar ); 345 event->setCalID_block( mDefaultCalendar );
346 event->setCalEnabled( true ); 346 event->setCalEnabled( true );
347 347
348 return true; 348 return true;
349} 349}
350 350
351void CalendarLocal::deleteEvent( Event *event ) 351void CalendarLocal::deleteEvent( Event *event )
352{ 352{
353 clearUndo(event); 353 clearUndo(event);
354 if ( mEventList.removeRef( event ) ) { 354 if ( mEventList.removeRef( event ) ) {
355 setModified( true ); 355 setModified( true );
356 } 356 }
357} 357}
358 358
359 359
360Event *CalendarLocal::event( const QString &uid ) 360Event *CalendarLocal::event( const QString &uid )
361{ 361{
362 Event *event; 362 Event *event;
363 Event *retVal = 0; 363 Event *retVal = 0;
364 for ( event = mEventList.first(); event; event = mEventList.next() ) { 364 for ( event = mEventList.first(); event; event = mEventList.next() ) {
365 if ( event->calEnabled() && event->uid() == uid ) { 365 if ( event->calEnabled() && event->uid() == uid ) {
366 if ( retVal ) { 366 if ( retVal ) {
367 if ( retVal->calID() > event->calID() ) { 367 if ( retVal->calID() > event->calID() ) {
368 retVal = event; 368 retVal = event;
369 } 369 }
370 } else { 370 } else {
371 retVal = event; 371 retVal = event;
372 } 372 }
373 } 373 }
374 } 374 }
375 return retVal; 375 return retVal;
376} 376}
377bool CalendarLocal::addTodoNoDup( Todo *todo ) 377bool CalendarLocal::addTodoNoDup( Todo *todo )
378{ 378{
379 Todo * eve; 379 Todo * eve;
380 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 380 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
381 if ( *eve == *todo ) { 381 if ( *eve == *todo ) {
382 //qDebug("duplicate todo found! not inserted! "); 382 //qDebug("duplicate todo found! not inserted! ");
383 return false; 383 return false;
384 } 384 }
385 } 385 }
386 return addTodo( todo ); 386 return addTodo( todo );
387} 387}
388bool CalendarLocal::addTodo( Todo *todo ) 388bool CalendarLocal::addTodo( Todo *todo )
389{ 389{
390 mTodoList.append( todo ); 390 mTodoList.append( todo );
391 391
392 todo->registerObserver( this ); 392 todo->registerObserver( this );
393 393
394 // Set up subtask relations 394 // Set up subtask relations
395 setupRelations( todo ); 395 setupRelations( todo );
396 396
397 setModified( true ); 397 setModified( true );
398 if ( todo->calID() == 0 ) 398 if ( todo->calID() == 0 )
399 todo->setCalID( mDefaultCalendar ); 399 todo->setCalID_block( mDefaultCalendar );
400 todo->setCalEnabled( true ); 400 todo->setCalEnabled( true );
401 return true; 401 return true;
402} 402}
403 403
404void CalendarLocal::deleteTodo( Todo *todo ) 404void CalendarLocal::deleteTodo( Todo *todo )
405{ 405{
406 // Handle orphaned children 406 // Handle orphaned children
407 removeRelations( todo ); 407 removeRelations( todo );
408 clearUndo(todo); 408 clearUndo(todo);
409 409
410 if ( mTodoList.removeRef( todo ) ) { 410 if ( mTodoList.removeRef( todo ) ) {
411 setModified( true ); 411 setModified( true );
412 } 412 }
413} 413}
414 414
415QPtrList<Todo> CalendarLocal::rawTodos() 415QPtrList<Todo> CalendarLocal::rawTodos()
416{ 416{
417 QPtrList<Todo> el; 417 QPtrList<Todo> el;
418 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 418 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
419 if ( it->calEnabled() ) el.append( it ); 419 if ( it->calEnabled() ) el.append( it );
420 return el; 420 return el;
421} 421}
422Todo *CalendarLocal::todo( QString syncProf, QString id ) 422Todo *CalendarLocal::todo( QString syncProf, QString id )
423{ 423{
424 Todo *todo; 424 Todo *todo;
425 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 425 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
426 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 426 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
427 } 427 }
428 428
429 return 0; 429 return 0;
430} 430}
431void CalendarLocal::removeSyncInfo( QString syncProfile) 431void CalendarLocal::removeSyncInfo( QString syncProfile)
432{ 432{
433 QPtrList<Incidence> all = rawIncidences() ; 433 QPtrList<Incidence> all = rawIncidences() ;
434 Incidence *inc; 434 Incidence *inc;
435 for ( inc = all.first(); inc; inc = all.next() ) { 435 for ( inc = all.first(); inc; inc = all.next() ) {
436 inc->removeID( syncProfile ); 436 inc->removeID( syncProfile );
437 } 437 }
438 if ( syncProfile.isEmpty() ) { 438 if ( syncProfile.isEmpty() ) {
439 QPtrList<Event> el; 439 QPtrList<Event> el;
440 Event *todo; 440 Event *todo;
441 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 441 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
442 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 442 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
443 el.append( todo ); 443 el.append( todo );
444 } 444 }
445 for ( todo = el.first(); todo; todo = el.next() ) { 445 for ( todo = el.first(); todo; todo = el.next() ) {
446 deleteIncidence ( todo ); 446 deleteIncidence ( todo );
447 } 447 }
448 } else { 448 } else {
449 Event *lse = event( "last-syncEvent-"+ syncProfile); 449 Event *lse = event( "last-syncEvent-"+ syncProfile);
450 if ( lse ) 450 if ( lse )
451 deleteIncidence ( lse ); 451 deleteIncidence ( lse );
452 } 452 }
453} 453}
454QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 454QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
455{ 455{
456 QPtrList<Event> el; 456 QPtrList<Event> el;
457 Event *todo; 457 Event *todo;
458 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 458 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
459 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 459 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
460 if ( todo->summary().left(3) == "E: " ) 460 if ( todo->summary().left(3) == "E: " )
461 el.append( todo ); 461 el.append( todo );
462 } 462 }
463 463
464 return el; 464 return el;
465 465
466} 466}
467Event *CalendarLocal::event( QString syncProf, QString id ) 467Event *CalendarLocal::event( QString syncProf, QString id )
468{ 468{
469 Event *todo; 469 Event *todo;
470 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 470 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
471 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 471 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
472 } 472 }
473 473
474 return 0; 474 return 0;
475} 475}
476Todo *CalendarLocal::todo( const QString &uid ) 476Todo *CalendarLocal::todo( const QString &uid )
477{ 477{
478 Todo *todo; 478 Todo *todo;
479 Todo *retVal = 0; 479 Todo *retVal = 0;
480 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 480 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
481 if ( todo->calEnabled() && todo->uid() == uid ) { 481 if ( todo->calEnabled() && todo->uid() == uid ) {
482 if ( retVal ) { 482 if ( retVal ) {
483 if ( retVal->calID() > todo->calID() ) { 483 if ( retVal->calID() > todo->calID() ) {
484 retVal = todo; 484 retVal = todo;
485 } 485 }
486 } else { 486 } else {
487 retVal = todo; 487 retVal = todo;
488 } 488 }
489 } 489 }
490 } 490 }
491 return retVal; 491 return retVal;
492} 492}
493void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals) 493void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals)
494{ 494{
495 events = 0; 495 events = 0;
496 todos = 0; 496 todos = 0;
497 journals = 0; 497 journals = 0;
498 { 498 {
499 Todo *todo; 499 Todo *todo;
500 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 500 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
501 if ( todo->calID() == calId ) 501 if ( todo->calID() == calId )
502 ++todos; 502 ++todos;
503 } 503 }
504 } 504 }
505 { 505 {
506 Event *todo; 506 Event *todo;
507 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 507 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
508 if ( todo->calID() == calId ) 508 if ( todo->calID() == calId )
509 ++events; 509 ++events;
510 510
511 } 511 }
512 } 512 }
513 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 513 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
514 if ( it->calID() == calId ) ++journals; 514 if ( it->calID() == calId ) ++journals;
515 515
516} 516}
517QString CalendarLocal::nextSummary() const 517QString CalendarLocal::nextSummary() const
518{ 518{
519 return mNextSummary; 519 return mNextSummary;
520} 520}
521QDateTime CalendarLocal::nextAlarmEventDateTime() const 521QDateTime CalendarLocal::nextAlarmEventDateTime() const
522{ 522{
523 return mNextAlarmEventDateTime; 523 return mNextAlarmEventDateTime;
524} 524}
525void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 525void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
526{ 526{
527 //mNextAlarmIncidence 527 //mNextAlarmIncidence
528 //mNextAlarmDateTime 528 //mNextAlarmDateTime
529 //return mNextSummary; 529 //return mNextSummary;
530 //return mNextAlarmEventDateTime; 530 //return mNextAlarmEventDateTime;
531 bool newNextAlarm = false; 531 bool newNextAlarm = false;
532 bool computeNextAlarm = false; 532 bool computeNextAlarm = false;
533 bool ok; 533 bool ok;
534 int offset; 534 int offset;
535 QDateTime nextA; 535 QDateTime nextA;
536 // QString nextSum; 536 // QString nextSum;
537 //QDateTime nextEvent; 537 //QDateTime nextEvent;
538 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 538 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
539 computeNextAlarm = true; 539 computeNextAlarm = true;
540 } else { 540 } else {
541 if ( ! deleted ) { 541 if ( ! deleted ) {
542 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 542 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
543 if ( ok ) { 543 if ( ok ) {
544 if ( nextA < mNextAlarmDateTime ) { 544 if ( nextA < mNextAlarmDateTime ) {
545 deRegisterAlarm(); 545 deRegisterAlarm();
546 mNextAlarmDateTime = nextA; 546 mNextAlarmDateTime = nextA;
547 mNextSummary = incidence->summary(); 547 mNextSummary = incidence->summary();
548 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 548 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
549 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 549 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
550 newNextAlarm = true; 550 newNextAlarm = true;
551 mNextAlarmIncidence = incidence; 551 mNextAlarmIncidence = incidence;
552 } else { 552 } else {
553 if ( incidence == mNextAlarmIncidence ) { 553 if ( incidence == mNextAlarmIncidence ) {
554 computeNextAlarm = true; 554 computeNextAlarm = true;
555 } 555 }
556 } 556 }
557 } else { 557 } else {
558 if ( mNextAlarmIncidence == incidence ) { 558 if ( mNextAlarmIncidence == incidence ) {
559 computeNextAlarm = true; 559 computeNextAlarm = true;
560 } 560 }
561 } 561 }
562 } else { // deleted 562 } else { // deleted
563 if ( incidence == mNextAlarmIncidence ) { 563 if ( incidence == mNextAlarmIncidence ) {
564 computeNextAlarm = true; 564 computeNextAlarm = true;
565 } 565 }
566 } 566 }
567 } 567 }
568 if ( computeNextAlarm ) { 568 if ( computeNextAlarm ) {
569 deRegisterAlarm(); 569 deRegisterAlarm();
570 nextA = nextAlarm( 1000 ); 570 nextA = nextAlarm( 1000 );
571 if (! mNextAlarmIncidence ) { 571 if (! mNextAlarmIncidence ) {
572 return; 572 return;
573 } 573 }
574 newNextAlarm = true; 574 newNextAlarm = true;
575 } 575 }
576 if ( newNextAlarm ) 576 if ( newNextAlarm )
577 registerAlarm(); 577 registerAlarm();
578} 578}
579QString CalendarLocal:: getAlarmNotification() 579QString CalendarLocal:: getAlarmNotification()
580{ 580{
581 QString ret; 581 QString ret;
582 // this should not happen 582 // this should not happen
583 if (! mNextAlarmIncidence ) 583 if (! mNextAlarmIncidence )
584 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 584 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
585 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 585 Alarm* alarm = mNextAlarmIncidence->alarms().first();
586 if ( alarm->type() == Alarm::Procedure ) { 586 if ( alarm->type() == Alarm::Procedure ) {
587 ret = "proc_alarm" + alarm->programFile()+"+++"; 587 ret = "proc_alarm" + alarm->programFile()+"+++";
588 } else { 588 } else {
589 ret = "audio_alarm" +alarm->audioFile() +"+++"; 589 ret = "audio_alarm" +alarm->audioFile() +"+++";
590 } 590 }
591 ret += "cal_alarm"+ mNextSummary.left( 25 ); 591 ret += "cal_alarm"+ mNextSummary.left( 25 );
592 if ( mNextSummary.length() > 25 ) 592 if ( mNextSummary.length() > 25 )
593 ret += "\n" + mNextSummary.mid(25, 25 ); 593 ret += "\n" + mNextSummary.mid(25, 25 );
594 ret+= "\n"+mNextAlarmEventDateTimeString; 594 ret+= "\n"+mNextAlarmEventDateTimeString;
595 return ret; 595 return ret;
596} 596}
597void CalendarLocal::registerAlarm() 597void CalendarLocal::registerAlarm()
598{ 598{
599 mLastAlarmNotificationString = getAlarmNotification(); 599 mLastAlarmNotificationString = getAlarmNotification();
600 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 600 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
601 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 601 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
602// #ifndef DESKTOP_VERSION 602// #ifndef DESKTOP_VERSION
603// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 603// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
604// #endif 604// #endif
605} 605}
606void CalendarLocal::deRegisterAlarm() 606void CalendarLocal::deRegisterAlarm()
607{ 607{
608 if ( mLastAlarmNotificationString.isNull() ) 608 if ( mLastAlarmNotificationString.isNull() )
609 return; 609 return;
610 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 610 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
611 611
612 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 612 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
613 mNextAlarmEventDateTime = QDateTime(); 613 mNextAlarmEventDateTime = QDateTime();
614// #ifndef DESKTOP_VERSION 614// #ifndef DESKTOP_VERSION
615// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 615// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
616// #endif 616// #endif
617} 617}
618 618
619QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 619QPtrList<Todo> CalendarLocal::todos( const QDate &date )
620{ 620{
621 QPtrList<Todo> todos; 621 QPtrList<Todo> todos;
622 622
623 Todo *todo; 623 Todo *todo;
624 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 624 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
625 if ( !todo->calEnabled() ) continue; 625 if ( !todo->calEnabled() ) continue;
626 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 626 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
627 todos.append( todo ); 627 todos.append( todo );
628 } 628 }
629 } 629 }
630 630
631 filter()->apply( &todos ); 631 filter()->apply( &todos );
632 return todos; 632 return todos;
633} 633}
634void CalendarLocal::reInitAlarmSettings() 634void CalendarLocal::reInitAlarmSettings()
635{ 635{
636 if ( !mNextAlarmIncidence ) { 636 if ( !mNextAlarmIncidence ) {
637 nextAlarm( 1000 ); 637 nextAlarm( 1000 );
638 } 638 }
639 deRegisterAlarm(); 639 deRegisterAlarm();
640 mNextAlarmIncidence = 0; 640 mNextAlarmIncidence = 0;
641 checkAlarmForIncidence( 0, false ); 641 checkAlarmForIncidence( 0, false );
642 642
643} 643}
644 644
645 645
646 646
647QDateTime CalendarLocal::nextAlarm( int daysTo ) 647QDateTime CalendarLocal::nextAlarm( int daysTo )
648{ 648{
649 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 649 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
650 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 650 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
651 QDateTime next; 651 QDateTime next;
652 Event *e; 652 Event *e;
653 bool ok; 653 bool ok;
654 bool found = false; 654 bool found = false;
655 int offset; 655 int offset;
656 mNextAlarmIncidence = 0; 656 mNextAlarmIncidence = 0;
657 for( e = mEventList.first(); e; e = mEventList.next() ) { 657 for( e = mEventList.first(); e; e = mEventList.next() ) {
658 if ( !e->calEnabled() ) continue; 658 if ( !e->calEnabled() ) continue;
659 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 659 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
660 if ( ok ) { 660 if ( ok ) {
661 if ( next < nextA ) { 661 if ( next < nextA ) {
662 nextA = next; 662 nextA = next;
663 found = true; 663 found = true;
664 mNextSummary = e->summary(); 664 mNextSummary = e->summary();
665 mNextAlarmEventDateTime = next.addSecs(offset ) ; 665 mNextAlarmEventDateTime = next.addSecs(offset ) ;
666 mNextAlarmIncidence = (Incidence *) e; 666 mNextAlarmIncidence = (Incidence *) e;
667 } 667 }
668 } 668 }
669 } 669 }
670 Todo *t; 670 Todo *t;
671 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 671 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
672 if ( !t->calEnabled() ) continue; 672 if ( !t->calEnabled() ) continue;
673 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 673 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
674 if ( ok ) { 674 if ( ok ) {
675 if ( next < nextA ) { 675 if ( next < nextA ) {
676 nextA = next; 676 nextA = next;
677 found = true; 677 found = true;
678 mNextSummary = t->summary(); 678 mNextSummary = t->summary();
679 mNextAlarmEventDateTime = next.addSecs(offset ); 679 mNextAlarmEventDateTime = next.addSecs(offset );
680 mNextAlarmIncidence = (Incidence *) t; 680 mNextAlarmIncidence = (Incidence *) t;
681 } 681 }
682 } 682 }
683 } 683 }
684 if ( mNextAlarmIncidence ) { 684 if ( mNextAlarmIncidence ) {
685 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 685 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
686 mNextAlarmDateTime = nextA; 686 mNextAlarmDateTime = nextA;
687 } 687 }
688 return nextA; 688 return nextA;
689} 689}
690Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 690Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
691{ 691{
692 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 692 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
693} 693}
694 694
695Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 695Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
696{ 696{
697 697
698 Alarm::List alarms; 698 Alarm::List alarms;
699 699
700 Event *e; 700 Event *e;
701 701
702 for( e = mEventList.first(); e; e = mEventList.next() ) { 702 for( e = mEventList.first(); e; e = mEventList.next() ) {
703 if ( !e->calEnabled() ) continue; 703 if ( !e->calEnabled() ) continue;
704 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 704 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
705 else appendAlarms( alarms, e, from, to ); 705 else appendAlarms( alarms, e, from, to );
706 } 706 }
707 707
708 Todo *t; 708 Todo *t;
709 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 709 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
710 if ( !t->calEnabled() ) continue; 710 if ( !t->calEnabled() ) continue;
711 appendAlarms( alarms, t, from, to ); 711 appendAlarms( alarms, t, from, to );
712 } 712 }
713 713
714 return alarms; 714 return alarms;
715} 715}
716 716
717void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 717void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
718 const QDateTime &from, const QDateTime &to ) 718 const QDateTime &from, const QDateTime &to )
719{ 719{
720 QPtrList<Alarm> alarmList = incidence->alarms(); 720 QPtrList<Alarm> alarmList = incidence->alarms();
721 Alarm *alarm; 721 Alarm *alarm;
722 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 722 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
723// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 723// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
724// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 724// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
725 if ( alarm->enabled() ) { 725 if ( alarm->enabled() ) {
726 if ( alarm->time() >= from && alarm->time() <= to ) { 726 if ( alarm->time() >= from && alarm->time() <= to ) {
727 alarms.append( alarm ); 727 alarms.append( alarm );
728 } 728 }
729 } 729 }
730 } 730 }
731} 731}
732 732
733void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 733void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
734 Incidence *incidence, 734 Incidence *incidence,
735 const QDateTime &from, 735 const QDateTime &from,
736 const QDateTime &to ) 736 const QDateTime &to )
737{ 737{
738 738
739 QPtrList<Alarm> alarmList = incidence->alarms(); 739 QPtrList<Alarm> alarmList = incidence->alarms();
740 Alarm *alarm; 740 Alarm *alarm;
741 QDateTime qdt; 741 QDateTime qdt;
742 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 742 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
743 if (incidence->recursOn(from.date())) { 743 if (incidence->recursOn(from.date())) {
744 qdt.setTime(alarm->time().time()); 744 qdt.setTime(alarm->time().time());
745 qdt.setDate(from.date()); 745 qdt.setDate(from.date());
746 } 746 }
747 else qdt = alarm->time(); 747 else qdt = alarm->time();
748 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 748 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
749 if ( alarm->enabled() ) { 749 if ( alarm->enabled() ) {
750 if ( qdt >= from && qdt <= to ) { 750 if ( qdt >= from && qdt <= to ) {
751 alarms.append( alarm ); 751 alarms.append( alarm );
752 } 752 }
753 } 753 }
754 } 754 }
755} 755}
756 756
757 757
758/****************************** PROTECTED METHODS ****************************/ 758/****************************** PROTECTED METHODS ****************************/
759 759
760// after changes are made to an event, this should be called. 760// after changes are made to an event, this should be called.
761void CalendarLocal::update( IncidenceBase *incidence ) 761void CalendarLocal::update( IncidenceBase *incidence )
762{ 762{
763 incidence->setSyncStatus( Event::SYNCMOD ); 763 incidence->setSyncStatus( Event::SYNCMOD );
764 incidence->setLastModified( QDateTime::currentDateTime() ); 764 incidence->setLastModified( QDateTime::currentDateTime() );
765 // we should probably update the revision number here, 765 // we should probably update the revision number here,
766 // or internally in the Event itself when certain things change. 766 // or internally in the Event itself when certain things change.
767 // need to verify with ical documentation. 767 // need to verify with ical documentation.
768 768
769 setModified( true ); 769 setModified( true );
770} 770}
771 771
772void CalendarLocal::insertEvent( Event *event ) 772void CalendarLocal::insertEvent( Event *event )
773{ 773{
774 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 774 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
775} 775}
776 776
777 777
778QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 778QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
779{ 779{
780 QPtrList<Event> eventList; 780 QPtrList<Event> eventList;
781 781
782 Event *event; 782 Event *event;
783 for( event = mEventList.first(); event; event = mEventList.next() ) { 783 for( event = mEventList.first(); event; event = mEventList.next() ) {
784 if ( !event->calEnabled() ) continue; 784 if ( !event->calEnabled() ) continue;
785 if ( event->doesRecur() ) { 785 if ( event->doesRecur() ) {
786 if ( event->isMultiDay() ) { 786 if ( event->isMultiDay() ) {
787 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 787 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
788 int i; 788 int i;
789 for ( i = 0; i <= extraDays; i++ ) { 789 for ( i = 0; i <= extraDays; i++ ) {
790 if ( event->recursOn( qd.addDays( -i ) ) ) { 790 if ( event->recursOn( qd.addDays( -i ) ) ) {
791 eventList.append( event ); 791 eventList.append( event );
792 break; 792 break;
793 } 793 }
794 } 794 }
795 } else { 795 } else {
796 if ( event->recursOn( qd ) ) 796 if ( event->recursOn( qd ) )
797 eventList.append( event ); 797 eventList.append( event );
798 } 798 }
799 } else { 799 } else {
800 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 800 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
801 eventList.append( event ); 801 eventList.append( event );
802 } 802 }
803 } 803 }
804 } 804 }
805 805
806 if ( !sorted ) { 806 if ( !sorted ) {
807 return eventList; 807 return eventList;
808 } 808 }
809 809
810 // kdDebug(5800) << "Sorting events for date\n" << endl; 810 // kdDebug(5800) << "Sorting events for date\n" << endl;
811 // now, we have to sort it based on dtStart.time() 811 // now, we have to sort it based on dtStart.time()
812 QPtrList<Event> eventListSorted; 812 QPtrList<Event> eventListSorted;
813 Event *sortEvent; 813 Event *sortEvent;
814 for ( event = eventList.first(); event; event = eventList.next() ) { 814 for ( event = eventList.first(); event; event = eventList.next() ) {
815 sortEvent = eventListSorted.first(); 815 sortEvent = eventListSorted.first();
816 int i = 0; 816 int i = 0;
817 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 817 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
818 { 818 {
819 i++; 819 i++;
820 sortEvent = eventListSorted.next(); 820 sortEvent = eventListSorted.next();
821 } 821 }
822 eventListSorted.insert( i, event ); 822 eventListSorted.insert( i, event );
823 } 823 }
824 return eventListSorted; 824 return eventListSorted;
825} 825}
826 826
827 827
828QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 828QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
829 bool inclusive ) 829 bool inclusive )
830{ 830{
831 Event *event = 0; 831 Event *event = 0;
832 832
833 QPtrList<Event> eventList; 833 QPtrList<Event> eventList;
834 834
835 // Get non-recurring events 835 // Get non-recurring events
836 for( event = mEventList.first(); event; event = mEventList.next() ) { 836 for( event = mEventList.first(); event; event = mEventList.next() ) {
837 if ( !event->calEnabled() ) continue; 837 if ( !event->calEnabled() ) continue;
838 if ( event->doesRecur() ) { 838 if ( event->doesRecur() ) {
839 QDate rStart = event->dtStart().date(); 839 QDate rStart = event->dtStart().date();
840 bool found = false; 840 bool found = false;
841 if ( inclusive ) { 841 if ( inclusive ) {
842 if ( rStart >= start && rStart <= end ) { 842 if ( rStart >= start && rStart <= end ) {
843 // Start date of event is in range. Now check for end date. 843 // Start date of event is in range. Now check for end date.
844 // if duration is negative, event recurs forever, so do not include it. 844 // if duration is negative, event recurs forever, so do not include it.
845 if ( event->recurrence()->duration() == 0 ) { // End date set 845 if ( event->recurrence()->duration() == 0 ) { // End date set
846 QDate rEnd = event->recurrence()->endDate(); 846 QDate rEnd = event->recurrence()->endDate();
847 if ( rEnd >= start && rEnd <= end ) { // End date within range 847 if ( rEnd >= start && rEnd <= end ) { // End date within range
848 found = true; 848 found = true;
849 } 849 }
850 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 850 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
851 // TODO: Calculate end date from duration. Should be done in Event 851 // TODO: Calculate end date from duration. Should be done in Event
852 // For now exclude all events with a duration. 852 // For now exclude all events with a duration.
853 } 853 }
854 } 854 }
855 } else { 855 } else {
856 bool founOne; 856 bool founOne;
857 QDate next = event->getNextOccurence( start, &founOne ).date(); 857 QDate next = event->getNextOccurence( start, &founOne ).date();
858 if ( founOne ) { 858 if ( founOne ) {
859 if ( next <= end ) { 859 if ( next <= end ) {
860 found = true; 860 found = true;
861 } 861 }
862 } 862 }
863 863
864 /* 864 /*
865 // crap !!! 865 // crap !!!
866 if ( rStart <= end ) { // Start date not after range 866 if ( rStart <= end ) { // Start date not after range
867 if ( rStart >= start ) { // Start date within range 867 if ( rStart >= start ) { // Start date within range
868 found = true; 868 found = true;
869 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 869 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
870 found = true; 870 found = true;
871 } else if ( event->recurrence()->duration() == 0 ) { // End date set 871 } else if ( event->recurrence()->duration() == 0 ) { // End date set
872 QDate rEnd = event->recurrence()->endDate(); 872 QDate rEnd = event->recurrence()->endDate();
873 if ( rEnd >= start && rEnd <= end ) { // End date within range 873 if ( rEnd >= start && rEnd <= end ) { // End date within range
874 found = true; 874 found = true;
875 } 875 }
876 } else { // Duration set 876 } else { // Duration set
877 // TODO: Calculate end date from duration. Should be done in Event 877 // TODO: Calculate end date from duration. Should be done in Event
878 // For now include all events with a duration. 878 // For now include all events with a duration.
879 found = true; 879 found = true;
880 } 880 }
881 } 881 }
882 */ 882 */
883 883
884 } 884 }
885 885
886 if ( found ) eventList.append( event ); 886 if ( found ) eventList.append( event );
887 } else { 887 } else {
888 QDate s = event->dtStart().date(); 888 QDate s = event->dtStart().date();
889 QDate e = event->dtEnd().date(); 889 QDate e = event->dtEnd().date();
890 890
891 if ( inclusive ) { 891 if ( inclusive ) {
892 if ( s >= start && e <= end ) { 892 if ( s >= start && e <= end ) {
893 eventList.append( event ); 893 eventList.append( event );
894 } 894 }
895 } else { 895 } else {
896 if ( ( e >= start && s <= end ) ) { 896 if ( ( e >= start && s <= end ) ) {
897 eventList.append( event ); 897 eventList.append( event );
898 } 898 }
899 } 899 }
900 } 900 }
901 } 901 }
902 902
903 return eventList; 903 return eventList;
904} 904}
905 905
906QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 906QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
907{ 907{
908 return rawEventsForDate( qdt.date() ); 908 return rawEventsForDate( qdt.date() );
909} 909}
910 910
911QPtrList<Event> CalendarLocal::rawEvents() 911QPtrList<Event> CalendarLocal::rawEvents()
912{ 912{
913 QPtrList<Event> el; 913 QPtrList<Event> el;
914 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 914 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
915 if ( it->calEnabled() ) el.append( it ); 915 if ( it->calEnabled() ) el.append( it );
916 return el; 916 return el;
917} 917}
918 918
919bool CalendarLocal::addJournal(Journal *journal) 919bool CalendarLocal::addJournal(Journal *journal)
920{ 920{
921 mJournalList.append(journal); 921 mJournalList.append(journal);
922 922
923 journal->registerObserver( this ); 923 journal->registerObserver( this );
924 924
925 setModified( true ); 925 setModified( true );
926 if ( journal->calID() == 0 ) 926 if ( journal->calID() == 0 )
927 journal->setCalID( mDefaultCalendar ); 927 journal->setCalID_block( mDefaultCalendar );
928 journal->setCalEnabled( true ); 928 journal->setCalEnabled( true );
929 return true; 929 return true;
930} 930}
931 931
932void CalendarLocal::deleteJournal( Journal *journal ) 932void CalendarLocal::deleteJournal( Journal *journal )
933{ 933{
934 clearUndo(journal); 934 clearUndo(journal);
935 if ( mJournalList.removeRef(journal) ) { 935 if ( mJournalList.removeRef(journal) ) {
936 setModified( true ); 936 setModified( true );
937 } 937 }
938} 938}
939 939
940QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 940QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
941{ 941{
942 QPtrList<Journal> el; 942 QPtrList<Journal> el;
943 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 943 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
944 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 944 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
945 return el; 945 return el;
946} 946}
947Journal *CalendarLocal::journal( const QDate &date ) 947Journal *CalendarLocal::journal( const QDate &date )
948{ 948{
949// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 949// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
950 950
951 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 951 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
952 if ( it->calEnabled() && it->dtStart().date() == date ) 952 if ( it->calEnabled() && it->dtStart().date() == date )
953 return it; 953 return it;
954 954
955 return 0; 955 return 0;
956} 956}
957 957
958Journal *CalendarLocal::journal( const QString &uid ) 958Journal *CalendarLocal::journal( const QString &uid )
959{ 959{
960 Journal * retVal = 0; 960 Journal * retVal = 0;
961 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 961 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
962 if ( it->calEnabled() && it->uid() == uid ) { 962 if ( it->calEnabled() && it->uid() == uid ) {
963 if ( retVal ) { 963 if ( retVal ) {
964 if ( retVal->calID() > it->calID() ) { 964 if ( retVal->calID() > it->calID() ) {
965 retVal = it; 965 retVal = it;
966 } 966 }
967 } else { 967 } else {
968 retVal = it; 968 retVal = it;
969 } 969 }
970 } 970 }
971 return retVal; 971 return retVal;
972} 972}
973 973
974QPtrList<Journal> CalendarLocal::journals() 974QPtrList<Journal> CalendarLocal::journals()
975{ 975{
976 QPtrList<Journal> el; 976 QPtrList<Journal> el;
977 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 977 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
978 if ( it->calEnabled() ) el.append( it ); 978 if ( it->calEnabled() ) el.append( it );
979 return el; 979 return el;
980} 980}
981void CalendarLocal::setCalendarRemove( int id ) 981void CalendarLocal::setCalendarRemove( int id )
982{ 982{
983 983
984 { 984 {
985 QPtrList<Event> EventList = mEventList; 985 QPtrList<Event> EventList = mEventList;
986 Event * ev = EventList.first(); 986 Event * ev = EventList.first();
987 while ( ev ) { 987 while ( ev ) {
988 if ( ev->calID() == id && ev->uid().left( 15 ) != QString("last-syncEvent-") ) 988 if ( ev->calID() == id && ev->uid().left( 15 ) != QString("last-syncEvent-") )
989 deleteEvent( ev ); 989 deleteEvent( ev );
990 ev = EventList.next(); 990 ev = EventList.next();
991 } 991 }
992 } 992 }
993 { 993 {
994 994
995 QPtrList<Todo> TodoList = mTodoList; 995 QPtrList<Todo> TodoList = mTodoList;
996 Todo * ev = TodoList.first(); 996 Todo * ev = TodoList.first();
997 while ( ev ) { 997 while ( ev ) {
998 if ( ev->calID() == id ) 998 if ( ev->calID() == id )
999 deleteTodo( ev ); 999 deleteTodo( ev );
1000 ev = TodoList.next(); 1000 ev = TodoList.next();
1001 } 1001 }
1002 } 1002 }
1003 { 1003 {
1004 QPtrList<Journal> JournalList = mJournalList; 1004 QPtrList<Journal> JournalList = mJournalList;
1005 Journal * ev = JournalList.first(); 1005 Journal * ev = JournalList.first();
1006 while ( ev ) { 1006 while ( ev ) {
1007 if ( ev->calID() == id ) 1007 if ( ev->calID() == id )
1008 deleteJournal( ev ); 1008 deleteJournal( ev );
1009 ev = JournalList.next(); 1009 ev = JournalList.next();
1010 } 1010 }
1011 } 1011 }
1012 1012
1013 clearUndo(0); 1013 clearUndo(0);
1014 1014
1015} 1015}
1016 1016
1017void CalendarLocal::setAllCalendarEnabled( bool enable ) 1017void CalendarLocal::setAllCalendarEnabled( bool enable )
1018{ 1018{
1019 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1019 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1020 it->setCalEnabled( enable ); 1020 it->setCalEnabled( enable );
1021 1021
1022 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1022 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1023 it->setCalEnabled( enable ); 1023 it->setCalEnabled( enable );
1024 1024
1025 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1025 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1026 it->setCalEnabled( enable ); 1026 it->setCalEnabled( enable );
1027 1027
1028 1028
1029} 1029}
1030void CalendarLocal::setCalendarEnabled( int id, bool enable ) 1030void CalendarLocal::setCalendarEnabled( int id, bool enable )
1031{ 1031{
1032 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1032 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1033 if ( it->calID() == id ) it->setCalEnabled( enable ); 1033 if ( it->calID() == id ) it->setCalEnabled( enable );
1034 1034
1035 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1035 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1036 if ( it->calID() == id ) it->setCalEnabled( enable ); 1036 if ( it->calID() == id ) it->setCalEnabled( enable );
1037 1037
1038 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1038 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1039 if ( it->calID() == id ) it->setCalEnabled( enable ); 1039 if ( it->calID() == id ) it->setCalEnabled( enable );
1040 1040
1041} 1041}
1042 1042
1043void CalendarLocal::setReadOnly( int id, bool enable ) 1043void CalendarLocal::setReadOnly( int id, bool enable )
1044{ 1044{
1045 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1045 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1046 if ( it->calID() == id ) it->setReadOnly( enable ); 1046 if ( it->calID() == id ) it->setReadOnly( enable );
1047 1047
1048 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1048 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1049 if ( it->calID() == id ) it->setReadOnly( enable ); 1049 if ( it->calID() == id ) it->setReadOnly( enable );
1050 1050
1051 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1051 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1052 if ( it->calID() == id ) it->setReadOnly( enable ); 1052 if ( it->calID() == id ) it->setReadOnly( enable );
1053 1053
1054} 1054}
1055 1055
1056void CalendarLocal::setAlarmEnabled( int id, bool enable ) 1056void CalendarLocal::setAlarmEnabled( int id, bool enable )
1057{ 1057{
1058 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1058 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1059 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1059 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1060 1060
1061 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1061 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1062 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1062 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1063 1063
1064 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1064 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1065 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1065 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1066 reInitAlarmSettings(); 1066 reInitAlarmSettings();
1067 1067
1068} 1068}
1069void CalendarLocal::setDefaultCalendarEnabledOnly() 1069void CalendarLocal::setDefaultCalendarEnabledOnly()
1070{ 1070{
1071 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1071 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1072 it->setCalEnabled( it->calID() == mDefaultCalendar ); 1072 it->setCalEnabled( it->calID() == mDefaultCalendar );
1073 1073
1074 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1074 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1075 it->setCalEnabled( it->calID() == mDefaultCalendar); 1075 it->setCalEnabled( it->calID() == mDefaultCalendar);
1076 1076
1077 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1077 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1078 it->setCalEnabled( it->calID() == mDefaultCalendar); 1078 it->setCalEnabled( it->calID() == mDefaultCalendar);
1079 1079
1080} 1080}
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index cfef973..56c0560 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -1,493 +1,500 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
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#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h> 24#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h" 27#include "syncdefines.h"
28 28
29#include "incidencebase.h" 29#include "incidencebase.h"
30 30
31using namespace KCal; 31using namespace KCal;
32 32
33IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
35 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
36{ 36{
37 blockLastModified = false; 37 blockLastModified = false;
38 setUid(CalFormat::createUniqueId()); 38 setUid(CalFormat::createUniqueId());
39 mOrganizer = ""; 39 mOrganizer = "";
40 mFloats = false; 40 mFloats = false;
41 mDuration = 0; 41 mDuration = 0;
42 mHasDuration = false; 42 mHasDuration = false;
43 mPilotId = 0; 43 mPilotId = 0;
44 mExternalId = ":"; 44 mExternalId = ":";
45 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 45 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
46 mSyncStatus = 0; 46 mSyncStatus = 0;
47 mAttendees.setAutoDelete( true ); 47 mAttendees.setAutoDelete( true );
48 mCalEnabled = true; 48 mCalEnabled = true;
49 mAlarmEnabled = true; 49 mAlarmEnabled = true;
50 mCalID = 0; 50 mCalID = 0;
51} 51}
52 52
53IncidenceBase::IncidenceBase(const IncidenceBase &i) : 53IncidenceBase::IncidenceBase(const IncidenceBase &i) :
54 CustomProperties( i ) 54 CustomProperties( i )
55{ 55{
56 56
57 blockLastModified = false; 57 blockLastModified = false;
58 mReadOnly = i.mReadOnly; 58 mReadOnly = i.mReadOnly;
59 mDtStart = i.mDtStart; 59 mDtStart = i.mDtStart;
60 mDuration = i.mDuration; 60 mDuration = i.mDuration;
61 mHasDuration = i.mHasDuration; 61 mHasDuration = i.mHasDuration;
62 mOrganizer = i.mOrganizer; 62 mOrganizer = i.mOrganizer;
63 mUid = i.mUid; 63 mUid = i.mUid;
64 mCalEnabled = i.mCalEnabled; 64 mCalEnabled = i.mCalEnabled;
65 mAlarmEnabled = i.mAlarmEnabled; 65 mAlarmEnabled = i.mAlarmEnabled;
66 mCalID = i.mCalID; 66 mCalID = i.mCalID;
67 QPtrList<Attendee> attendees = i.attendees(); 67 QPtrList<Attendee> attendees = i.attendees();
68 for( Attendee *a = attendees.first(); a; a = attendees.next() ) { 68 for( Attendee *a = attendees.first(); a; a = attendees.next() ) {
69 mAttendees.append( new Attendee( *a ) ); 69 mAttendees.append( new Attendee( *a ) );
70 } 70 }
71 mFloats = i.mFloats; 71 mFloats = i.mFloats;
72 mLastModified = i.mLastModified; 72 mLastModified = i.mLastModified;
73 mPilotId = i.mPilotId; 73 mPilotId = i.mPilotId;
74 mTempSyncStat = i.mTempSyncStat; 74 mTempSyncStat = i.mTempSyncStat;
75 mSyncStatus = i.mSyncStatus; 75 mSyncStatus = i.mSyncStatus;
76 mExternalId = i.mExternalId; 76 mExternalId = i.mExternalId;
77 // The copied object is a new one, so it isn't observed by the observer 77 // The copied object is a new one, so it isn't observed by the observer
78 // of the original object. 78 // of the original object.
79 mObservers.clear(); 79 mObservers.clear();
80 80
81 mAttendees.setAutoDelete( true ); 81 mAttendees.setAutoDelete( true );
82} 82}
83 83
84IncidenceBase::~IncidenceBase() 84IncidenceBase::~IncidenceBase()
85{ 85{
86} 86}
87 87
88 88
89bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) 89bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 )
90{ 90{
91 // do not compare mSyncStatus and mExternalId 91 // do not compare mSyncStatus and mExternalId
92 if( i1.attendees().count() != i2.attendees().count() ) { 92 if( i1.attendees().count() != i2.attendees().count() ) {
93 return false; // no need to check further 93 return false; // no need to check further
94 } 94 }
95 if ( i1.attendees().count() > 0 ) { 95 if ( i1.attendees().count() > 0 ) {
96 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ; 96 Attendee * a1 = i1.attendees().first(), *a2 =i2.attendees().first() ;
97 while ( a1 ) { 97 while ( a1 ) {
98 if ( !( (*a1) == (*a2)) ) 98 if ( !( (*a1) == (*a2)) )
99 { 99 {
100 //qDebug("Attendee not equal "); 100 //qDebug("Attendee not equal ");
101 return false; 101 return false;
102 } 102 }
103 a1 = i1.attendees().next(); 103 a1 = i1.attendees().next();
104 a2 = i2.attendees().next(); 104 a2 = i2.attendees().next();
105 } 105 }
106 } 106 }
107 //if ( i1.dtStart() != i2.dtStart() ) 107 //if ( i1.dtStart() != i2.dtStart() )
108 // return false; 108 // return false;
109#if 0 109#if 0
110 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() ); 110 qDebug("1 %d ",i1.doesFloat() == i2.doesFloat() );
111 qDebug("1 %d ",i1.duration() == i2.duration() ); 111 qDebug("1 %d ",i1.duration() == i2.duration() );
112 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() ); 112 qDebug("3 %d ",i1.hasDuration() == i2.hasDuration() );
113 qDebug("1 %d ",i1.pilotId() == i2.pilotId() ); 113 qDebug("1 %d ",i1.pilotId() == i2.pilotId() );
114 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() ); 114 qDebug("1 %d %d %d",i1.syncStatus() == i2.syncStatus() , i1.syncStatus(),i2.syncStatus() );
115 qDebug("6 %d ",i1.organizer() == i2.organizer() ); 115 qDebug("6 %d ",i1.organizer() == i2.organizer() );
116 116
117#endif 117#endif
118 if ( i1.hasDuration() == i2.hasDuration() ) { 118 if ( i1.hasDuration() == i2.hasDuration() ) {
119 if ( i1.hasDuration() ) { 119 if ( i1.hasDuration() ) {
120 if ( i1.duration() != i2.duration() ) 120 if ( i1.duration() != i2.duration() )
121 return false; 121 return false;
122 } 122 }
123 } else { 123 } else {
124 return false; 124 return false;
125 } 125 }
126 126
127 return ( i1.organizer() == i2.organizer() && 127 return ( i1.organizer() == i2.organizer() &&
128 // i1.uid() == i2.uid() && 128 // i1.uid() == i2.uid() &&
129 // Don't compare lastModified, otherwise the operator is not 129 // Don't compare lastModified, otherwise the operator is not
130 // of much use. We are not comparing for identity, after all. 130 // of much use. We are not comparing for identity, after all.
131 i1.doesFloat() == i2.doesFloat() && 131 i1.doesFloat() == i2.doesFloat() &&
132 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() ); 132 i1.pilotId() == i2.pilotId() );// && i1.syncStatus() == i2.syncStatus() );
133 // no need to compare mObserver 133 // no need to compare mObserver
134} 134}
135 135
136 136
137QDateTime IncidenceBase::getEvenTime( QDateTime dt ) 137QDateTime IncidenceBase::getEvenTime( QDateTime dt )
138{ 138{
139 QTime t = dt.time(); 139 QTime t = dt.time();
140 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 140 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
141 return dt; 141 return dt;
142} 142}
143 143
144bool IncidenceBase::isTagged() const 144bool IncidenceBase::isTagged() const
145{ 145{
146 return mIsTagged; 146 return mIsTagged;
147} 147}
148void IncidenceBase::setTagged( bool b) 148void IncidenceBase::setTagged( bool b)
149{ 149{
150 mIsTagged = b; 150 mIsTagged = b;
151} 151}
152void IncidenceBase::setCalID( int id ) 152void IncidenceBase::setCalID( int id )
153{ 153{
154 if ( mCalID > 0 ) { 154 if ( mCalID > 0 ) {
155 updated();
156 }
157 mCalID = id;
158}
159void IncidenceBase::setCalID_block( int id )
160{
161 if ( mCalID > 0 ) {
155 blockLastModified = true; 162 blockLastModified = true;
156 updated(); 163 updated();
157 blockLastModified = false; 164 blockLastModified = false;
158 } 165 }
159 mCalID = id; 166 mCalID = id;
160} 167}
161int IncidenceBase::calID() const 168int IncidenceBase::calID() const
162{ 169{
163 return mCalID; 170 return mCalID;
164} 171}
165void IncidenceBase::setCalEnabled( bool b ) 172void IncidenceBase::setCalEnabled( bool b )
166{ 173{
167 mCalEnabled = b; 174 mCalEnabled = b;
168} 175}
169bool IncidenceBase::calEnabled() const 176bool IncidenceBase::calEnabled() const
170{ 177{
171 return mCalEnabled; 178 return mCalEnabled;
172} 179}
173 180
174void IncidenceBase::setAlarmEnabled( bool b ) 181void IncidenceBase::setAlarmEnabled( bool b )
175{ 182{
176 mAlarmEnabled = b; 183 mAlarmEnabled = b;
177} 184}
178bool IncidenceBase::alarmEnabled() const 185bool IncidenceBase::alarmEnabled() const
179{ 186{
180 return mAlarmEnabled; 187 return mAlarmEnabled;
181} 188}
182 189
183 190
184void IncidenceBase::setUid(const QString &uid) 191void IncidenceBase::setUid(const QString &uid)
185{ 192{
186 mUid = uid; 193 mUid = uid;
187 updated(); 194 updated();
188} 195}
189 196
190QString IncidenceBase::uid() const 197QString IncidenceBase::uid() const
191{ 198{
192 return mUid; 199 return mUid;
193} 200}
194void IncidenceBase::setLastModifiedSubInvalid() 201void IncidenceBase::setLastModifiedSubInvalid()
195{ 202{
196 // virtual method 203 // virtual method
197} 204}
198void IncidenceBase::setLastModified(const QDateTime &lm) 205void IncidenceBase::setLastModified(const QDateTime &lm)
199{ 206{
200 if ( blockLastModified ) return; 207 if ( blockLastModified ) return;
201 // DON'T! updated() because we call this from 208 // DON'T! updated() because we call this from
202 // Calendar::updateEvent(). 209 // Calendar::updateEvent().
203 mLastModified = getEvenTime(lm); 210 mLastModified = getEvenTime(lm);
204 mLastModifiedKey.sprintf("%04d%02d%02d%02d%02d%02d", 211 mLastModifiedKey.sprintf("%04d%02d%02d%02d%02d%02d",
205 mLastModified.date().year(), 212 mLastModified.date().year(),
206 mLastModified.date().month(), 213 mLastModified.date().month(),
207 mLastModified.date().day(), 214 mLastModified.date().day(),
208 mLastModified.time().hour(), 215 mLastModified.time().hour(),
209 mLastModified.time().minute(), 216 mLastModified.time().minute(),
210 mLastModified.time().second() ); 217 mLastModified.time().second() );
211 setLastModifiedSubInvalid(); 218 setLastModifiedSubInvalid();
212 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); 219 //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1());
213} 220}
214QString IncidenceBase::lastModifiedSortKey() const 221QString IncidenceBase::lastModifiedSortKey() const
215{ 222{
216 return mLastModifiedKey; 223 return mLastModifiedKey;
217} 224}
218 225
219QDateTime IncidenceBase::lastModified() const 226QDateTime IncidenceBase::lastModified() const
220{ 227{
221 return mLastModified; 228 return mLastModified;
222} 229}
223 230
224void IncidenceBase::setOrganizer(const QString &o) 231void IncidenceBase::setOrganizer(const QString &o)
225{ 232{
226 // we don't check for readonly here, because it is 233 // we don't check for readonly here, because it is
227 // possible that by setting the organizer we are changing 234 // possible that by setting the organizer we are changing
228 // the event's readonly status... 235 // the event's readonly status...
229 mOrganizer = o; 236 mOrganizer = o;
230 if (mOrganizer.left(7).upper() == "MAILTO:") 237 if (mOrganizer.left(7).upper() == "MAILTO:")
231 mOrganizer = mOrganizer.remove(0,7); 238 mOrganizer = mOrganizer.remove(0,7);
232 239
233 updated(); 240 updated();
234} 241}
235 242
236QString IncidenceBase::organizer() const 243QString IncidenceBase::organizer() const
237{ 244{
238 return mOrganizer; 245 return mOrganizer;
239} 246}
240 247
241void IncidenceBase::setReadOnly( bool readOnly ) 248void IncidenceBase::setReadOnly( bool readOnly )
242{ 249{
243 mReadOnly = readOnly; 250 mReadOnly = readOnly;
244} 251}
245 252
246void IncidenceBase::setDtStart(const QDateTime &dtStart) 253void IncidenceBase::setDtStart(const QDateTime &dtStart)
247{ 254{
248// if (mReadOnly) return; 255// if (mReadOnly) return;
249 mDtStart = getEvenTime(dtStart); 256 mDtStart = getEvenTime(dtStart);
250 updated(); 257 updated();
251} 258}
252 259
253 260
254QDateTime IncidenceBase::dtStart() const 261QDateTime IncidenceBase::dtStart() const
255{ 262{
256 return mDtStart; 263 return mDtStart;
257} 264}
258 265
259QString IncidenceBase::dtStartTimeStr() const 266QString IncidenceBase::dtStartTimeStr() const
260{ 267{
261 return KGlobal::locale()->formatTime(dtStart().time()); 268 return KGlobal::locale()->formatTime(dtStart().time());
262} 269}
263 270
264QString IncidenceBase::dtStartDateStr(bool shortfmt) const 271QString IncidenceBase::dtStartDateStr(bool shortfmt) const
265{ 272{
266 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 273 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
267} 274}
268 275
269QString IncidenceBase::dtStartStr(bool shortfmt) const 276QString IncidenceBase::dtStartStr(bool shortfmt) const
270{ 277{
271 if ( doesFloat() ) 278 if ( doesFloat() )
272 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); 279 return KGlobal::locale()->formatDate(dtStart().date(),shortfmt);
273 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); 280 return KGlobal::locale()->formatDateTime(dtStart(), shortfmt);
274} 281}
275 282
276 283
277bool IncidenceBase::doesFloat() const 284bool IncidenceBase::doesFloat() const
278{ 285{
279 return mFloats; 286 return mFloats;
280} 287}
281 288
282void IncidenceBase::setFloats(bool f) 289void IncidenceBase::setFloats(bool f)
283{ 290{
284 if (mReadOnly) return; 291 if (mReadOnly) return;
285 mFloats = f; 292 mFloats = f;
286 updated(); 293 updated();
287} 294}
288 295
289 296
290bool IncidenceBase::addAttendee(Attendee *a, bool doupdate) 297bool IncidenceBase::addAttendee(Attendee *a, bool doupdate)
291{ 298{
292 if (mReadOnly) return false; 299 if (mReadOnly) return false;
293 if (a->name().left(7).upper() == "MAILTO:") 300 if (a->name().left(7).upper() == "MAILTO:")
294 a->setName(a->name().remove(0,7)); 301 a->setName(a->name().remove(0,7));
295 302
296 QPtrListIterator<Attendee> qli(mAttendees); 303 QPtrListIterator<Attendee> qli(mAttendees);
297 304
298 qli.toFirst(); 305 qli.toFirst();
299 while (qli) { 306 while (qli) {
300 if (*qli.current() == *a) 307 if (*qli.current() == *a)
301 return false; 308 return false;
302 ++qli; 309 ++qli;
303 } 310 }
304 mAttendees.append(a); 311 mAttendees.append(a);
305 if (doupdate) updated(); 312 if (doupdate) updated();
306 return true; 313 return true;
307} 314}
308 315
309#if 0 316#if 0
310void IncidenceBase::removeAttendee(Attendee *a) 317void IncidenceBase::removeAttendee(Attendee *a)
311{ 318{
312 if (mReadOnly) return; 319 if (mReadOnly) return;
313 mAttendees.removeRef(a); 320 mAttendees.removeRef(a);
314 updated(); 321 updated();
315} 322}
316 323
317void IncidenceBase::removeAttendee(const char *n) 324void IncidenceBase::removeAttendee(const char *n)
318{ 325{
319 Attendee *a; 326 Attendee *a;
320 327
321 if (mReadOnly) return; 328 if (mReadOnly) return;
322 for (a = mAttendees.first(); a; a = mAttendees.next()) 329 for (a = mAttendees.first(); a; a = mAttendees.next())
323 if (a->getName() == n) { 330 if (a->getName() == n) {
324 mAttendees.remove(); 331 mAttendees.remove();
325 break; 332 break;
326 } 333 }
327} 334}
328#endif 335#endif
329 336
330void IncidenceBase::clearAttendees() 337void IncidenceBase::clearAttendees()
331{ 338{
332 if (mReadOnly) return; 339 if (mReadOnly) return;
333 mAttendees.clear(); 340 mAttendees.clear();
334} 341}
335 342
336#if 0 343#if 0
337Attendee *IncidenceBase::getAttendee(const char *n) const 344Attendee *IncidenceBase::getAttendee(const char *n) const
338{ 345{
339 QPtrListIterator<Attendee> qli(mAttendees); 346 QPtrListIterator<Attendee> qli(mAttendees);
340 347
341 qli.toFirst(); 348 qli.toFirst();
342 while (qli) { 349 while (qli) {
343 if (qli.current()->getName() == n) 350 if (qli.current()->getName() == n)
344 return qli.current(); 351 return qli.current();
345 ++qli; 352 ++qli;
346 } 353 }
347 return 0L; 354 return 0L;
348} 355}
349#endif 356#endif
350 357
351Attendee *IncidenceBase::attendeeByMail(const QString &email) 358Attendee *IncidenceBase::attendeeByMail(const QString &email)
352{ 359{
353 QPtrListIterator<Attendee> qli(mAttendees); 360 QPtrListIterator<Attendee> qli(mAttendees);
354 361
355 qli.toFirst(); 362 qli.toFirst();
356 while (qli) { 363 while (qli) {
357 if (qli.current()->email().lower() == email.lower()) 364 if (qli.current()->email().lower() == email.lower())
358 return qli.current(); 365 return qli.current();
359 ++qli; 366 ++qli;
360 } 367 }
361 return 0L; 368 return 0L;
362} 369}
363 370
364Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) 371Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email)
365{ 372{
366 QPtrListIterator<Attendee> qli(mAttendees); 373 QPtrListIterator<Attendee> qli(mAttendees);
367 374
368 QStringList mails = emails; 375 QStringList mails = emails;
369 if (!email.isEmpty()) { 376 if (!email.isEmpty()) {
370 mails.append(email); 377 mails.append(email);
371 } 378 }
372 qli.toFirst(); 379 qli.toFirst();
373 while (qli) { 380 while (qli) {
374 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { 381 for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) {
375 if (qli.current()->email().lower() == (*it).lower()) 382 if (qli.current()->email().lower() == (*it).lower())
376 return qli.current(); 383 return qli.current();
377 } 384 }
378 385
379 ++qli; 386 ++qli;
380 } 387 }
381 return 0L; 388 return 0L;
382} 389}
383 390
384void IncidenceBase::setDuration(int seconds) 391void IncidenceBase::setDuration(int seconds)
385{ 392{
386 mDuration = seconds; 393 mDuration = seconds;
387 setHasDuration(true); 394 setHasDuration(true);
388} 395}
389 396
390int IncidenceBase::duration() const 397int IncidenceBase::duration() const
391{ 398{
392 return mDuration; 399 return mDuration;
393} 400}
394 401
395void IncidenceBase::setHasDuration(bool b) 402void IncidenceBase::setHasDuration(bool b)
396{ 403{
397 mHasDuration = b; 404 mHasDuration = b;
398} 405}
399 406
400bool IncidenceBase::hasDuration() const 407bool IncidenceBase::hasDuration() const
401{ 408{
402 return mHasDuration; 409 return mHasDuration;
403} 410}
404 411
405void IncidenceBase::setSyncStatus(int stat) 412void IncidenceBase::setSyncStatus(int stat)
406{ 413{
407 if (mReadOnly) return; 414 if (mReadOnly) return;
408 mSyncStatus = stat; 415 mSyncStatus = stat;
409} 416}
410 417
411int IncidenceBase::syncStatus() const 418int IncidenceBase::syncStatus() const
412{ 419{
413 return mSyncStatus; 420 return mSyncStatus;
414} 421}
415 422
416void IncidenceBase::setPilotId( int id ) 423void IncidenceBase::setPilotId( int id )
417{ 424{
418 if (mReadOnly) return; 425 if (mReadOnly) return;
419 mPilotId = id; 426 mPilotId = id;
420} 427}
421 428
422int IncidenceBase::pilotId() const 429int IncidenceBase::pilotId() const
423{ 430{
424 return mPilotId; 431 return mPilotId;
425} 432}
426 433
427int IncidenceBase::tempSyncStat() const 434int IncidenceBase::tempSyncStat() const
428{ 435{
429 return mTempSyncStat; 436 return mTempSyncStat;
430} 437}
431void IncidenceBase::setTempSyncStat( int id ) 438void IncidenceBase::setTempSyncStat( int id )
432{ 439{
433 if (mReadOnly) return; 440 if (mReadOnly) return;
434 mTempSyncStat = id; 441 mTempSyncStat = id;
435} 442}
436 443
437void IncidenceBase::removeID(const QString &prof) 444void IncidenceBase::removeID(const QString &prof)
438{ 445{
439 if ( prof.isEmpty() ) 446 if ( prof.isEmpty() )
440 mExternalId = ":"; 447 mExternalId = ":";
441 else 448 else
442 mExternalId = KIdManager::removeId ( mExternalId, prof); 449 mExternalId = KIdManager::removeId ( mExternalId, prof);
443 450
444} 451}
445void IncidenceBase::setID( const QString & prof , const QString & id ) 452void IncidenceBase::setID( const QString & prof , const QString & id )
446{ 453{
447 mExternalId = KIdManager::setId ( mExternalId, prof, id ); 454 mExternalId = KIdManager::setId ( mExternalId, prof, id );
448} 455}
449QString IncidenceBase::getID( const QString & prof) 456QString IncidenceBase::getID( const QString & prof)
450{ 457{
451 return KIdManager::getId ( mExternalId, prof ); 458 return KIdManager::getId ( mExternalId, prof );
452} 459}
453 460
454// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: 461// example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0:
455// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 462// format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0
456void IncidenceBase::setCsum( const QString & prof , const QString & id ) 463void IncidenceBase::setCsum( const QString & prof , const QString & id )
457{ 464{
458 mExternalId = KIdManager::setCsum ( mExternalId, prof, id ); 465 mExternalId = KIdManager::setCsum ( mExternalId, prof, id );
459} 466}
460QString IncidenceBase::getCsum( const QString & prof) 467QString IncidenceBase::getCsum( const QString & prof)
461{ 468{
462 return KIdManager::getCsum ( mExternalId, prof ); 469 return KIdManager::getCsum ( mExternalId, prof );
463} 470}
464 471
465void IncidenceBase::setIDStr( const QString & s ) 472void IncidenceBase::setIDStr( const QString & s )
466{ 473{
467 if (mReadOnly) return; 474 if (mReadOnly) return;
468 mExternalId = s; 475 mExternalId = s;
469} 476}
470 477
471QString IncidenceBase::IDStr() const 478QString IncidenceBase::IDStr() const
472{ 479{
473 return mExternalId ; 480 return mExternalId ;
474} 481}
475void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) 482void IncidenceBase::registerObserver( IncidenceBase::Observer *observer )
476{ 483{
477 if( !mObservers.contains(observer) ) mObservers.append( observer ); 484 if( !mObservers.contains(observer) ) mObservers.append( observer );
478} 485}
479 486
480void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) 487void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer )
481{ 488{
482 mObservers.remove( observer ); 489 mObservers.remove( observer );
483} 490}
484 491
485void IncidenceBase::updated() 492void IncidenceBase::updated()
486{ 493{
487 QPtrListIterator<Observer> it(mObservers); 494 QPtrListIterator<Observer> it(mObservers);
488 while( it.current() ) { 495 while( it.current() ) {
489 Observer *o = it.current(); 496 Observer *o = it.current();
490 ++it; 497 ++it;
491 o->incidenceUpdated( this ); 498 o->incidenceUpdated( this );
492 } 499 }
493} 500}
diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h
index 444d4c4..3edc03b 100644
--- a/libkcal/incidencebase.h
+++ b/libkcal/incidencebase.h
@@ -1,189 +1,190 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
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#ifndef KCAL_INCIDENCEBASE_H 20#ifndef KCAL_INCIDENCEBASE_H
21#define KCAL_INCIDENCEBASE_H 21#define KCAL_INCIDENCEBASE_H
22// 22//
23// Incidence - base class of calendaring components 23// Incidence - base class of calendaring components
24// 24//
25 25
26#include <qdatetime.h> 26#include <qdatetime.h>
27#include <qstringlist.h> 27#include <qstringlist.h>
28#include <qvaluelist.h> 28#include <qvaluelist.h>
29#include <qptrlist.h> 29#include <qptrlist.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "attendee.h" 32#include "attendee.h"
33 33
34namespace KCal { 34namespace KCal {
35 35
36typedef QValueList<QDate> DateList; 36typedef QValueList<QDate> DateList;
37 enum IncTypeID { eventID,todoID,journalID,freebusyID }; 37 enum IncTypeID { eventID,todoID,journalID,freebusyID };
38 38
39/** 39/**
40 This class provides the base class common to all calendar components. 40 This class provides the base class common to all calendar components.
41*/ 41*/
42class IncidenceBase : public CustomProperties 42class IncidenceBase : public CustomProperties
43{ 43{
44 public: 44 public:
45 class Observer { 45 class Observer {
46 public: 46 public:
47 virtual void incidenceUpdated( IncidenceBase * ) = 0; 47 virtual void incidenceUpdated( IncidenceBase * ) = 0;
48 }; 48 };
49 49
50 IncidenceBase(); 50 IncidenceBase();
51 IncidenceBase(const IncidenceBase &); 51 IncidenceBase(const IncidenceBase &);
52 virtual ~IncidenceBase(); 52 virtual ~IncidenceBase();
53 53
54 virtual QCString type() const = 0; 54 virtual QCString type() const = 0;
55 virtual IncTypeID typeID() const = 0; 55 virtual IncTypeID typeID() const = 0;
56 56
57 /** Set the unique id for the event */ 57 /** Set the unique id for the event */
58 void setUid(const QString &); 58 void setUid(const QString &);
59 /** Return the unique id for the event */ 59 /** Return the unique id for the event */
60 QString uid() const; 60 QString uid() const;
61 61
62 /** Sets the time the incidence was last modified. */ 62 /** Sets the time the incidence was last modified. */
63 void setLastModified(const QDateTime &lm); 63 void setLastModified(const QDateTime &lm);
64 /** Return the time the incidence was last modified. */ 64 /** Return the time the incidence was last modified. */
65 QDateTime lastModified() const; 65 QDateTime lastModified() const;
66 QString lastModifiedSortKey() const; 66 QString lastModifiedSortKey() const;
67 67
68 /** sets the organizer for the event */ 68 /** sets the organizer for the event */
69 void setOrganizer(const QString &o); 69 void setOrganizer(const QString &o);
70 QString organizer() const; 70 QString organizer() const;
71 71
72 /** Set readonly status. */ 72 /** Set readonly status. */
73 virtual void setReadOnly( bool ); 73 virtual void setReadOnly( bool );
74 /** Return if the object is read-only. */ 74 /** Return if the object is read-only. */
75 bool isReadOnly() const { return mReadOnly; } 75 bool isReadOnly() const { return mReadOnly; }
76 76
77 /** for setting the event's starting date/time with a QDateTime. */ 77 /** for setting the event's starting date/time with a QDateTime. */
78 virtual void setDtStart(const QDateTime &dtStart); 78 virtual void setDtStart(const QDateTime &dtStart);
79 /** returns an event's starting date/time as a QDateTime. */ 79 /** returns an event's starting date/time as a QDateTime. */
80 virtual QDateTime dtStart() const; 80 virtual QDateTime dtStart() const;
81 /** returns an event's starting time as a string formatted according to the 81 /** returns an event's starting time as a string formatted according to the
82 users locale settings */ 82 users locale settings */
83 QString dtStartTimeStr() const; 83 QString dtStartTimeStr() const;
84 /** returns an event's starting date as a string formatted according to the 84 /** returns an event's starting date as a string formatted according to the
85 users locale settings */ 85 users locale settings */
86 QString dtStartDateStr(bool shortfmt=true) const; 86 QString dtStartDateStr(bool shortfmt=true) const;
87 /** returns an event's starting date and time as a string formatted according 87 /** returns an event's starting date and time as a string formatted according
88 to the users locale settings */ 88 to the users locale settings */
89 QString dtStartStr(bool shortfmt=true) const; 89 QString dtStartStr(bool shortfmt=true) const;
90 90
91 virtual void setDuration(int seconds); 91 virtual void setDuration(int seconds);
92 int duration() const; 92 int duration() const;
93 void setHasDuration(bool); 93 void setHasDuration(bool);
94 bool hasDuration() const; 94 bool hasDuration() const;
95 95
96 /** Return true or false depending on whether the incidence "floats," 96 /** Return true or false depending on whether the incidence "floats,"
97 * i.e. has a date but no time attached to it. */ 97 * i.e. has a date but no time attached to it. */
98 bool doesFloat() const; 98 bool doesFloat() const;
99 /** Set whether the incidence floats, i.e. has a date but no time attached to it. */ 99 /** Set whether the incidence floats, i.e. has a date but no time attached to it. */
100 void setFloats(bool f); 100 void setFloats(bool f);
101 101
102 /** 102 /**
103 Add Attendee to this incidence. IncidenceBase takes ownership of the 103 Add Attendee to this incidence. IncidenceBase takes ownership of the
104 Attendee object. 104 Attendee object.
105 */ 105 */
106 bool addAttendee(Attendee *a, bool doupdate=true ); 106 bool addAttendee(Attendee *a, bool doupdate=true );
107// void removeAttendee(Attendee *a); 107// void removeAttendee(Attendee *a);
108// void removeAttendee(const char *n); 108// void removeAttendee(const char *n);
109 /** Remove all Attendees. */ 109 /** Remove all Attendees. */
110 void clearAttendees(); 110 void clearAttendees();
111 /** Return list of attendees. */ 111 /** Return list of attendees. */
112 QPtrList<Attendee> attendees() const { return mAttendees; }; 112 QPtrList<Attendee> attendees() const { return mAttendees; };
113 /** Return number of attendees. */ 113 /** Return number of attendees. */
114 int attendeeCount() const { return mAttendees.count(); }; 114 int attendeeCount() const { return mAttendees.count(); };
115 /** Return the Attendee with this email */ 115 /** Return the Attendee with this email */
116 Attendee* attendeeByMail(const QString &); 116 Attendee* attendeeByMail(const QString &);
117 /** Return first Attendee with one of this emails */ 117 /** Return first Attendee with one of this emails */
118 Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null); 118 Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null);
119 119
120 /** pilot syncronization states */ 120 /** pilot syncronization states */
121 enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; 121 enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 };
122 /** Set synchronisation satus. */ 122 /** Set synchronisation satus. */
123 void setSyncStatus(int stat); 123 void setSyncStatus(int stat);
124 /** Return synchronisation status. */ 124 /** Return synchronisation status. */
125 int syncStatus() const; 125 int syncStatus() const;
126 126
127 /** Set Pilot Id. */ 127 /** Set Pilot Id. */
128 void setPilotId(int id); 128 void setPilotId(int id);
129 /** Return Pilot Id. */ 129 /** Return Pilot Id. */
130 int pilotId() const; 130 int pilotId() const;
131 131
132 void setTempSyncStat(int id); 132 void setTempSyncStat(int id);
133 int tempSyncStat() const; 133 int tempSyncStat() const;
134 void setIDStr( const QString & ); 134 void setIDStr( const QString & );
135 QString IDStr() const; 135 QString IDStr() const;
136 void setID( const QString &, const QString & ); 136 void setID( const QString &, const QString & );
137 QString getID( const QString & ); 137 QString getID( const QString & );
138 void setCsum( const QString &, const QString & ); 138 void setCsum( const QString &, const QString & );
139 QString getCsum( const QString & ); 139 QString getCsum( const QString & );
140 void removeID(const QString &); 140 void removeID(const QString &);
141 141
142 void registerObserver( Observer * ); 142 void registerObserver( Observer * );
143 void unRegisterObserver( Observer * ); 143 void unRegisterObserver( Observer * );
144 void updated(); 144 void updated();
145 void setCalID( int id ); 145 void setCalID( int id );
146 void setCalID_block( int id );
146 int calID() const; 147 int calID() const;
147 void setCalEnabled( bool ); 148 void setCalEnabled( bool );
148 bool calEnabled() const; 149 bool calEnabled() const;
149 void setAlarmEnabled( bool ); 150 void setAlarmEnabled( bool );
150 bool alarmEnabled() const; 151 bool alarmEnabled() const;
151 bool isTagged() const; 152 bool isTagged() const;
152 void setTagged( bool ); 153 void setTagged( bool );
153 virtual void setLastModifiedSubInvalid(); 154 virtual void setLastModifiedSubInvalid();
154 protected: 155 protected:
155 bool blockLastModified; 156 bool blockLastModified;
156 bool mIsTagged; 157 bool mIsTagged;
157 QDateTime mDtStart; 158 QDateTime mDtStart;
158 bool mReadOnly; 159 bool mReadOnly;
159 QDateTime getEvenTime( QDateTime ); 160 QDateTime getEvenTime( QDateTime );
160 161
161 private: 162 private:
162 // base components 163 // base components
163 QString mOrganizer; 164 QString mOrganizer;
164 QString mLastModifiedKey; 165 QString mLastModifiedKey;
165 QString mUid; 166 QString mUid;
166 int mCalID; 167 int mCalID;
167 bool mCalEnabled; 168 bool mCalEnabled;
168 bool mAlarmEnabled; 169 bool mAlarmEnabled;
169 QDateTime mLastModified; 170 QDateTime mLastModified;
170 QPtrList<Attendee> mAttendees; 171 QPtrList<Attendee> mAttendees;
171 172
172 bool mFloats; 173 bool mFloats;
173 174
174 int mDuration; 175 int mDuration;
175 bool mHasDuration; 176 bool mHasDuration;
176 QString mExternalId; 177 QString mExternalId;
177 int mTempSyncStat; 178 int mTempSyncStat;
178 179
179 // PILOT SYNCHRONIZATION STUFF 180 // PILOT SYNCHRONIZATION STUFF
180 int mPilotId; // unique id for pilot sync 181 int mPilotId; // unique id for pilot sync
181 int mSyncStatus; // status (for sync) 182 int mSyncStatus; // status (for sync)
182 183
183 QPtrList<Observer> mObservers; 184 QPtrList<Observer> mObservers;
184}; 185};
185 186
186bool operator==( const IncidenceBase&, const IncidenceBase& ); 187bool operator==( const IncidenceBase&, const IncidenceBase& );
187} 188}
188 189
189#endif 190#endif
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index fa7804e..0109c02 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -1,1812 +1,1812 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
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// $Id$ 21// $Id$
22 22
23#include "ksyncmanager.h" 23#include "ksyncmanager.h"
24 24
25#include <stdlib.h> 25#include <stdlib.h>
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#include <unistd.h> 28#include <unistd.h>
29#endif 29#endif
30 30
31 31
32#include "ksyncprofile.h" 32#include "ksyncprofile.h"
33#include "ksyncprefsdialog.h" 33#include "ksyncprefsdialog.h"
34#include "kpimprefs.h" 34#include "kpimprefs.h"
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <qdir.h> 37#include <qdir.h>
38#include <qprogressbar.h> 38#include <qprogressbar.h>
39#include <qpopupmenu.h> 39#include <qpopupmenu.h>
40#include <qpushbutton.h> 40#include <qpushbutton.h>
41#include <qradiobutton.h> 41#include <qradiobutton.h>
42#include <qbuttongroup.h> 42#include <qbuttongroup.h>
43#include <qtimer.h> 43#include <qtimer.h>
44#include <qmessagebox.h> 44#include <qmessagebox.h>
45#include <qapplication.h> 45#include <qapplication.h>
46#include <qlineedit.h> 46#include <qlineedit.h>
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qlabel.h> 50#include <qlabel.h>
51#include <qcheckbox.h> 51#include <qcheckbox.h>
52#include <qapplication.h> 52#include <qapplication.h>
53 53
54#include <klocale.h> 54#include <klocale.h>
55#include <kglobal.h> 55#include <kglobal.h>
56#include <kconfig.h> 56#include <kconfig.h>
57#include <kfiledialog.h> 57#include <kfiledialog.h>
58 58
59QDateTime KSyncManager::mRequestedSyncEvent; 59QDateTime KSyncManager::mRequestedSyncEvent;
60 60
61 61
62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu) 62KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu) 63 : QObject(), mPrefs(prefs ), mParent(parent),mImplementation(implementation), mTargetApp(ta), mSyncMenu(syncmenu)
64{ 64{
65 mServerSocket = 0; 65 mServerSocket = 0;
66 bar = new QProgressBar ( 1, 0 ); 66 bar = new QProgressBar ( 1, 0 );
67 bar->setCaption (""); 67 bar->setCaption ("");
68 mWriteBackInPast = 2; 68 mWriteBackInPast = 2;
69 69
70 70
71} 71}
72 72
73KSyncManager::~KSyncManager() 73KSyncManager::~KSyncManager()
74{ 74{
75 delete bar; 75 delete bar;
76} 76}
77 77
78void KSyncManager::setDefaultFileName( QString s) 78void KSyncManager::setDefaultFileName( QString s)
79{ 79{
80 mDefFileName = s ; 80 mDefFileName = s ;
81 if ( mPrefs->mPassiveSyncAutoStart ) 81 if ( mPrefs->mPassiveSyncAutoStart )
82 enableQuick( false ); 82 enableQuick( false );
83} 83}
84 84
85void KSyncManager::fillSyncMenu() 85void KSyncManager::fillSyncMenu()
86{ 86{
87 if ( mSyncMenu->count() ) 87 if ( mSyncMenu->count() )
88 mSyncMenu->clear(); 88 mSyncMenu->clear();
89 89
90 mSyncMenu->insertItem( i18n("Configure..."), 0 ); 90 mSyncMenu->insertItem( i18n("Configure..."), 0 );
91 mSyncMenu->insertSeparator(); 91 mSyncMenu->insertSeparator();
92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu ); 92 QPopupMenu *clearMenu = new QPopupMenu ( mSyncMenu );
93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 ); 93 mSyncMenu->insertItem( i18n("Remove sync info"),clearMenu, 5000 );
94 clearMenu->insertItem( i18n("For all profiles"), 1 ); 94 clearMenu->insertItem( i18n("For all profiles"), 1 );
95 clearMenu->insertSeparator(); 95 clearMenu->insertSeparator();
96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) ); 96 connect ( clearMenu, SIGNAL( activated ( int ) ), this, SLOT (slotClearMenu( int ) ) );
97 mSyncMenu->insertSeparator(); 97 mSyncMenu->insertSeparator();
98 if ( mServerSocket == 0 ) { 98 if ( mServerSocket == 0 ) {
99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 ); 99 mSyncMenu->insertItem( i18n("Enable Pi-Sync"), 2 );
100 } else { 100 } else {
101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 ); 101 mSyncMenu->insertItem( i18n("Disable Pi-Sync"), 3 );
102 } 102 }
103 mSyncMenu->insertSeparator(); 103 mSyncMenu->insertSeparator();
104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
105 mSyncMenu->insertSeparator(); 105 mSyncMenu->insertSeparator();
106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
107 config.setGroup("General"); 107 config.setGroup("General");
108 QStringList prof = config.readListEntry("SyncProfileNames"); 108 QStringList prof = config.readListEntry("SyncProfileNames");
109 mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 109 mLocalMachineName = config.readEntry("LocalMachineName","undefined");
110 if ( prof.count() < 2 ) { 110 if ( prof.count() < 2 ) {
111 prof.clear(); 111 prof.clear();
112 QString externalName; 112 QString externalName;
113#ifdef DESKTOP_VERSION 113#ifdef DESKTOP_VERSION
114#ifdef _WIN32_ 114#ifdef _WIN32_
115 externalName = "OutLook(not_implemented)"; 115 externalName = "OutLook(not_implemented)";
116#else 116#else
117 externalName = "KDE_Desktop"; 117 externalName = "KDE_Desktop";
118#endif 118#endif
119#else 119#else
120 externalName = "Sharp_DTM"; 120 externalName = "Sharp_DTM";
121#endif 121#endif
122 prof << externalName; 122 prof << externalName;
123 prof << i18n("Local_file"); 123 prof << i18n("Local_file");
124 prof << i18n("Last_file"); 124 prof << i18n("Last_file");
125 KSyncProfile* temp = new KSyncProfile (); 125 KSyncProfile* temp = new KSyncProfile ();
126 temp->setName( prof[0] ); 126 temp->setName( prof[0] );
127 temp->writeConfig(&config); 127 temp->writeConfig(&config);
128 temp->setName( prof[1] ); 128 temp->setName( prof[1] );
129 temp->writeConfig(&config); 129 temp->writeConfig(&config);
130 temp->setName( prof[2] ); 130 temp->setName( prof[2] );
131 temp->writeConfig(&config); 131 temp->writeConfig(&config);
132 config.setGroup("General"); 132 config.setGroup("General");
133 config.writeEntry("SyncProfileNames",prof); 133 config.writeEntry("SyncProfileNames",prof);
134 config.writeEntry("ExternSyncProfiles",externalName); 134 config.writeEntry("ExternSyncProfiles",externalName);
135 config.sync(); 135 config.sync();
136 delete temp; 136 delete temp;
137 } 137 }
138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
139 mSyncProfileNames = prof; 139 mSyncProfileNames = prof;
140 unsigned int i; 140 unsigned int i;
141 for ( i = 0; i < prof.count(); ++i ) { 141 for ( i = 0; i < prof.count(); ++i ) {
142 QString insertText = prof[i]; 142 QString insertText = prof[i];
143 if ( i == 0 ) { 143 if ( i == 0 ) {
144#ifdef DESKTOP_VERSION 144#ifdef DESKTOP_VERSION
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 insertText = "OutLook(not_implemented)"; 146 insertText = "OutLook(not_implemented)";
147#else 147#else
148 insertText = "KDE_Desktop"; 148 insertText = "KDE_Desktop";
149#endif 149#endif
150#else 150#else
151 insertText = "Sharp_DTM"; 151 insertText = "Sharp_DTM";
152#endif 152#endif
153 } 153 }
154 mSyncMenu->insertItem( insertText, 1000+i ); 154 mSyncMenu->insertItem( insertText, 1000+i );
155 clearMenu->insertItem( insertText, 1000+i ); 155 clearMenu->insertItem( insertText, 1000+i );
156 if ( i == 2 ) 156 if ( i == 2 )
157 mSyncMenu->insertSeparator(); 157 mSyncMenu->insertSeparator();
158 } 158 }
159 QDir app_dir; 159 QDir app_dir;
160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
161 if ( mTargetApp == PWMPI) { 161 if ( mTargetApp == PWMPI) {
162 mSyncMenu->removeItem( 1000 ); 162 mSyncMenu->removeItem( 1000 );
163 clearMenu->removeItem( 1000 ); 163 clearMenu->removeItem( 1000 );
164 } 164 }
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
167 mSyncMenu->removeItem( 1000 ); 167 mSyncMenu->removeItem( 1000 );
168 clearMenu->removeItem( 1000 ); 168 clearMenu->removeItem( 1000 );
169 } 169 }
170#endif 170#endif
171 mSyncMenu->removeItem( 1002 ); 171 mSyncMenu->removeItem( 1002 );
172 clearMenu->removeItem( 1002 ); 172 clearMenu->removeItem( 1002 );
173} 173}
174void KSyncManager::slotClearMenu( int action ) 174void KSyncManager::slotClearMenu( int action )
175{ 175{
176 QString syncDevice; 176 QString syncDevice;
177 if ( action > 999 ) { 177 if ( action > 999 ) {
178 syncDevice = mSyncProfileNames[action - 1000] ; 178 syncDevice = mSyncProfileNames[action - 1000] ;
179 } 179 }
180 180
181 181
182 182
183 int result = 0; 183 int result = 0;
184 QString sd; 184 QString sd;
185 if ( syncDevice.isEmpty() ) 185 if ( syncDevice.isEmpty() )
186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?"); 186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?");
187 else 187 else
188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice ); 188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice );
189 189
190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0, 190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0,
191 0, 1 ); 191 0, 1 );
192 if ( result ) 192 if ( result )
193 return; 193 return;
194 mImplementation->removeSyncInfo( syncDevice ); 194 mImplementation->removeSyncInfo( syncDevice );
195} 195}
196void KSyncManager::slotSyncMenu( int action ) 196void KSyncManager::slotSyncMenu( int action )
197{ 197{
198 qDebug("KSM::syncaction %d ", action); 198 qDebug("KSM::syncaction %d ", action);
199 mCurrentResourceLocal = ""; 199 mCurrentResourceLocal = "";
200 emit multiResourceSyncStart( false ); 200 emit multiResourceSyncStart( false );
201 if ( action == 5000 ) 201 if ( action == 5000 )
202 return; 202 return;
203 mSyncWithDesktop = false; 203 mSyncWithDesktop = false;
204 if ( action == 0 ) { 204 if ( action == 0 ) {
205 205
206 // seems to be a Qt2 event handling bug 206 // seems to be a Qt2 event handling bug
207 // syncmenu.clear causes a segfault at first time 207 // syncmenu.clear causes a segfault at first time
208 // when we call it after the main event loop, it is ok 208 // when we call it after the main event loop, it is ok
209 // same behaviour when calling OM/Pi via QCOP for the first time 209 // same behaviour when calling OM/Pi via QCOP for the first time
210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
211 //confSync(); 211 //confSync();
212 212
213 return; 213 return;
214 } 214 }
215 if ( action == 1 ) { 215 if ( action == 1 ) {
216 multiSync( true ); 216 multiSync( true );
217 return; 217 return;
218 } 218 }
219 if ( action == 2 ) { 219 if ( action == 2 ) {
220 enableQuick(); 220 enableQuick();
221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
222 return; 222 return;
223 } 223 }
224 if ( action == 3 ) { 224 if ( action == 3 ) {
225 delete mServerSocket; 225 delete mServerSocket;
226 mServerSocket = 0; 226 mServerSocket = 0;
227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
228 return; 228 return;
229 } 229 }
230 230
231 if (blockSave()) 231 if (blockSave())
232 return; 232 return;
233 233
234 setBlockSave(true); 234 setBlockSave(true);
235 bool silent = false; 235 bool silent = false;
236 if ( action == 999 ) { 236 if ( action == 999 ) {
237 //special mode for silent syncing 237 //special mode for silent syncing
238 action = 1000; 238 action = 1000;
239 silent = true; 239 silent = true;
240 } 240 }
241 241
242 mCurrentSyncProfile = action - 1000 ; 242 mCurrentSyncProfile = action - 1000 ;
243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
244 mCurrentSyncName = mLocalMachineName ; 244 mCurrentSyncName = mLocalMachineName ;
245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
246 KSyncProfile* temp = new KSyncProfile (); 246 KSyncProfile* temp = new KSyncProfile ();
247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
248 temp->readConfig(&config); 248 temp->readConfig(&config);
249 if (silent) { 249 if (silent) {
250 mAskForPreferences = false; 250 mAskForPreferences = false;
251 mShowSyncSummary = false; 251 mShowSyncSummary = false;
252 mWriteBackFile = true; 252 mWriteBackFile = true;
253 mSyncAlgoPrefs = 2;// take newest 253 mSyncAlgoPrefs = 2;// take newest
254 } 254 }
255 else { 255 else {
256 mAskForPreferences = temp->getAskForPreferences(); 256 mAskForPreferences = temp->getAskForPreferences();
257 mShowSyncSummary = temp->getShowSummaryAfterSync(); 257 mShowSyncSummary = temp->getShowSummaryAfterSync();
258 mWriteBackFile = temp->getWriteBackFile(); 258 mWriteBackFile = temp->getWriteBackFile();
259 mSyncAlgoPrefs = temp->getSyncPrefs(); 259 mSyncAlgoPrefs = temp->getSyncPrefs();
260 } 260 }
261 mWriteBackExistingOnly = temp->getWriteBackExisting(); 261 mWriteBackExistingOnly = temp->getWriteBackExisting();
262 mIsKapiFile = temp->getIsKapiFile(); 262 mIsKapiFile = temp->getIsKapiFile();
263 mWriteBackInFuture = 0; 263 mWriteBackInFuture = 0;
264 if ( temp->getWriteBackFuture() ) { 264 if ( temp->getWriteBackFuture() ) {
265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
266 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 266 mWriteBackInPast = temp->getWriteBackPastWeeks( );
267 } 267 }
268 mFilterInCal = temp->getFilterInCal(); 268 mFilterInCal = temp->getFilterInCal();
269 mFilterOutCal = temp->getFilterOutCal(); 269 mFilterOutCal = temp->getFilterOutCal();
270 mFilterInAB = temp->getFilterInAB(); 270 mFilterInAB = temp->getFilterInAB();
271 mFilterOutAB = temp->getFilterOutAB(); 271 mFilterOutAB = temp->getFilterOutAB();
272 272
273 if ( action == 1000 ) { 273 if ( action == 1000 ) {
274 mIsKapiFile = false; 274 mIsKapiFile = false;
275#ifdef DESKTOP_VERSION 275#ifdef DESKTOP_VERSION
276 syncKDE(); 276 syncKDE();
277#else 277#else
278 syncSharp(); 278 syncSharp();
279#endif 279#endif
280 280
281 } else if ( action == 1001 ) { 281 } else if ( action == 1001 ) {
282 syncLocalFile(); 282 syncLocalFile();
283 283
284 } else if ( action == 1002 ) { 284 } else if ( action == 1002 ) {
285 mWriteBackFile = false; 285 mWriteBackFile = false;
286 mAskForPreferences = false; 286 mAskForPreferences = false;
287 mShowSyncSummary = false; 287 mShowSyncSummary = false;
288 mSyncAlgoPrefs = 3; 288 mSyncAlgoPrefs = 3;
289 quickSyncLocalFile(); 289 quickSyncLocalFile();
290 290
291 } else if ( action >= 1003 ) { 291 } else if ( action >= 1003 ) {
292 if ( temp->getIsLocalFileSync() ) { 292 if ( temp->getIsLocalFileSync() ) {
293 switch(mTargetApp) 293 switch(mTargetApp)
294 { 294 {
295 case (KAPI): 295 case (KAPI):
296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 297 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
298 break; 298 break;
299 case (KOPI): 299 case (KOPI):
300 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 300 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 301 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
302 break; 302 break;
303 case (PWMPI): 303 case (PWMPI):
304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 304 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 305 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
306 break; 306 break;
307 default: 307 default:
308 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 308 qDebug("KSM::slotSyncMenu: invalid apptype selected");
309 break; 309 break;
310 310
311 } 311 }
312 } else { 312 } else {
313 if ( temp->getIsPhoneSync() ) { 313 if ( temp->getIsPhoneSync() ) {
314 mPhoneDevice = temp->getPhoneDevice( ) ; 314 mPhoneDevice = temp->getPhoneDevice( ) ;
315 mPhoneConnection = temp->getPhoneConnection( ); 315 mPhoneConnection = temp->getPhoneConnection( );
316 mPhoneModel = temp->getPhoneModel( ); 316 mPhoneModel = temp->getPhoneModel( );
317 syncPhone(); 317 syncPhone();
318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) { 318 } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) {
319 mSpecificResources.clear(); 319 mSpecificResources.clear();
320 if ( mTargetApp == KAPI ) { 320 if ( mTargetApp == KAPI ) {
321 mPassWordPiSync = temp->getRemotePwAB(); 321 mPassWordPiSync = temp->getRemotePwAB();
322 mActiveSyncPort = temp->getRemotePortAB(); 322 mActiveSyncPort = temp->getRemotePortAB();
323 mActiveSyncIP = temp->getRemoteIPAB(); 323 mActiveSyncIP = temp->getRemoteIPAB();
324 } else if ( mTargetApp == KOPI ) { 324 } else if ( mTargetApp == KOPI ) {
325 if ( temp->getIsPiSyncSpec() ) 325 if ( temp->getIsPiSyncSpec() )
326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 326 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
327 mPassWordPiSync = temp->getRemotePw(); 327 mPassWordPiSync = temp->getRemotePw();
328 mActiveSyncPort = temp->getRemotePort(); 328 mActiveSyncPort = temp->getRemotePort();
329 mActiveSyncIP = temp->getRemoteIP(); 329 mActiveSyncIP = temp->getRemoteIP();
330 } else { 330 } else {
331 mPassWordPiSync = temp->getRemotePwPWM(); 331 mPassWordPiSync = temp->getRemotePwPWM();
332 mActiveSyncPort = temp->getRemotePortPWM(); 332 mActiveSyncPort = temp->getRemotePortPWM();
333 mActiveSyncIP = temp->getRemoteIPPWM(); 333 mActiveSyncIP = temp->getRemoteIPPWM();
334 } 334 }
335 syncPi(); 335 syncPi();
336 while ( !mPisyncFinished ) { 336 while ( !mPisyncFinished ) {
337 //qDebug("waiting "); 337 //qDebug("waiting ");
338 qApp->processEvents(); 338 qApp->processEvents();
339 } 339 }
340 } else 340 } else
341 syncRemote( temp ); 341 syncRemote( temp );
342 342
343 } 343 }
344 } 344 }
345 delete temp; 345 delete temp;
346 setBlockSave(false); 346 setBlockSave(false);
347} 347}
348 348
349void KSyncManager::enableQuick( bool ask ) 349void KSyncManager::enableQuick( bool ask )
350{ 350{
351 bool autoStart; 351 bool autoStart;
352 bool changed = false; 352 bool changed = false;
353 if ( ask ) { 353 if ( ask ) {
354 QDialog dia ( 0, "input-dialog", true ); 354 QDialog dia ( 0, "input-dialog", true );
355 QLineEdit lab ( &dia ); 355 QLineEdit lab ( &dia );
356 QVBoxLayout lay( &dia ); 356 QVBoxLayout lay( &dia );
357 lab.setText( mPrefs->mPassiveSyncPort ); 357 lab.setText( mPrefs->mPassiveSyncPort );
358 lay.setMargin(7); 358 lay.setMargin(7);
359 lay.setSpacing(7); 359 lay.setSpacing(7);
360 int po = 9197+mTargetApp; 360 int po = 9197+mTargetApp;
361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia ); 361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
362 lay.addWidget( &label); 362 lay.addWidget( &label);
363 lay.addWidget( &lab); 363 lay.addWidget( &lab);
364 364
365 QLineEdit lepw ( &dia ); 365 QLineEdit lepw ( &dia );
366 lepw.setText( mPrefs->mPassiveSyncPw ); 366 lepw.setText( mPrefs->mPassiveSyncPw );
367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
368 lay.addWidget( &label2); 368 lay.addWidget( &label2);
369 lay.addWidget( &lepw); 369 lay.addWidget( &lepw);
370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
371 lay.addWidget( &autostart); 371 lay.addWidget( &autostart);
372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
373#ifdef DESKTOP_VERSION 373#ifdef DESKTOP_VERSION
374#ifdef _WIN32_ 374#ifdef _WIN32_
375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
376 syncdesktop.hide();// not implemented! 376 syncdesktop.hide();// not implemented!
377#else 377#else
378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
379#endif 379#endif
380 lay.addWidget( &syncdesktop); 380 lay.addWidget( &syncdesktop);
381#else 381#else
382 mPrefs->mPassiveSyncWithDesktop = false; 382 mPrefs->mPassiveSyncWithDesktop = false;
383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
384 syncdesktop.hide(); 384 syncdesktop.hide();
385#endif 385#endif
386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
387 387
388 QPushButton pb ( "OK", &dia); 388 QPushButton pb ( "OK", &dia);
389 lay.addWidget( &pb ); 389 lay.addWidget( &pb );
390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
391 dia.resize( 230,120 ); 391 dia.resize( 230,120 );
392 dia.setCaption( i18n("Enter port for Pi-Sync") ); 392 dia.setCaption( i18n("Enter port for Pi-Sync") );
393 dia.show(); 393 dia.show();
394#ifndef DESKTOP_VERSION 394#ifndef DESKTOP_VERSION
395 int dw = QApplication::desktop()->width(); 395 int dw = QApplication::desktop()->width();
396 int dh = QApplication::desktop()->height(); 396 int dh = QApplication::desktop()->height();
397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
398#endif 398#endif
399 if ( ! dia.exec() ) 399 if ( ! dia.exec() )
400 return; 400 return;
401 dia.hide(); 401 dia.hide();
402 qApp->processEvents(); 402 qApp->processEvents();
403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
404 changed = true; 404 changed = true;
405 mPrefs->mPassiveSyncPw = lepw.text(); 405 mPrefs->mPassiveSyncPw = lepw.text();
406 } 406 }
407 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 407 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
408 mPrefs->mPassiveSyncPort = lab.text(); 408 mPrefs->mPassiveSyncPort = lab.text();
409 changed = true; 409 changed = true;
410 } 410 }
411 autoStart = autostart.isChecked(); 411 autoStart = autostart.isChecked();
412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
413 changed = true; 413 changed = true;
414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
415 } 415 }
416 } 416 }
417 else 417 else
418 autoStart = mPrefs->mPassiveSyncAutoStart; 418 autoStart = mPrefs->mPassiveSyncAutoStart;
419 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 419 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
420 changed = true; 420 changed = true;
421 bool ok; 421 bool ok;
422 mPrefs->mPassiveSyncAutoStart = false; 422 mPrefs->mPassiveSyncAutoStart = false;
423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok); 423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
424 qDebug("%d ", port_t); 424 qDebug("%d ", port_t);
425 if ( ! ok || port_t > 65535 ) { 425 if ( ! ok || port_t > 65535 ) {
426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error")); 426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
427 return; 427 return;
428 } 428 }
429 Q_UINT16 port = port_t; 429 Q_UINT16 port = port_t;
430 //qDebug("port %d ", port); 430 //qDebug("port %d ", port);
431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
432 mServerSocket->setFileName( defaultFileName() );//bbb 432 mServerSocket->setFileName( defaultFileName() );//bbb
433 if ( !mServerSocket->ok() ) { 433 if ( !mServerSocket->ok() ) {
434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) ); 434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
435 delete mServerSocket; 435 delete mServerSocket;
436 mServerSocket = 0; 436 mServerSocket = 0;
437 return; 437 return;
438 } 438 }
439 mPrefs->mPassiveSyncAutoStart = autoStart; 439 mPrefs->mPassiveSyncAutoStart = autoStart;
440 if ( changed ) { 440 if ( changed ) {
441 mPrefs->writeConfig(); 441 mPrefs->writeConfig();
442 } 442 }
443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) ); 445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) );
446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) ); 446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) );
447} 447}
448void KSyncManager::displayErrorPort() 448void KSyncManager::displayErrorPort()
449{ 449{
450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error")); 450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
451} 451}
452void KSyncManager::syncLocalFile() 452void KSyncManager::syncLocalFile()
453{ 453{
454 454
455 QString fn =mPrefs->mLastSyncedLocalFile; 455 QString fn =mPrefs->mLastSyncedLocalFile;
456 QString ext; 456 QString ext;
457 457
458 switch(mTargetApp) 458 switch(mTargetApp)
459 { 459 {
460 case (KAPI): 460 case (KAPI):
461 ext = "(*.vcf)"; 461 ext = "(*.vcf)";
462 break; 462 break;
463 case (KOPI): 463 case (KOPI):
464 ext = "(*.ics/*.vcs)"; 464 ext = "(*.ics/*.vcs)";
465 break; 465 break;
466 case (PWMPI): 466 case (PWMPI):
467 ext = "(*.pwm)"; 467 ext = "(*.pwm)";
468 break; 468 break;
469 default: 469 default:
470 qDebug("KSM::syncLocalFile: invalid apptype selected"); 470 qDebug("KSM::syncLocalFile: invalid apptype selected");
471 break; 471 break;
472 472
473 } 473 }
474 474
475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
476 if ( fn == "" ) 476 if ( fn == "" )
477 return; 477 return;
478 if ( syncWithFile( fn, false ) ) { 478 if ( syncWithFile( fn, false ) ) {
479 qDebug("KSM::syncLocalFile() successful "); 479 qDebug("KSM::syncLocalFile() successful ");
480 } 480 }
481 481
482} 482}
483 483
484bool KSyncManager::syncWithFile( QString fn , bool quick ) 484bool KSyncManager::syncWithFile( QString fn , bool quick )
485{ 485{
486 bool ret = false; 486 bool ret = false;
487 QFileInfo info; 487 QFileInfo info;
488 info.setFile( fn ); 488 info.setFile( fn );
489 QString mess; 489 QString mess;
490 if ( !info. exists() ) { 490 if ( !info. exists() ) {
491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
492 QMessageBox::warning( mParent, i18n("Warning!"), 492 QMessageBox::warning( mParent, i18n("Warning!"),
493 mess ); 493 mess );
494 return ret; 494 return ret;
495 } 495 }
496 int result = 0; 496 int result = 0;
497 if ( !quick ) { 497 if ( !quick ) {
498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
499 result = QMessageBox::warning( mParent, i18n("Warning!"), 499 result = QMessageBox::warning( mParent, i18n("Warning!"),
500 mess, 500 mess,
501 i18n("Sync"), i18n("Cancel"), 0, 501 i18n("Sync"), i18n("Cancel"), 0,
502 0, 1 ); 502 0, 1 );
503 if ( result ) 503 if ( result )
504 return false; 504 return false;
505 } 505 }
506 if ( mAskForPreferences ) 506 if ( mAskForPreferences )
507 if ( !edit_sync_options()) { 507 if ( !edit_sync_options()) {
508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
509 return false; 509 return false;
510 } 510 }
511 if ( result == 0 ) { 511 if ( result == 0 ) {
512 //qDebug("Now sycing ... "); 512 //qDebug("Now sycing ... ");
513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) ) 513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) )
514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
515 else 515 else
516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
517 if ( ! quick ) 517 if ( ! quick )
518 mPrefs->mLastSyncedLocalFile = fn; 518 mPrefs->mLastSyncedLocalFile = fn;
519 } 519 }
520 return ret; 520 return ret;
521} 521}
522 522
523void KSyncManager::quickSyncLocalFile() 523void KSyncManager::quickSyncLocalFile()
524{ 524{
525 525
526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
527 qDebug("KSM::quick syncLocalFile() successful "); 527 qDebug("KSM::quick syncLocalFile() successful ");
528 528
529 } 529 }
530} 530}
531 531
532void KSyncManager::multiSync( bool askforPrefs ) 532void KSyncManager::multiSync( bool askforPrefs )
533{ 533{
534 if (blockSave()) 534 if (blockSave())
535 return; 535 return;
536 setBlockSave(true); 536 setBlockSave(true);
537 mCurrentResourceLocal = ""; 537 mCurrentResourceLocal = "";
538 if ( askforPrefs ) { 538 if ( askforPrefs ) {
539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
541 question, 541 question,
542 i18n("Yes"), i18n("No"), 542 i18n("Yes"), i18n("No"),
543 0, 0 ) != 0 ) { 543 0, 0 ) != 0 ) {
544 setBlockSave(false); 544 setBlockSave(false);
545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
546 return; 546 return;
547 } 547 }
548 } 548 }
549 mCurrentSyncDevice = i18n("Multiple profiles") ; 549 mCurrentSyncDevice = i18n("Multiple profiles") ;
550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs; 550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
551 if ( askforPrefs ) { 551 if ( askforPrefs ) {
552 if ( !edit_sync_options()) { 552 if ( !edit_sync_options()) {
553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") ); 553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") );
554 return; 554 return;
555 } 555 }
556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs; 556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs;
557 } 557 }
558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") ); 558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") );
559 qApp->processEvents(); 559 qApp->processEvents();
560 int num = ringSync() ; 560 int num = ringSync() ;
561 if ( num > 1 ) 561 if ( num > 1 )
562 ringSync(); 562 ringSync();
563 setBlockSave(false); 563 setBlockSave(false);
564 if ( num ) 564 if ( num )
565 emit save(); 565 emit save();
566 if ( num ) 566 if ( num )
567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) ); 567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) );
568 else 568 else
569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
570 return; 570 return;
571} 571}
572 572
573int KSyncManager::ringSync() 573int KSyncManager::ringSync()
574{ 574{
575 emit multiResourceSyncStart( false ); 575 emit multiResourceSyncStart( false );
576 int syncedProfiles = 0; 576 int syncedProfiles = 0;
577 unsigned int i; 577 unsigned int i;
578 QTime timer; 578 QTime timer;
579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
580 QStringList syncProfileNames = mSyncProfileNames; 580 QStringList syncProfileNames = mSyncProfileNames;
581 KSyncProfile* temp = new KSyncProfile (); 581 KSyncProfile* temp = new KSyncProfile ();
582 mAskForPreferences = false; 582 mAskForPreferences = false;
583 mCurrentResourceLocal = ""; 583 mCurrentResourceLocal = "";
584 for ( i = 0; i < syncProfileNames.count(); ++i ) { 584 for ( i = 0; i < syncProfileNames.count(); ++i ) {
585 mCurrentSyncProfile = i; 585 mCurrentSyncProfile = i;
586 temp->setName(syncProfileNames[mCurrentSyncProfile]); 586 temp->setName(syncProfileNames[mCurrentSyncProfile]);
587 temp->readConfig(&config); 587 temp->readConfig(&config);
588 588
589 bool includeInRingSync = false; 589 bool includeInRingSync = false;
590 switch(mTargetApp) 590 switch(mTargetApp)
591 { 591 {
592 case (KAPI): 592 case (KAPI):
593 includeInRingSync = temp->getIncludeInRingSyncAB(); 593 includeInRingSync = temp->getIncludeInRingSyncAB();
594 break; 594 break;
595 case (KOPI): 595 case (KOPI):
596 includeInRingSync = temp->getIncludeInRingSync(); 596 includeInRingSync = temp->getIncludeInRingSync();
597 break; 597 break;
598 case (PWMPI): 598 case (PWMPI):
599 includeInRingSync = temp->getIncludeInRingSyncPWM(); 599 includeInRingSync = temp->getIncludeInRingSyncPWM();
600 break; 600 break;
601 default: 601 default:
602 qDebug("KSM::ringSync: invalid apptype selected"); 602 qDebug("KSM::ringSync: invalid apptype selected");
603 break; 603 break;
604 604
605 } 605 }
606 606
607 607
608 if ( includeInRingSync && ( i < 1 || i > 2 )) { 608 if ( includeInRingSync && ( i < 1 || i > 2 )) {
609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
610 ++syncedProfiles; 610 ++syncedProfiles;
611 mSyncWithDesktop = false; 611 mSyncWithDesktop = false;
612 // mAskForPreferences = temp->getAskForPreferences(); 612 // mAskForPreferences = temp->getAskForPreferences();
613 mWriteBackFile = temp->getWriteBackFile(); 613 mWriteBackFile = temp->getWriteBackFile();
614 mWriteBackExistingOnly = temp->getWriteBackExisting(); 614 mWriteBackExistingOnly = temp->getWriteBackExisting();
615 mIsKapiFile = temp->getIsKapiFile(); 615 mIsKapiFile = temp->getIsKapiFile();
616 mWriteBackInFuture = 0; 616 mWriteBackInFuture = 0;
617 if ( temp->getWriteBackFuture() ) { 617 if ( temp->getWriteBackFuture() ) {
618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
619 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 619 mWriteBackInPast = temp->getWriteBackPastWeeks( );
620 } 620 }
621 mFilterInCal = temp->getFilterInCal(); 621 mFilterInCal = temp->getFilterInCal();
622 mFilterOutCal = temp->getFilterOutCal(); 622 mFilterOutCal = temp->getFilterOutCal();
623 mFilterInAB = temp->getFilterInAB(); 623 mFilterInAB = temp->getFilterInAB();
624 mFilterOutAB = temp->getFilterOutAB(); 624 mFilterOutAB = temp->getFilterOutAB();
625 mShowSyncSummary = false; 625 mShowSyncSummary = false;
626 mCurrentSyncDevice = syncProfileNames[i] ; 626 mCurrentSyncDevice = syncProfileNames[i] ;
627 mCurrentSyncName = mLocalMachineName; 627 mCurrentSyncName = mLocalMachineName;
628 if ( i == 0 ) { 628 if ( i == 0 ) {
629 mIsKapiFile = false; 629 mIsKapiFile = false;
630#ifdef DESKTOP_VERSION 630#ifdef DESKTOP_VERSION
631 syncKDE(); 631 syncKDE();
632#else 632#else
633 syncSharp(); 633 syncSharp();
634#endif 634#endif
635 } else { 635 } else {
636 if ( temp->getIsLocalFileSync() ) { 636 if ( temp->getIsLocalFileSync() ) {
637 switch(mTargetApp) 637 switch(mTargetApp)
638 { 638 {
639 case (KAPI): 639 case (KAPI):
640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
642 break; 642 break;
643 case (KOPI): 643 case (KOPI):
644 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 644 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
646 break; 646 break;
647 case (PWMPI): 647 case (PWMPI):
648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
650 break; 650 break;
651 default: 651 default:
652 qDebug("KSM: invalid apptype selected"); 652 qDebug("KSM: invalid apptype selected");
653 break; 653 break;
654 } 654 }
655 } else { 655 } else {
656 if ( temp->getIsPhoneSync() ) { 656 if ( temp->getIsPhoneSync() ) {
657 mPhoneDevice = temp->getPhoneDevice( ) ; 657 mPhoneDevice = temp->getPhoneDevice( ) ;
658 mPhoneConnection = temp->getPhoneConnection( ); 658 mPhoneConnection = temp->getPhoneConnection( );
659 mPhoneModel = temp->getPhoneModel( ); 659 mPhoneModel = temp->getPhoneModel( );
660 syncPhone(); 660 syncPhone();
661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) { 661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) {
662 mSpecificResources.clear(); 662 mSpecificResources.clear();
663 if ( mTargetApp == KAPI ) { 663 if ( mTargetApp == KAPI ) {
664 mPassWordPiSync = temp->getRemotePwAB(); 664 mPassWordPiSync = temp->getRemotePwAB();
665 mActiveSyncPort = temp->getRemotePortAB(); 665 mActiveSyncPort = temp->getRemotePortAB();
666 mActiveSyncIP = temp->getRemoteIPAB(); 666 mActiveSyncIP = temp->getRemoteIPAB();
667 } else if ( mTargetApp == KOPI ) { 667 } else if ( mTargetApp == KOPI ) {
668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true ); 668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi(),true );
669 mPassWordPiSync = temp->getRemotePw(); 669 mPassWordPiSync = temp->getRemotePw();
670 mActiveSyncPort = temp->getRemotePort(); 670 mActiveSyncPort = temp->getRemotePort();
671 mActiveSyncIP = temp->getRemoteIP(); 671 mActiveSyncIP = temp->getRemoteIP();
672 } else { 672 } else {
673 mPassWordPiSync = temp->getRemotePwPWM(); 673 mPassWordPiSync = temp->getRemotePwPWM();
674 mActiveSyncPort = temp->getRemotePortPWM(); 674 mActiveSyncPort = temp->getRemotePortPWM();
675 mActiveSyncIP = temp->getRemoteIPPWM(); 675 mActiveSyncIP = temp->getRemoteIPPWM();
676 } 676 }
677 syncPi(); 677 syncPi();
678 while ( !mPisyncFinished ) { 678 while ( !mPisyncFinished ) {
679 //qDebug("waiting "); 679 //qDebug("waiting ");
680 qApp->processEvents(); 680 qApp->processEvents();
681 } 681 }
682 timer.start(); 682 timer.start();
683 while ( timer.elapsed () < 2000 ) { 683 while ( timer.elapsed () < 2000 ) {
684 qApp->processEvents(); 684 qApp->processEvents();
685 } 685 }
686 } else 686 } else
687 syncRemote( temp, false ); 687 syncRemote( temp, false );
688 688
689 } 689 }
690 } 690 }
691 timer.start(); 691 timer.start();
692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") ); 692 mParent->topLevelWidget()->setCaption(i18n("Multiple sync in progress ... please wait!") );
693 while ( timer.elapsed () < 2000 ) { 693 while ( timer.elapsed () < 2000 ) {
694 qApp->processEvents(); 694 qApp->processEvents();
695#ifndef _WIN32_ 695#ifndef _WIN32_
696 sleep (1); 696 sleep (1);
697#endif 697#endif
698 } 698 }
699 699
700 } 700 }
701 701
702 } 702 }
703 delete temp; 703 delete temp;
704 return syncedProfiles; 704 return syncedProfiles;
705} 705}
706 706
707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask) 707void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
708{ 708{
709 QString question; 709 QString question;
710 if ( ask ) { 710 if ( ask ) {
711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 711 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
712 if ( QMessageBox::information( mParent, i18n("Sync"), 712 if ( QMessageBox::information( mParent, i18n("Sync"),
713 question, 713 question,
714 i18n("Yes"), i18n("No"), 714 i18n("Yes"), i18n("No"),
715 0, 0 ) != 0 ) 715 0, 0 ) != 0 )
716 return; 716 return;
717 } 717 }
718 718
719 QString preCommand; 719 QString preCommand;
720 QString localTempFile; 720 QString localTempFile;
721 QString postCommand; 721 QString postCommand;
722 722
723 switch(mTargetApp) 723 switch(mTargetApp)
724 { 724 {
725 case (KAPI): 725 case (KAPI):
726 preCommand = prof->getPreSyncCommandAB(); 726 preCommand = prof->getPreSyncCommandAB();
727 postCommand = prof->getPostSyncCommandAB(); 727 postCommand = prof->getPostSyncCommandAB();
728 localTempFile = prof->getLocalTempFileAB(); 728 localTempFile = prof->getLocalTempFileAB();
729 break; 729 break;
730 case (KOPI): 730 case (KOPI):
731 preCommand = prof->getPreSyncCommand(); 731 preCommand = prof->getPreSyncCommand();
732 postCommand = prof->getPostSyncCommand(); 732 postCommand = prof->getPostSyncCommand();
733 localTempFile = prof->getLocalTempFile(); 733 localTempFile = prof->getLocalTempFile();
734 break; 734 break;
735 case (PWMPI): 735 case (PWMPI):
736 preCommand = prof->getPreSyncCommandPWM(); 736 preCommand = prof->getPreSyncCommandPWM();
737 postCommand = prof->getPostSyncCommandPWM(); 737 postCommand = prof->getPostSyncCommandPWM();
738 localTempFile = prof->getLocalTempFilePWM(); 738 localTempFile = prof->getLocalTempFilePWM();
739 break; 739 break;
740 default: 740 default:
741 qDebug("KSM::syncRemote: invalid apptype selected"); 741 qDebug("KSM::syncRemote: invalid apptype selected");
742 break; 742 break;
743 } 743 }
744 744
745 745
746 int fi; 746 int fi;
747 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 747 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
748 QString pwd = getPassword(); 748 QString pwd = getPassword();
749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 749 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
750 750
751 } 751 }
752 int maxlen = 30; 752 int maxlen = 30;
753 if ( QApplication::desktop()->width() > 320 ) 753 if ( QApplication::desktop()->width() > 320 )
754 maxlen += 25; 754 maxlen += 25;
755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 755 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
756 int fileSize = 0; 756 int fileSize = 0;
757 int result = system ( preCommand ); 757 int result = system ( preCommand );
758 // 0 : okay 758 // 0 : okay
759 // 256: no such file or dir 759 // 256: no such file or dir
760 // 760 //
761 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result ); 761 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result );
762 if ( result != 0 ) { 762 if ( result != 0 ) {
763 unsigned int len = maxlen; 763 unsigned int len = maxlen;
764 while ( len < preCommand.length() ) { 764 while ( len < preCommand.length() ) {
765 preCommand.insert( len , "\n" ); 765 preCommand.insert( len , "\n" );
766 len += maxlen +2; 766 len += maxlen +2;
767 } 767 }
768 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 (preCommand) ; 768 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 (preCommand) ;
769 QMessageBox::information( mParent, i18n("Sync - ERROR"), 769 QMessageBox::information( mParent, i18n("Sync - ERROR"),
770 question, 770 question,
771 i18n("Okay!")) ; 771 i18n("Okay!")) ;
772 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 772 mParent->topLevelWidget()->setCaption ("KDE-Pim");
773 return; 773 return;
774 } 774 }
775 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 775 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
776 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 776 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
777 777
778 if ( syncWithFile( localTempFile, true ) ) { 778 if ( syncWithFile( localTempFile, true ) ) {
779 779
780 if ( mWriteBackFile ) { 780 if ( mWriteBackFile ) {
781 int fi; 781 int fi;
782 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 782 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
783 QString pwd = getPassword(); 783 QString pwd = getPassword();
784 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 784 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
785 785
786 } 786 }
787 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 787 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
788 result = system ( postCommand ); 788 result = system ( postCommand );
789 qDebug("KSM::Sync:Writing back file result: %d ", result); 789 qDebug("KSM::Sync:Writing back file result: %d ", result);
790 if ( result != 0 ) { 790 if ( result != 0 ) {
791 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 791 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
792 return; 792 return;
793 } else { 793 } else {
794 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 794 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
795 } 795 }
796 } 796 }
797 } 797 }
798 return; 798 return;
799} 799}
800bool KSyncManager::edit_pisync_options() 800bool KSyncManager::edit_pisync_options()
801{ 801{
802 QDialog dia( mParent, "dia", true ); 802 QDialog dia( mParent, "dia", true );
803 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice ); 803 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
804 QVBoxLayout lay ( &dia ); 804 QVBoxLayout lay ( &dia );
805 lay.setSpacing( 5 ); 805 lay.setSpacing( 5 );
806 lay.setMargin( 3 ); 806 lay.setMargin( 3 );
807 QLabel lab1 ( i18n("Password for remote access:"), &dia); 807 QLabel lab1 ( i18n("Password for remote access:"), &dia);
808 lay.addWidget( &lab1 ); 808 lay.addWidget( &lab1 );
809 QLineEdit le1 (&dia ); 809 QLineEdit le1 (&dia );
810 lay.addWidget( &le1 ); 810 lay.addWidget( &le1 );
811 QLabel lab2 ( i18n("Remote IP address:"), &dia); 811 QLabel lab2 ( i18n("Remote IP address:"), &dia);
812 lay.addWidget( &lab2 ); 812 lay.addWidget( &lab2 );
813 QLineEdit le2 (&dia ); 813 QLineEdit le2 (&dia );
814 lay.addWidget( &le2 ); 814 lay.addWidget( &le2 );
815 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia); 815 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia);
816 lay.addWidget( &lab3 ); 816 lay.addWidget( &lab3 );
817 QLineEdit le3 (&dia ); 817 QLineEdit le3 (&dia );
818 lay.addWidget( &le3 ); 818 lay.addWidget( &le3 );
819 QPushButton pb ( "OK", &dia); 819 QPushButton pb ( "OK", &dia);
820 lay.addWidget( &pb ); 820 lay.addWidget( &pb );
821 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 821 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
822 le1.setText( mPassWordPiSync ); 822 le1.setText( mPassWordPiSync );
823 le2.setText( mActiveSyncIP ); 823 le2.setText( mActiveSyncIP );
824 le3.setText( mActiveSyncPort ); 824 le3.setText( mActiveSyncPort );
825 if ( dia.exec() ) { 825 if ( dia.exec() ) {
826 mPassWordPiSync = le1.text(); 826 mPassWordPiSync = le1.text();
827 mActiveSyncPort = le3.text(); 827 mActiveSyncPort = le3.text();
828 mActiveSyncIP = le2.text(); 828 mActiveSyncIP = le2.text();
829 return true; 829 return true;
830 } 830 }
831 return false; 831 return false;
832} 832}
833bool KSyncManager::edit_sync_options() 833bool KSyncManager::edit_sync_options()
834{ 834{
835 835
836 QDialog dia( mParent, "dia", true ); 836 QDialog dia( mParent, "dia", true );
837 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 837 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
838 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 838 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
839 QVBoxLayout lay ( &dia ); 839 QVBoxLayout lay ( &dia );
840 lay.setSpacing( 2 ); 840 lay.setSpacing( 2 );
841 lay.setMargin( 3 ); 841 lay.setMargin( 3 );
842 lay.addWidget(&gr); 842 lay.addWidget(&gr);
843 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 843 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
844 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 844 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
845 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 845 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
846 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 846 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
847 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 847 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
848 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 848 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
849 //QRadioButton both( i18n("Take both on conflict"), &gr ); 849 //QRadioButton both( i18n("Take both on conflict"), &gr );
850 QPushButton pb ( "OK", &dia); 850 QPushButton pb ( "OK", &dia);
851 lay.addWidget( &pb ); 851 lay.addWidget( &pb );
852 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 852 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
853 switch ( mSyncAlgoPrefs ) { 853 switch ( mSyncAlgoPrefs ) {
854 case 0: 854 case 0:
855 loc.setChecked( true); 855 loc.setChecked( true);
856 break; 856 break;
857 case 1: 857 case 1:
858 rem.setChecked( true ); 858 rem.setChecked( true );
859 break; 859 break;
860 case 2: 860 case 2:
861 newest.setChecked( true); 861 newest.setChecked( true);
862 break; 862 break;
863 case 3: 863 case 3:
864 ask.setChecked( true); 864 ask.setChecked( true);
865 break; 865 break;
866 case 4: 866 case 4:
867 f_loc.setChecked( true); 867 f_loc.setChecked( true);
868 break; 868 break;
869 case 5: 869 case 5:
870 f_rem.setChecked( true); 870 f_rem.setChecked( true);
871 break; 871 break;
872 case 6: 872 case 6:
873 // both.setChecked( true); 873 // both.setChecked( true);
874 break; 874 break;
875 default: 875 default:
876 break; 876 break;
877 } 877 }
878 if ( dia.exec() ) { 878 if ( dia.exec() ) {
879 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 879 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
880 return true; 880 return true;
881 } 881 }
882 return false; 882 return false;
883} 883}
884 884
885QString KSyncManager::getPassword( ) 885QString KSyncManager::getPassword( )
886{ 886{
887 QString retfile = ""; 887 QString retfile = "";
888 QDialog dia ( mParent, "input-dialog", true ); 888 QDialog dia ( mParent, "input-dialog", true );
889 QLineEdit lab ( &dia ); 889 QLineEdit lab ( &dia );
890 lab.setEchoMode( QLineEdit::Password ); 890 lab.setEchoMode( QLineEdit::Password );
891 QVBoxLayout lay( &dia ); 891 QVBoxLayout lay( &dia );
892 lay.setMargin(7); 892 lay.setMargin(7);
893 lay.setSpacing(7); 893 lay.setSpacing(7);
894 lay.addWidget( &lab); 894 lay.addWidget( &lab);
895 dia.setFixedSize( 230,50 ); 895 dia.setFixedSize( 230,50 );
896 dia.setCaption( i18n("Enter password") ); 896 dia.setCaption( i18n("Enter password") );
897 QPushButton pb ( "OK", &dia); 897 QPushButton pb ( "OK", &dia);
898 lay.addWidget( &pb ); 898 lay.addWidget( &pb );
899 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 899 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
900 dia.show(); 900 dia.show();
901 int res = dia.exec(); 901 int res = dia.exec();
902 if ( res ) 902 if ( res )
903 retfile = lab.text(); 903 retfile = lab.text();
904 dia.hide(); 904 dia.hide();
905 qApp->processEvents(); 905 qApp->processEvents();
906 return retfile; 906 return retfile;
907 907
908} 908}
909 909
910 910
911void KSyncManager::confSync() 911void KSyncManager::confSync()
912{ 912{
913 static KSyncPrefsDialog* sp = 0; 913 static KSyncPrefsDialog* sp = 0;
914 if ( ! sp ) { 914 if ( ! sp ) {
915 sp = new KSyncPrefsDialog( mParent, "syncprefs", true ); 915 sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
916 } 916 }
917 sp->usrReadConfig(); 917 sp->usrReadConfig();
918#ifndef DESKTOP_VERSION 918#ifndef DESKTOP_VERSION
919 sp->showMaximized(); 919 sp->showMaximized();
920#else 920#else
921 sp->show(); 921 sp->show();
922#endif 922#endif
923 sp->exec(); 923 sp->exec();
924 QStringList oldSyncProfileNames = mSyncProfileNames; 924 QStringList oldSyncProfileNames = mSyncProfileNames;
925 mSyncProfileNames = sp->getSyncProfileNames(); 925 mSyncProfileNames = sp->getSyncProfileNames();
926 mLocalMachineName = sp->getLocalMachineName (); 926 mLocalMachineName = sp->getLocalMachineName ();
927 int ii; 927 int ii;
928 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) { 928 for ( ii = 0; ii < oldSyncProfileNames.count(); ++ii ) {
929 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) ) 929 if ( ! mSyncProfileNames.contains( oldSyncProfileNames[ii] ) )
930 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] ); 930 mImplementation->removeSyncInfo( oldSyncProfileNames[ii] );
931 } 931 }
932 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 932 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
933} 933}
934void KSyncManager::syncKDE() 934void KSyncManager::syncKDE()
935{ 935{
936 mSyncWithDesktop = true; 936 mSyncWithDesktop = true;
937 emit save(); 937 emit save();
938 switch(mTargetApp) 938 switch(mTargetApp)
939 { 939 {
940 case (KAPI): 940 case (KAPI):
941 { 941 {
942#ifdef DESKTOP_VERSION 942#ifdef DESKTOP_VERSION
943 QString command = "kdeabdump33"; 943 QString command = "kdeabdump33";
944 QString commandfile = "kdeabdump33"; 944 QString commandfile = "kdeabdump33";
945 QString commandpath = qApp->applicationDirPath () + "/"; 945 QString commandpath = qApp->applicationDirPath () + "/";
946#else 946#else
947 QString command = "kdeabdump33"; 947 QString command = "kdeabdump33";
948 QString commandfile = "kdeabdump33"; 948 QString commandfile = "kdeabdump33";
949 QString commandpath = QDir::homeDirPath ()+"/"; 949 QString commandpath = QDir::homeDirPath ()+"/";
950#endif 950#endif
951 if ( ! QFile::exists ( commandpath+commandfile ) ) 951 if ( ! QFile::exists ( commandpath+commandfile ) )
952 command = commandfile; 952 command = commandfile;
953 else 953 else
954 command = commandpath+commandfile; 954 command = commandpath+commandfile;
955 955
956 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf"; 956 QString fileName = QDir::homeDirPath ()+"/.kdeaddressbookdump.vcf";
957 int result = system ( command.latin1()); 957 int result = system ( command.latin1());
958 qDebug("AB dump 33 command call result: %d ", result); 958 qDebug("AB dump 33 command call result: %d ", result);
959 if ( result != 0 ) { 959 if ( result != 0 ) {
960 qDebug("Calling AB dump version 33 failed. Trying 34... "); 960 qDebug("Calling AB dump version 33 failed. Trying 34... ");
961 commandfile = "kdeabdump34"; 961 commandfile = "kdeabdump34";
962 if ( ! QFile::exists ( commandpath+commandfile ) ) 962 if ( ! QFile::exists ( commandpath+commandfile ) )
963 command = commandfile; 963 command = commandfile;
964 else 964 else
965 command = commandpath+commandfile; 965 command = commandpath+commandfile;
966 result = system ( command.latin1()); 966 result = system ( command.latin1());
967 qDebug("AB dump 34 command call result: %d ", result); 967 qDebug("AB dump 34 command call result: %d ", result);
968 if ( result != 0 ) { 968 if ( result != 0 ) {
969 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 969 KMessageBox::error( 0, i18n("Error accessing KDE addressbook data.\nMake sure the file\n%1kdeabdump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
970 return; 970 return;
971 } 971 }
972 } 972 }
973 if ( syncWithFile( fileName,true ) ) { 973 if ( syncWithFile( fileName,true ) ) {
974 if ( mWriteBackFile ) { 974 if ( mWriteBackFile ) {
975 command += " --read"; 975 command += " --read";
976 system ( command.latin1()); 976 system ( command.latin1());
977 } 977 }
978 } 978 }
979 979
980 } 980 }
981 break; 981 break;
982 case (KOPI): 982 case (KOPI):
983 { 983 {
984#ifdef DESKTOP_VERSION 984#ifdef DESKTOP_VERSION
985 QString command = "kdecaldump33"; 985 QString command = "kdecaldump33";
986 QString commandfile = "kdecaldump33"; 986 QString commandfile = "kdecaldump33";
987 QString commandpath = qApp->applicationDirPath () + "/"; 987 QString commandpath = qApp->applicationDirPath () + "/";
988#else 988#else
989 QString command = "kdecaldump33"; 989 QString command = "kdecaldump33";
990 QString commandfile = "kdecaldump33"; 990 QString commandfile = "kdecaldump33";
991 QString commandpath = QDir::homeDirPath ()+"/"; 991 QString commandpath = QDir::homeDirPath ()+"/";
992#endif 992#endif
993 if ( ! QFile::exists ( commandpath+commandfile ) ) 993 if ( ! QFile::exists ( commandpath+commandfile ) )
994 command = commandfile; 994 command = commandfile;
995 else 995 else
996 command = commandpath+commandfile; 996 command = commandpath+commandfile;
997 997
998 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics"; 998 QString fileName = QDir::homeDirPath ()+"/.kdecalendardump.ics";
999 int result = system ( command.latin1()); 999 int result = system ( command.latin1());
1000 qDebug("Cal dump 33 command call result result: %d ", result); 1000 qDebug("Cal dump 33 command call result result: %d ", result);
1001 if ( result != 0 ) { 1001 if ( result != 0 ) {
1002 qDebug("Calling CAL dump version 33 failed. Trying 34... "); 1002 qDebug("Calling CAL dump version 33 failed. Trying 34... ");
1003 commandfile = "kdecaldump34"; 1003 commandfile = "kdecaldump34";
1004 if ( ! QFile::exists ( commandpath+commandfile ) ) 1004 if ( ! QFile::exists ( commandpath+commandfile ) )
1005 command = commandfile; 1005 command = commandfile;
1006 else 1006 else
1007 command = commandpath+commandfile; 1007 command = commandpath+commandfile;
1008 result = system ( command.latin1()); 1008 result = system ( command.latin1());
1009 qDebug("Cal dump 34 command call result result: %d ", result); 1009 qDebug("Cal dump 34 command call result result: %d ", result);
1010 if ( result != 0 ) { 1010 if ( result != 0 ) {
1011 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath )); 1011 KMessageBox::error( 0, i18n("Error accessing KDE calendar data.\nMake sure the file\n%1kdecaldump3x\nexists ( x = 3 or 4 ).\nSupported KDE versions are 3.3 and 3.4.\nUsed version should be auto detected.\n").arg( commandpath ));
1012 return; 1012 return;
1013 } 1013 }
1014 } 1014 }
1015 if ( syncWithFile( fileName,true ) ) { 1015 if ( syncWithFile( fileName,true ) ) {
1016 if ( mWriteBackFile ) { 1016 if ( mWriteBackFile ) {
1017 command += " --read"; 1017 command += " --read";
1018 system ( command.latin1()); 1018 system ( command.latin1());
1019 } 1019 }
1020 } 1020 }
1021 1021
1022 } 1022 }
1023 break; 1023 break;
1024 case (PWMPI): 1024 case (PWMPI):
1025 1025
1026 break; 1026 break;
1027 default: 1027 default:
1028 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 1028 qDebug("KSM::slotSyncMenu: invalid apptype selected");
1029 break; 1029 break;
1030 1030
1031 } 1031 }
1032} 1032}
1033 1033
1034void KSyncManager::syncSharp() 1034void KSyncManager::syncSharp()
1035{ 1035{
1036 1036
1037 if ( ! syncExternalApplication("sharp") ) 1037 if ( ! syncExternalApplication("sharp") )
1038 qDebug("KSM::ERROR sync sharp "); 1038 qDebug("KSM::ERROR sync sharp ");
1039} 1039}
1040 1040
1041bool KSyncManager::syncExternalApplication(QString resource) 1041bool KSyncManager::syncExternalApplication(QString resource)
1042{ 1042{
1043 1043
1044 emit save(); 1044 emit save();
1045 1045
1046 if ( mAskForPreferences ) 1046 if ( mAskForPreferences )
1047 if ( !edit_sync_options()) { 1047 if ( !edit_sync_options()) {
1048 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1048 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1049 return false; 1049 return false;
1050 } 1050 }
1051 1051
1052 qDebug("KSM::Sync extern %s", resource.latin1()); 1052 qDebug("KSM::Sync extern %s", resource.latin1());
1053 1053
1054 bool syncOK = mImplementation->syncExternal(this, resource); 1054 bool syncOK = mImplementation->syncExternal(this, resource);
1055 1055
1056 return syncOK; 1056 return syncOK;
1057 1057
1058} 1058}
1059 1059
1060void KSyncManager::syncPhone() 1060void KSyncManager::syncPhone()
1061{ 1061{
1062 1062
1063 syncExternalApplication("phone"); 1063 syncExternalApplication("phone");
1064 1064
1065} 1065}
1066 1066
1067void KSyncManager::showProgressBar(int percentage, QString caption, int total) 1067void KSyncManager::showProgressBar(int percentage, QString caption, int total)
1068{ 1068{
1069 if (!bar->isVisible()) 1069 if (!bar->isVisible())
1070 { 1070 {
1071 int w = 300; 1071 int w = 300;
1072 if ( QApplication::desktop()->width() < 320 ) 1072 if ( QApplication::desktop()->width() < 320 )
1073 w = 220; 1073 w = 220;
1074 int h = bar->sizeHint().height() ; 1074 int h = bar->sizeHint().height() ;
1075 int dw = QApplication::desktop()->width(); 1075 int dw = QApplication::desktop()->width();
1076 int dh = QApplication::desktop()->height(); 1076 int dh = QApplication::desktop()->height();
1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1078 bar->setCaption (caption); 1078 bar->setCaption (caption);
1079 bar->setTotalSteps ( total ) ; 1079 bar->setTotalSteps ( total ) ;
1080 bar->show(); 1080 bar->show();
1081 } 1081 }
1082 bar->raise(); 1082 bar->raise();
1083 bar->setProgress( percentage ); 1083 bar->setProgress( percentage );
1084 qApp->processEvents(); 1084 qApp->processEvents();
1085} 1085}
1086 1086
1087void KSyncManager::hideProgressBar() 1087void KSyncManager::hideProgressBar()
1088{ 1088{
1089 bar->hide(); 1089 bar->hide();
1090 qApp->processEvents(); 1090 qApp->processEvents();
1091} 1091}
1092 1092
1093bool KSyncManager::isProgressBarCanceled() 1093bool KSyncManager::isProgressBarCanceled()
1094{ 1094{
1095 return !bar->isVisible(); 1095 return !bar->isVisible();
1096} 1096}
1097 1097
1098QString KSyncManager::syncFileName() 1098QString KSyncManager::syncFileName()
1099{ 1099{
1100 1100
1101 QString fn = "tempfile"; 1101 QString fn = "tempfile";
1102 switch(mTargetApp) 1102 switch(mTargetApp)
1103 { 1103 {
1104 case (KAPI): 1104 case (KAPI):
1105 fn = "tempsyncab.vcf"; 1105 fn = "tempsyncab.vcf";
1106 break; 1106 break;
1107 case (KOPI): 1107 case (KOPI):
1108 fn = "tempsynccal.ics"; 1108 fn = "tempsynccal.ics";
1109 break; 1109 break;
1110 case (PWMPI): 1110 case (PWMPI):
1111 fn = "tempsyncpw.pwm"; 1111 fn = "tempsyncpw.pwm";
1112 break; 1112 break;
1113 default: 1113 default:
1114 break; 1114 break;
1115 } 1115 }
1116#ifdef DESKTOP_VERSION 1116#ifdef DESKTOP_VERSION
1117 return locateLocal( "tmp", fn ); 1117 return locateLocal( "tmp", fn );
1118#else 1118#else
1119 return (QString( "/tmp/" )+ fn ); 1119 return (QString( "/tmp/" )+ fn );
1120#endif 1120#endif
1121} 1121}
1122 1122
1123void KSyncManager::syncPi() 1123void KSyncManager::syncPi()
1124{ 1124{
1125 mIsKapiFile = true; 1125 mIsKapiFile = true;
1126 mPisyncFinished = false; 1126 mPisyncFinished = false;
1127 qApp->processEvents(); 1127 qApp->processEvents();
1128 if ( mAskForPreferences ) 1128 if ( mAskForPreferences )
1129 if ( !edit_pisync_options()) { 1129 if ( !edit_pisync_options()) {
1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1131 mPisyncFinished = true; 1131 mPisyncFinished = true;
1132 return; 1132 return;
1133 } 1133 }
1134 bool ok; 1134 bool ok;
1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1136 if ( ! ok ) { 1136 if ( ! ok ) {
1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1138 mPisyncFinished = true; 1138 mPisyncFinished = true;
1139 return; 1139 return;
1140 } 1140 }
1141 mCurrentResourceLocal = ""; 1141 mCurrentResourceLocal = "";
1142 mCurrentResourceRemote = ""; 1142 mCurrentResourceRemote = "";
1143 if ( mSpecificResources.count() ) { 1143 if ( mSpecificResources.count() ) {
1144 int lastSyncRes = mSpecificResources.count()/2; 1144 int lastSyncRes = mSpecificResources.count()/2;
1145 int ccc = mSpecificResources.count()-1; 1145 int ccc = mSpecificResources.count()-1;
1146 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) { 1146 while ( lastSyncRes > 0 && ccc > 0 && mSpecificResources[ ccc ].isEmpty() ) {
1147 --ccc; 1147 --ccc;
1148 --lastSyncRes; 1148 --lastSyncRes;
1149 //qDebug ( "KSM: sync pi %d",ccc ); 1149 //qDebug ( "KSM: sync pi %d",ccc );
1150 } 1150 }
1151 int startLocal = 0; 1151 int startLocal = 0;
1152 int startRemote = mSpecificResources.count()/2; 1152 int startRemote = mSpecificResources.count()/2;
1153 emit multiResourceSyncStart( true ); 1153 emit multiResourceSyncStart( true );
1154 while ( startLocal < mSpecificResources.count()/2 ) { 1154 while ( startLocal < mSpecificResources.count()/2 ) {
1155 if ( startLocal+1 >= lastSyncRes ) 1155 if ( startLocal+1 >= lastSyncRes )
1156 emit multiResourceSyncStart( false ); 1156 emit multiResourceSyncStart( false );
1157 mPisyncFinished = false; 1157 mPisyncFinished = false;
1158 mCurrentResourceLocal = mSpecificResources[ startLocal ]; 1158 mCurrentResourceLocal = mSpecificResources[ startLocal ];
1159 mCurrentResourceRemote = mSpecificResources[ startRemote ]; 1159 mCurrentResourceRemote = mSpecificResources[ startRemote ];
1160 //qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1160 //qDebug ( "KSM: AAASyncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1161 if ( !mCurrentResourceRemote.isEmpty() ) { 1161 if ( !mCurrentResourceRemote.isEmpty() ) {
1162 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() ); 1162 qDebug ( "KSM: Syncing resources: Local: %s --- Remote: %s ",mCurrentResourceLocal.latin1(), mCurrentResourceRemote.latin1() );
1163 1163
1164 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1164 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1165 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1165 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1166 commandSocket->readFile( syncFileName() ); 1166 commandSocket->readFile( syncFileName() );
1167 mParent->topLevelWidget()->setCaption( i18n("Syncing %1 <-> %2").arg( mCurrentResourceLocal ).arg( mCurrentResourceRemote ) ); 1167 mParent->topLevelWidget()->setCaption( i18n("Syncing %1 <-> %2").arg( mCurrentResourceLocal ).arg( mCurrentResourceRemote ) );
1168 while ( !mPisyncFinished ) { 1168 while ( !mPisyncFinished ) {
1169 //qDebug("waiting "); 1169 //qDebug("waiting ");
1170 qApp->processEvents(); 1170 qApp->processEvents();
1171 } 1171 }
1172 if ( startLocal+1 < mSpecificResources.count()/2 ) { 1172 if ( startLocal+1 < mSpecificResources.count()/2 ) {
1173 mParent->topLevelWidget()->setCaption( i18n("Waiting 2 secs before syncing next resource...") ); 1173 mParent->topLevelWidget()->setCaption( i18n("Waiting 2 secs before syncing next resource...") );
1174 QTime timer; 1174 QTime timer;
1175 timer.start(); 1175 timer.start();
1176 while ( timer.elapsed () < 2000 ) { 1176 while ( timer.elapsed () < 2000 ) {
1177 qApp->processEvents(); 1177 qApp->processEvents();
1178 } 1178 }
1179 } 1179 }
1180 } 1180 }
1181 ++startRemote; 1181 ++startRemote;
1182 ++startLocal; 1182 ++startLocal;
1183 1183 mAskForPreferences = false;
1184 } 1184 }
1185 mPisyncFinished = true; 1185 mPisyncFinished = true;
1186 } else { 1186 } else {
1187 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1187 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1188 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1188 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1189 commandSocket->readFile( syncFileName() ); 1189 commandSocket->readFile( syncFileName() );
1190 } 1190 }
1191} 1191}
1192 1192
1193void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1193void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1194{ 1194{
1195 //enum { success, errorW, errorR, quiet }; 1195 //enum { success, errorW, errorR, quiet };
1196 1196
1197 1197
1198 1198
1199 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1199 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1200 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1200 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1201 if ( state == KCommandSocket::errorPW ) 1201 if ( state == KCommandSocket::errorPW )
1202 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1202 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1203 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1203 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1204 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1204 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1205 else if ( state == KCommandSocket::errorCA ) 1205 else if ( state == KCommandSocket::errorCA )
1206 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1206 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1207 else if ( state == KCommandSocket::errorFI ) 1207 else if ( state == KCommandSocket::errorFI )
1208 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1208 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1209 else if ( state == KCommandSocket::errorED ) 1209 else if ( state == KCommandSocket::errorED )
1210 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1210 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1211 else if ( state == KCommandSocket::errorUN ) 1211 else if ( state == KCommandSocket::errorUN )
1212 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1212 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1213 delete s; 1213 delete s;
1214 if ( state == KCommandSocket::errorR ) { 1214 if ( state == KCommandSocket::errorR ) {
1215 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1215 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1216 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1216 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1217 commandSocket->sendStop(); 1217 commandSocket->sendStop();
1218 } 1218 }
1219 mPisyncFinished = true; 1219 mPisyncFinished = true;
1220 return; 1220 return;
1221 1221
1222 } else if ( state == KCommandSocket::errorW ) { 1222 } else if ( state == KCommandSocket::errorW ) {
1223 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1223 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1224 mPisyncFinished = true; 1224 mPisyncFinished = true;
1225 1225
1226 } else if ( state == KCommandSocket::successR ) { 1226 } else if ( state == KCommandSocket::successR ) {
1227 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1227 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1228 1228
1229 } else if ( state == KCommandSocket::successW ) { 1229 } else if ( state == KCommandSocket::successW ) {
1230 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1230 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1231 mPisyncFinished = true; 1231 mPisyncFinished = true;
1232 } else if ( state == KCommandSocket::quiet ){ 1232 } else if ( state == KCommandSocket::quiet ){
1233 qDebug("KSS: quiet "); 1233 qDebug("KSS: quiet ");
1234 mPisyncFinished = true; 1234 mPisyncFinished = true;
1235 } else { 1235 } else {
1236 qDebug("KSS: Error: unknown state: %d ", state); 1236 qDebug("KSS: Error: unknown state: %d ", state);
1237 mPisyncFinished = true; 1237 mPisyncFinished = true;
1238 } 1238 }
1239 1239
1240 delete s; 1240 delete s;
1241} 1241}
1242 1242
1243void KSyncManager::readFileFromSocket() 1243void KSyncManager::readFileFromSocket()
1244{ 1244{
1245 QString fileName = syncFileName(); 1245 QString fileName = syncFileName();
1246 bool syncOK = true; 1246 bool syncOK = true;
1247 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1247 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1248 if ( ! syncWithFile( fileName , true ) ) { 1248 if ( ! syncWithFile( fileName , true ) ) {
1249 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1249 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1250 syncOK = false; 1250 syncOK = false;
1251 } 1251 }
1252 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1252 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1253 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1253 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1254 if ( mWriteBackFile && syncOK ) { 1254 if ( mWriteBackFile && syncOK ) {
1255 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); 1255 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1256 commandSocket->writeFile( fileName ); 1256 commandSocket->writeFile( fileName );
1257 } 1257 }
1258 else { 1258 else {
1259 commandSocket->sendStop(); 1259 commandSocket->sendStop();
1260 if ( syncOK ) 1260 if ( syncOK )
1261 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1261 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1262 mPisyncFinished = true; 1262 mPisyncFinished = true;
1263 } 1263 }
1264} 1264}
1265 1265
1266KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1266KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1267{ 1267{
1268 mPendingConnect = 0; 1268 mPendingConnect = 0;
1269 mPassWord = pw; 1269 mPassWord = pw;
1270 mSocket = 0; 1270 mSocket = 0;
1271 mSyncActionDialog = 0; 1271 mSyncActionDialog = 0;
1272 blockRC = false; 1272 blockRC = false;
1273 mErrorMessage = 0; 1273 mErrorMessage = 0;
1274} 1274}
1275void KServerSocket::waitForSocketFinish() 1275void KServerSocket::waitForSocketFinish()
1276{ 1276{
1277 if ( mSocket ) { 1277 if ( mSocket ) {
1278 //qDebug("KSS:: waiting for finish operation"); 1278 //qDebug("KSS:: waiting for finish operation");
1279 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish())); 1279 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish()));
1280 return; 1280 return;
1281 } 1281 }
1282 mSocket = new QSocket( this ); 1282 mSocket = new QSocket( this );
1283 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1283 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1284 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1284 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1285 mSocket->setSocket( mPendingConnect ); 1285 mSocket->setSocket( mPendingConnect );
1286 mPendingConnect = 0; 1286 mPendingConnect = 0;
1287} 1287}
1288void KServerSocket::newConnection ( int socket ) 1288void KServerSocket::newConnection ( int socket )
1289{ 1289{
1290 // qDebug("KServerSocket:New connection %d ", socket); 1290 // qDebug("KServerSocket:New connection %d ", socket);
1291 if ( mPendingConnect ) { 1291 if ( mPendingConnect ) {
1292 qDebug("KSS::Error : new Connection"); 1292 qDebug("KSS::Error : new Connection");
1293 return; 1293 return;
1294 } 1294 }
1295 if ( mSocket ) { 1295 if ( mSocket ) {
1296 mPendingConnect = socket; 1296 mPendingConnect = socket;
1297 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish())); 1297 QTimer::singleShot( 250, this , SLOT ( waitForSocketFinish()));
1298 return; 1298 return;
1299 qDebug("KSS::newConnection Socket deleted! "); 1299 qDebug("KSS::newConnection Socket deleted! ");
1300 delete mSocket; 1300 delete mSocket;
1301 mSocket = 0; 1301 mSocket = 0;
1302 } 1302 }
1303 mPendingConnect = 0; 1303 mPendingConnect = 0;
1304 mSocket = new QSocket( this ); 1304 mSocket = new QSocket( this );
1305 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1305 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1306 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1306 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1307 mSocket->setSocket( socket ); 1307 mSocket->setSocket( socket );
1308} 1308}
1309 1309
1310void KServerSocket::discardClient() 1310void KServerSocket::discardClient()
1311{ 1311{
1312 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1312 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1313} 1313}
1314void KServerSocket::deleteSocket() 1314void KServerSocket::deleteSocket()
1315{ 1315{
1316 qDebug("KSS::deleteSocket"); 1316 qDebug("KSS::deleteSocket");
1317 if ( mSocket ) { 1317 if ( mSocket ) {
1318 delete mSocket; 1318 delete mSocket;
1319 mSocket = 0; 1319 mSocket = 0;
1320 } 1320 }
1321 if ( mErrorMessage ) 1321 if ( mErrorMessage )
1322 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1322 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1323} 1323}
1324void KServerSocket::readClient() 1324void KServerSocket::readClient()
1325{ 1325{
1326 if ( blockRC ) 1326 if ( blockRC )
1327 return; 1327 return;
1328 if ( mSocket == 0 ) { 1328 if ( mSocket == 0 ) {
1329 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1329 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1330 return; 1330 return;
1331 } 1331 }
1332 if ( mErrorMessage ) { 1332 if ( mErrorMessage ) {
1333 mErrorMessage = 999; 1333 mErrorMessage = 999;
1334 error_connect("ERROR_ED\r\n\r\n"); 1334 error_connect("ERROR_ED\r\n\r\n");
1335 return; 1335 return;
1336 } 1336 }
1337 mResource = ""; 1337 mResource = "";
1338 mErrorMessage = 0; 1338 mErrorMessage = 0;
1339 //qDebug("KServerSocket::readClient()"); 1339 //qDebug("KServerSocket::readClient()");
1340 if ( mSocket->canReadLine() ) { 1340 if ( mSocket->canReadLine() ) {
1341 QString line = mSocket->readLine(); 1341 QString line = mSocket->readLine();
1342 //qDebug("KServerSocket readline: %s ", line.latin1()); 1342 //qDebug("KServerSocket readline: %s ", line.latin1());
1343 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1343 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1344 if ( tokens[0] == "GET" ) { 1344 if ( tokens[0] == "GET" ) {
1345 if ( tokens[1] == mPassWord ) { 1345 if ( tokens[1] == mPassWord ) {
1346 //emit sendFile( mSocket ); 1346 //emit sendFile( mSocket );
1347 bool ok = false; 1347 bool ok = false;
1348 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1348 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1349 if ( ok ) { 1349 if ( ok ) {
1350 KSyncManager::mRequestedSyncEvent = dt; 1350 KSyncManager::mRequestedSyncEvent = dt;
1351 } 1351 }
1352 else 1352 else
1353 KSyncManager::mRequestedSyncEvent = QDateTime(); 1353 KSyncManager::mRequestedSyncEvent = QDateTime();
1354 mResource =tokens[3]; 1354 mResource =tokens[3];
1355 send_file(); 1355 send_file();
1356 } 1356 }
1357 else { 1357 else {
1358 mErrorMessage = 1; 1358 mErrorMessage = 1;
1359 error_connect("ERROR_PW\r\n\r\n"); 1359 error_connect("ERROR_PW\r\n\r\n");
1360 } 1360 }
1361 } 1361 }
1362 if ( tokens[0] == "PUT" ) { 1362 if ( tokens[0] == "PUT" ) {
1363 if ( tokens[1] == mPassWord ) { 1363 if ( tokens[1] == mPassWord ) {
1364 //emit getFile( mSocket ); 1364 //emit getFile( mSocket );
1365 blockRC = true; 1365 blockRC = true;
1366 mResource =tokens[2]; 1366 mResource =tokens[2];
1367 get_file(); 1367 get_file();
1368 } 1368 }
1369 else { 1369 else {
1370 mErrorMessage = 2; 1370 mErrorMessage = 2;
1371 error_connect("ERROR_PW\r\n\r\n"); 1371 error_connect("ERROR_PW\r\n\r\n");
1372 end_connect(); 1372 end_connect();
1373 } 1373 }
1374 } 1374 }
1375 if ( tokens[0] == "STOP" ) { 1375 if ( tokens[0] == "STOP" ) {
1376 //emit endConnect(); 1376 //emit endConnect();
1377 end_connect(); 1377 end_connect();
1378 } 1378 }
1379 } 1379 }
1380} 1380}
1381void KServerSocket::displayErrorMessage() 1381void KServerSocket::displayErrorMessage()
1382{ 1382{
1383 if ( mErrorMessage == 1 ) { 1383 if ( mErrorMessage == 1 ) {
1384 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error")); 1384 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1385 mErrorMessage = 0; 1385 mErrorMessage = 0;
1386 } 1386 }
1387 else if ( mErrorMessage == 2 ) { 1387 else if ( mErrorMessage == 2 ) {
1388 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error")); 1388 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1389 mErrorMessage = 0; 1389 mErrorMessage = 0;
1390 } 1390 }
1391} 1391}
1392void KServerSocket::error_connect( QString errmess ) 1392void KServerSocket::error_connect( QString errmess )
1393{ 1393{
1394 QTextStream os( mSocket ); 1394 QTextStream os( mSocket );
1395 os.setEncoding( QTextStream::Latin1 ); 1395 os.setEncoding( QTextStream::Latin1 );
1396 os << errmess ; 1396 os << errmess ;
1397 mSocket->close(); 1397 mSocket->close();
1398 if ( mSocket->state() == QSocket::Idle ) { 1398 if ( mSocket->state() == QSocket::Idle ) {
1399 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1399 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1400 } 1400 }
1401} 1401}
1402void KServerSocket::end_connect() 1402void KServerSocket::end_connect()
1403{ 1403{
1404 delete mSyncActionDialog; 1404 delete mSyncActionDialog;
1405 mSyncActionDialog = 0; 1405 mSyncActionDialog = 0;
1406} 1406}
1407void KServerSocket::send_file() 1407void KServerSocket::send_file()
1408{ 1408{
1409 //qDebug("MainWindow::sendFile(QSocket* s) "); 1409 //qDebug("MainWindow::sendFile(QSocket* s) ");
1410 if ( mSyncActionDialog ) 1410 if ( mSyncActionDialog )
1411 delete mSyncActionDialog; 1411 delete mSyncActionDialog;
1412 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1412 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1413 mSyncActionDialog->setCaption(i18n("Received sync request")); 1413 mSyncActionDialog->setCaption(i18n("Received sync request"));
1414 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1414 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1415 label->setAlignment ( Qt::AlignHCenter ); 1415 label->setAlignment ( Qt::AlignHCenter );
1416 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1416 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1417 lay->addWidget( label); 1417 lay->addWidget( label);
1418 lay->setMargin(7); 1418 lay->setMargin(7);
1419 lay->setSpacing(7); 1419 lay->setSpacing(7);
1420 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1420 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1421 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1421 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1422 //secs = 333; 1422 //secs = 333;
1423 if ( secs < 0 ) 1423 if ( secs < 0 )
1424 secs = secs * (-1); 1424 secs = secs * (-1);
1425 if ( secs > 30 ) 1425 if ( secs > 30 )
1426 //if ( true ) 1426 //if ( true )
1427 { 1427 {
1428 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1428 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1429 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1429 QLabel* label = new QLabel( warning, mSyncActionDialog );
1430 label->setAlignment ( Qt::AlignHCenter ); 1430 label->setAlignment ( Qt::AlignHCenter );
1431 lay->addWidget( label); 1431 lay->addWidget( label);
1432 if ( secs > 180 ) 1432 if ( secs > 180 )
1433 { 1433 {
1434 if ( secs > 300 ) { 1434 if ( secs > 300 ) {
1435 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) { 1435 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) {
1436 qDebug("KSS::Sync cancelled ,cs"); 1436 qDebug("KSS::Sync cancelled ,cs");
1437 mErrorMessage = 0; 1437 mErrorMessage = 0;
1438 end_connect(); 1438 end_connect();
1439 error_connect("ERROR_CA\r\n\r\n"); 1439 error_connect("ERROR_CA\r\n\r\n");
1440 return ; 1440 return ;
1441 } 1441 }
1442 } 1442 }
1443 QFont f = label->font(); 1443 QFont f = label->font();
1444 f.setPointSize ( f.pointSize() *2 ); 1444 f.setPointSize ( f.pointSize() *2 );
1445 f. setBold (true ); 1445 f. setBold (true );
1446 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1446 QLabel* label = new QLabel( warning, mSyncActionDialog );
1447 label->setFont( f ); 1447 label->setFont( f );
1448 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1448 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1449 label->setText( warning ); 1449 label->setText( warning );
1450 label->setAlignment ( Qt::AlignHCenter ); 1450 label->setAlignment ( Qt::AlignHCenter );
1451 lay->addWidget( label); 1451 lay->addWidget( label);
1452 mSyncActionDialog->setFixedSize( 230, 300); 1452 mSyncActionDialog->setFixedSize( 230, 300);
1453 } else { 1453 } else {
1454 mSyncActionDialog->setFixedSize( 230, 200); 1454 mSyncActionDialog->setFixedSize( 230, 200);
1455 } 1455 }
1456 } else { 1456 } else {
1457 mSyncActionDialog->setFixedSize( 230, 120); 1457 mSyncActionDialog->setFixedSize( 230, 120);
1458 } 1458 }
1459 } else 1459 } else
1460 mSyncActionDialog->setFixedSize( 230, 120); 1460 mSyncActionDialog->setFixedSize( 230, 120);
1461 mSyncActionDialog->show(); 1461 mSyncActionDialog->show();
1462 mSyncActionDialog->raise(); 1462 mSyncActionDialog->raise();
1463 emit request_file(mResource); 1463 emit request_file(mResource);
1464 emit request_file(); 1464 emit request_file();
1465 qApp->processEvents(); 1465 qApp->processEvents();
1466 QString fileName = mFileName; 1466 QString fileName = mFileName;
1467 QFile file( fileName ); 1467 QFile file( fileName );
1468 if (!file.open( IO_ReadOnly ) ) { 1468 if (!file.open( IO_ReadOnly ) ) {
1469 mErrorMessage = 0; 1469 mErrorMessage = 0;
1470 end_connect(); 1470 end_connect();
1471 error_connect("ERROR_FI\r\n\r\n"); 1471 error_connect("ERROR_FI\r\n\r\n");
1472 return ; 1472 return ;
1473 } 1473 }
1474 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1474 mSyncActionDialog->setCaption( i18n("Sending file...") );
1475 QTextStream ts( &file ); 1475 QTextStream ts( &file );
1476 ts.setEncoding( QTextStream::Latin1 ); 1476 ts.setEncoding( QTextStream::Latin1 );
1477 1477
1478 QTextStream os( mSocket ); 1478 QTextStream os( mSocket );
1479 os.setEncoding( QTextStream::Latin1 ); 1479 os.setEncoding( QTextStream::Latin1 );
1480 while ( ! ts.atEnd() ) { 1480 while ( ! ts.atEnd() ) {
1481 os << ts.readLine() << "\r\n"; 1481 os << ts.readLine() << "\r\n";
1482 } 1482 }
1483 os << "\r\n"; 1483 os << "\r\n";
1484 //os << ts.read(); 1484 //os << ts.read();
1485 file.close(); 1485 file.close();
1486 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1486 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1487 mSocket->close(); 1487 mSocket->close();
1488 if ( mSocket->state() == QSocket::Idle ) 1488 if ( mSocket->state() == QSocket::Idle )
1489 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1489 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1490} 1490}
1491void KServerSocket::get_file() 1491void KServerSocket::get_file()
1492{ 1492{
1493 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1493 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1494 1494
1495 piTime.start(); 1495 piTime.start();
1496 piFileString = ""; 1496 piFileString = "";
1497 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1497 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1498} 1498}
1499 1499
1500 1500
1501void KServerSocket::readBackFileFromSocket() 1501void KServerSocket::readBackFileFromSocket()
1502{ 1502{
1503 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1503 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1504 while ( mSocket->canReadLine () ) { 1504 while ( mSocket->canReadLine () ) {
1505 piTime.restart(); 1505 piTime.restart();
1506 QString line = mSocket->readLine (); 1506 QString line = mSocket->readLine ();
1507 piFileString += line; 1507 piFileString += line;
1508 //qDebug("readline: %s ", line.latin1()); 1508 //qDebug("readline: %s ", line.latin1());
1509 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1509 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1510 1510
1511 } 1511 }
1512 if ( piTime.elapsed () < 3000 ) { 1512 if ( piTime.elapsed () < 3000 ) {
1513 // wait for more 1513 // wait for more
1514 //qDebug("waitformore "); 1514 //qDebug("waitformore ");
1515 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1515 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1516 return; 1516 return;
1517 } 1517 }
1518 QString fileName = mFileName; 1518 QString fileName = mFileName;
1519 QFile file ( fileName ); 1519 QFile file ( fileName );
1520 if (!file.open( IO_WriteOnly ) ) { 1520 if (!file.open( IO_WriteOnly ) ) {
1521 delete mSyncActionDialog; 1521 delete mSyncActionDialog;
1522 mSyncActionDialog = 0; 1522 mSyncActionDialog = 0;
1523 qDebug("KSS:Error open read back file "); 1523 qDebug("KSS:Error open read back file ");
1524 piFileString = ""; 1524 piFileString = "";
1525 emit file_received( false, mResource); 1525 emit file_received( false, mResource);
1526 emit file_received( false); 1526 emit file_received( false);
1527 blockRC = false; 1527 blockRC = false;
1528 return ; 1528 return ;
1529 1529
1530 } 1530 }
1531 1531
1532 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1532 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1533 QTextStream ts ( &file ); 1533 QTextStream ts ( &file );
1534 ts.setEncoding( QTextStream::Latin1 ); 1534 ts.setEncoding( QTextStream::Latin1 );
1535 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1535 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1536 ts << piFileString; 1536 ts << piFileString;
1537 mSocket->close(); 1537 mSocket->close();
1538 if ( mSocket->state() == QSocket::Idle ) 1538 if ( mSocket->state() == QSocket::Idle )
1539 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1539 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1540 file.close(); 1540 file.close();
1541 piFileString = ""; 1541 piFileString = "";
1542 emit file_received( true, mResource ); 1542 emit file_received( true, mResource );
1543 emit file_received( true); 1543 emit file_received( true);
1544 delete mSyncActionDialog; 1544 delete mSyncActionDialog;
1545 mSyncActionDialog = 0; 1545 mSyncActionDialog = 0;
1546 blockRC = false; 1546 blockRC = false;
1547 1547
1548} 1548}
1549 1549
1550KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1550KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1551{ 1551{
1552 mRemoteResource = remres; 1552 mRemoteResource = remres;
1553 if ( mRemoteResource.isEmpty() ) 1553 if ( mRemoteResource.isEmpty() )
1554 mRemoteResource = "ALL"; 1554 mRemoteResource = "ALL";
1555 else 1555 else
1556 mRemoteResource.replace (QRegExp (" "),"_" ); 1556 mRemoteResource.replace (QRegExp (" "),"_" );
1557 mPassWord = password; 1557 mPassWord = password;
1558 mSocket = 0; 1558 mSocket = 0;
1559 mFirst = false; 1559 mFirst = false;
1560 mFirstLine = true; 1560 mFirstLine = true;
1561 mPort = port; 1561 mPort = port;
1562 mHost = host; 1562 mHost = host;
1563 tlw = cap; 1563 tlw = cap;
1564 mRetVal = quiet; 1564 mRetVal = quiet;
1565 mTimerSocket = new QTimer ( this ); 1565 mTimerSocket = new QTimer ( this );
1566 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) ); 1566 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1567 mConnectProgress.setCaption( i18n("Pi-Sync") ); 1567 mConnectProgress.setCaption( i18n("Pi-Sync") );
1568 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) ); 1568 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1569 mConnectCount = -1; 1569 mConnectCount = -1;
1570} 1570}
1571void KCommandSocket::sendFileRequest() 1571void KCommandSocket::sendFileRequest()
1572{ 1572{
1573 if ( tlw ) 1573 if ( tlw )
1574 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1574 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1575 mConnectProgress.hide(); 1575 mConnectProgress.hide();
1576 mConnectCount = 300;mConnectMax = 300; 1576 mConnectCount = 300;mConnectMax = 300;
1577 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") ); 1577 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1578 mConnectProgress.setLabelText( i18n("Waiting for remote file...") ); 1578 mConnectProgress.setLabelText( i18n("Waiting for remote file...") );
1579 mTimerSocket->start( 100, true ); 1579 mTimerSocket->start( 100, true );
1580 QTextStream os( mSocket ); 1580 QTextStream os( mSocket );
1581 os.setEncoding( QTextStream::Latin1 ); 1581 os.setEncoding( QTextStream::Latin1 );
1582 1582
1583 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1583 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1584 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n"; 1584 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n";
1585} 1585}
1586 1586
1587void KCommandSocket::readFile( QString fn ) 1587void KCommandSocket::readFile( QString fn )
1588{ 1588{
1589 if ( !mSocket ) { 1589 if ( !mSocket ) {
1590 mSocket = new QSocket( this ); 1590 mSocket = new QSocket( this );
1591 //qDebug("KCS: read file - new socket"); 1591 //qDebug("KCS: read file - new socket");
1592 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1592 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1593 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1593 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1594 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1594 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1595 } 1595 }
1596 mFileString = ""; 1596 mFileString = "";
1597 mFileName = fn; 1597 mFileName = fn;
1598 mFirst = true; 1598 mFirst = true;
1599 if ( tlw ) 1599 if ( tlw )
1600 tlw->setCaption( i18n("Trying to connect to remote...") ); 1600 tlw->setCaption( i18n("Trying to connect to remote...") );
1601 mConnectCount = 30;mConnectMax = 30; 1601 mConnectCount = 30;mConnectMax = 30;
1602 mTimerSocket->start( 1000, true ); 1602 mTimerSocket->start( 1000, true );
1603 mSocket->connectToHost( mHost, mPort ); 1603 mSocket->connectToHost( mHost, mPort );
1604 qDebug("KCS: Waiting for connection"); 1604 qDebug("KCS: Waiting for connection");
1605} 1605}
1606void KCommandSocket::updateConnectDialog() 1606void KCommandSocket::updateConnectDialog()
1607{ 1607{
1608 1608
1609 if ( mConnectCount == mConnectMax ) { 1609 if ( mConnectCount == mConnectMax ) {
1610 //qDebug("MAXX %d", mConnectMax); 1610 //qDebug("MAXX %d", mConnectMax);
1611 mConnectProgress.setTotalSteps ( 30 ); 1611 mConnectProgress.setTotalSteps ( 30 );
1612 mConnectProgress.show(); 1612 mConnectProgress.show();
1613 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") ); 1613 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1614 } 1614 }
1615 //qDebug("updateConnectDialog() %d", mConnectCount); 1615 //qDebug("updateConnectDialog() %d", mConnectCount);
1616 mConnectProgress.raise(); 1616 mConnectProgress.raise();
1617 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 ); 1617 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1618 --mConnectCount; 1618 --mConnectCount;
1619 if ( mConnectCount > 0 ) 1619 if ( mConnectCount > 0 )
1620 mTimerSocket->start( 1000, true ); 1620 mTimerSocket->start( 1000, true );
1621 else 1621 else
1622 deleteSocket(); 1622 deleteSocket();
1623 1623
1624} 1624}
1625void KCommandSocket::writeFile( QString fileName ) 1625void KCommandSocket::writeFile( QString fileName )
1626{ 1626{
1627 if ( !mSocket ) { 1627 if ( !mSocket ) {
1628 mSocket = new QSocket( this ); 1628 mSocket = new QSocket( this );
1629 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1629 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1630 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1630 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1631 } 1631 }
1632 mFileName = fileName ; 1632 mFileName = fileName ;
1633 mConnectCount = 30;mConnectMax = 30; 1633 mConnectCount = 30;mConnectMax = 30;
1634 mTimerSocket->start( 1000, true ); 1634 mTimerSocket->start( 1000, true );
1635 mSocket->connectToHost( mHost, mPort ); 1635 mSocket->connectToHost( mHost, mPort );
1636} 1636}
1637void KCommandSocket::writeFileToSocket() 1637void KCommandSocket::writeFileToSocket()
1638{ 1638{
1639 mTimerSocket->stop(); 1639 mTimerSocket->stop();
1640 QFile file2( mFileName ); 1640 QFile file2( mFileName );
1641 if (!file2.open( IO_ReadOnly ) ) { 1641 if (!file2.open( IO_ReadOnly ) ) {
1642 mConnectProgress.hide(); 1642 mConnectProgress.hide();
1643 mConnectCount = -1; 1643 mConnectCount = -1;
1644 mRetVal= errorW; 1644 mRetVal= errorW;
1645 mSocket->close(); 1645 mSocket->close();
1646 if ( mSocket->state() == QSocket::Idle ) 1646 if ( mSocket->state() == QSocket::Idle )
1647 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1647 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1648 return ; 1648 return ;
1649 } 1649 }
1650 mConnectProgress.setTotalSteps ( file2.size() ); 1650 mConnectProgress.setTotalSteps ( file2.size() );
1651 mConnectProgress.show(); 1651 mConnectProgress.show();
1652 int count = 0; 1652 int count = 0;
1653 mConnectProgress.setLabelText( i18n("Sending back synced file...") ); 1653 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1654 mConnectProgress.setProgress( count ); 1654 mConnectProgress.setProgress( count );
1655 mConnectProgress.blockSignals( true ); 1655 mConnectProgress.blockSignals( true );
1656 QTextStream ts2( &file2 ); 1656 QTextStream ts2( &file2 );
1657 ts2.setEncoding( QTextStream::Latin1 ); 1657 ts2.setEncoding( QTextStream::Latin1 );
1658 QTextStream os2( mSocket ); 1658 QTextStream os2( mSocket );
1659 os2.setEncoding( QTextStream::Latin1 ); 1659 os2.setEncoding( QTextStream::Latin1 );
1660 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";; 1660 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";;
1661 int byteCount = 0; 1661 int byteCount = 0;
1662 int byteMax = file2.size()/53; 1662 int byteMax = file2.size()/53;
1663 while ( ! ts2.atEnd() ) { 1663 while ( ! ts2.atEnd() ) {
1664 qApp->processEvents(); 1664 qApp->processEvents();
1665 if ( byteCount > byteMax ) { 1665 if ( byteCount > byteMax ) {
1666 byteCount = 0; 1666 byteCount = 0;
1667 mConnectProgress.setProgress( count ); 1667 mConnectProgress.setProgress( count );
1668 } 1668 }
1669 QString temp = ts2.readLine(); 1669 QString temp = ts2.readLine();
1670 count += temp.length(); 1670 count += temp.length();
1671 byteCount += temp.length(); 1671 byteCount += temp.length();
1672 os2 << temp << "\r\n"; 1672 os2 << temp << "\r\n";
1673 } 1673 }
1674 file2.close(); 1674 file2.close();
1675 mConnectProgress.hide(); 1675 mConnectProgress.hide();
1676 mConnectCount = -1; 1676 mConnectCount = -1;
1677 os2 << "\r\n"; 1677 os2 << "\r\n";
1678 mRetVal= successW; 1678 mRetVal= successW;
1679 mSocket->close(); 1679 mSocket->close();
1680 if ( mSocket->state() == QSocket::Idle ) 1680 if ( mSocket->state() == QSocket::Idle )
1681 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1681 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1682 mConnectProgress.blockSignals( false ); 1682 mConnectProgress.blockSignals( false );
1683} 1683}
1684void KCommandSocket::sendStop() 1684void KCommandSocket::sendStop()
1685{ 1685{
1686 if ( !mSocket ) { 1686 if ( !mSocket ) {
1687 mSocket = new QSocket( this ); 1687 mSocket = new QSocket( this );
1688 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1688 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1689 } 1689 }
1690 mSocket->connectToHost( mHost, mPort ); 1690 mSocket->connectToHost( mHost, mPort );
1691 QTextStream os2( mSocket ); 1691 QTextStream os2( mSocket );
1692 os2.setEncoding( QTextStream::Latin1 ); 1692 os2.setEncoding( QTextStream::Latin1 );
1693 os2 << "STOP\r\n\r\n"; 1693 os2 << "STOP\r\n\r\n";
1694 mSocket->close(); 1694 mSocket->close();
1695 if ( mSocket->state() == QSocket::Idle ) 1695 if ( mSocket->state() == QSocket::Idle )
1696 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1696 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1697} 1697}
1698 1698
1699void KCommandSocket::startReadFileFromSocket() 1699void KCommandSocket::startReadFileFromSocket()
1700{ 1700{
1701 if ( ! mFirst ) 1701 if ( ! mFirst )
1702 return; 1702 return;
1703 mConnectProgress.setLabelText( i18n("Receiving file from remote...") ); 1703 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1704 mFirst = false; 1704 mFirst = false;
1705 mFileString = ""; 1705 mFileString = "";
1706 mTime.start(); 1706 mTime.start();
1707 mFirstLine = true; 1707 mFirstLine = true;
1708 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1708 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1709 1709
1710} 1710}
1711void KCommandSocket::readFileFromSocket() 1711void KCommandSocket::readFileFromSocket()
1712{ 1712{
1713 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1713 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1714 while ( mSocket->canReadLine () ) { 1714 while ( mSocket->canReadLine () ) {
1715 mTime.restart(); 1715 mTime.restart();
1716 QString line = mSocket->readLine (); 1716 QString line = mSocket->readLine ();
1717 if ( mFirstLine ) { 1717 if ( mFirstLine ) {
1718 mFirstLine = false; 1718 mFirstLine = false;
1719 if ( line.left( 6 ) == "ERROR_" ) { 1719 if ( line.left( 6 ) == "ERROR_" ) {
1720 mTimerSocket->stop(); 1720 mTimerSocket->stop();
1721 mConnectCount = -1; 1721 mConnectCount = -1;
1722 if ( line.left( 8 ) == "ERROR_PW" ) { 1722 if ( line.left( 8 ) == "ERROR_PW" ) {
1723 mRetVal = errorPW; 1723 mRetVal = errorPW;
1724 deleteSocket(); 1724 deleteSocket();
1725 return ; 1725 return ;
1726 } 1726 }
1727 if ( line.left( 8 ) == "ERROR_CA" ) { 1727 if ( line.left( 8 ) == "ERROR_CA" ) {
1728 mRetVal = errorCA; 1728 mRetVal = errorCA;
1729 deleteSocket(); 1729 deleteSocket();
1730 return ; 1730 return ;
1731 } 1731 }
1732 if ( line.left( 8 ) == "ERROR_FI" ) { 1732 if ( line.left( 8 ) == "ERROR_FI" ) {
1733 mRetVal = errorFI; 1733 mRetVal = errorFI;
1734 deleteSocket(); 1734 deleteSocket();
1735 return ; 1735 return ;
1736 } 1736 }
1737 if ( line.left( 8 ) == "ERROR_ED" ) { 1737 if ( line.left( 8 ) == "ERROR_ED" ) {
1738 mRetVal = errorED; 1738 mRetVal = errorED;
1739 deleteSocket(); 1739 deleteSocket();
1740 return ; 1740 return ;
1741 } 1741 }
1742 mRetVal = errorUN; 1742 mRetVal = errorUN;
1743 deleteSocket(); 1743 deleteSocket();
1744 return ; 1744 return ;
1745 } 1745 }
1746 } 1746 }
1747 mFileString += line; 1747 mFileString += line;
1748 //qDebug("readline: %s ", line.latin1()); 1748 //qDebug("readline: %s ", line.latin1());
1749 } 1749 }
1750 if ( mTime.elapsed () < 3000 ) { 1750 if ( mTime.elapsed () < 3000 ) {
1751 // wait for more 1751 // wait for more
1752 //qDebug("waitformore "); 1752 //qDebug("waitformore ");
1753 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1753 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1754 return; 1754 return;
1755 } 1755 }
1756 mTimerSocket->stop(); 1756 mTimerSocket->stop();
1757 mConnectCount = -1; 1757 mConnectCount = -1;
1758 mConnectProgress.hide(); 1758 mConnectProgress.hide();
1759 QString fileName = mFileName; 1759 QString fileName = mFileName;
1760 QFile file ( fileName ); 1760 QFile file ( fileName );
1761 if (!file.open( IO_WriteOnly ) ) { 1761 if (!file.open( IO_WriteOnly ) ) {
1762 mFileString = ""; 1762 mFileString = "";
1763 mRetVal = errorR; 1763 mRetVal = errorR;
1764 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1764 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1765 deleteSocket(); 1765 deleteSocket();
1766 return ; 1766 return ;
1767 1767
1768 } 1768 }
1769 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1769 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1770 QTextStream ts ( &file ); 1770 QTextStream ts ( &file );
1771 ts.setEncoding( QTextStream::Latin1 ); 1771 ts.setEncoding( QTextStream::Latin1 );
1772 ts << mFileString; 1772 ts << mFileString;
1773 file.close(); 1773 file.close();
1774 mFileString = ""; 1774 mFileString = "";
1775 mRetVal = successR; 1775 mRetVal = successR;
1776 mSocket->close(); 1776 mSocket->close();
1777 // if state is not idle, deleteSocket(); is called via 1777 // if state is not idle, deleteSocket(); is called via
1778 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1778 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1779 if ( mSocket->state() == QSocket::Idle ) 1779 if ( mSocket->state() == QSocket::Idle )
1780 deleteSocket(); 1780 deleteSocket();
1781} 1781}
1782 1782
1783void KCommandSocket::deleteSocket() 1783void KCommandSocket::deleteSocket()
1784{ 1784{
1785 //qDebug("KCommandSocket::deleteSocket() "); 1785 //qDebug("KCommandSocket::deleteSocket() ");
1786 mConnectProgress.hide(); 1786 mConnectProgress.hide();
1787 1787
1788 if ( mConnectCount >= 0 ) { 1788 if ( mConnectCount >= 0 ) {
1789 mTimerSocket->stop(); 1789 mTimerSocket->stop();
1790 mRetVal = errorTO; 1790 mRetVal = errorTO;
1791 qDebug("KCS::Connection to remote host timed out"); 1791 qDebug("KCS::Connection to remote host timed out");
1792 if ( mSocket ) { 1792 if ( mSocket ) {
1793 mSocket->close(); 1793 mSocket->close();
1794 //if ( mSocket->state() == QSocket::Idle ) 1794 //if ( mSocket->state() == QSocket::Idle )
1795 // deleteSocket(); 1795 // deleteSocket();
1796 delete mSocket; 1796 delete mSocket;
1797 mSocket = 0; 1797 mSocket = 0;
1798 } 1798 }
1799 if ( mConnectCount == 0 ) 1799 if ( mConnectCount == 0 )
1800 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1800 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1801 else if ( tlw ) 1801 else if ( tlw )
1802 tlw->setCaption( i18n("Connection to remote host cancelled!") ); 1802 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1803 emit commandFinished( this, mRetVal ); 1803 emit commandFinished( this, mRetVal );
1804 return; 1804 return;
1805 } 1805 }
1806 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1806 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1807 if ( mSocket) 1807 if ( mSocket)
1808 delete mSocket; 1808 delete mSocket;
1809 mSocket = 0; 1809 mSocket = 0;
1810 //qDebug("commandFinished "); 1810 //qDebug("commandFinished ");
1811 emit commandFinished( this, mRetVal ); 1811 emit commandFinished( this, mRetVal );
1812} 1812}
diff --git a/libkdepim/ksyncprefsdialog.cpp b/libkdepim/ksyncprefsdialog.cpp
index 744a914..1f9afcb 100644
--- a/libkdepim/ksyncprefsdialog.cpp
+++ b/libkdepim/ksyncprefsdialog.cpp
@@ -1,905 +1,905 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 3 Copyright (c) 2004 Lutz Rogowski <rogowski@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#include <qlayout.h> 24#include <qlayout.h>
25#include <qlabel.h> 25#include <qlabel.h>
26#include <qgroupbox.h> 26#include <qgroupbox.h>
27#include <qbuttongroup.h> 27#include <qbuttongroup.h>
28#include <qlineedit.h> 28#include <qlineedit.h>
29#include <qfont.h> 29#include <qfont.h>
30#include <qslider.h> 30#include <qslider.h>
31#include <qfile.h> 31#include <qfile.h>
32#include <qdir.h> 32#include <qdir.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qcombobox.h> 34#include <qcombobox.h>
35#include <qvbox.h> 35#include <qvbox.h>
36#include <qhbox.h> 36#include <qhbox.h>
37#include <qspinbox.h> 37#include <qspinbox.h>
38#include <qdatetime.h> 38#include <qdatetime.h>
39#include <qcheckbox.h> 39#include <qcheckbox.h>
40#include <qradiobutton.h> 40#include <qradiobutton.h>
41#include <qpushbutton.h> 41#include <qpushbutton.h>
42#include <qstrlist.h> 42#include <qstrlist.h>
43#include <qapplication.h> 43#include <qapplication.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qscrollview.h> 45#include <qscrollview.h>
46#include <qvgroupbox.h> 46#include <qvgroupbox.h>
47#include <qhgroupbox.h> 47#include <qhgroupbox.h>
48 48
49#include <kcolorbutton.h> 49#include <kcolorbutton.h>
50#include <kdebug.h> 50#include <kdebug.h>
51#include <klocale.h> 51#include <klocale.h>
52#include <kglobal.h> 52#include <kglobal.h>
53#include <kfontdialog.h> 53#include <kfontdialog.h>
54#include <kmessagebox.h> 54#include <kmessagebox.h>
55#include <kcolordialog.h> 55#include <kcolordialog.h>
56#include <kiconloader.h> 56#include <kiconloader.h>
57#include <kemailsettings.h> 57#include <kemailsettings.h>
58#include <kstandarddirs.h> 58#include <kstandarddirs.h>
59#include <kfiledialog.h> 59#include <kfiledialog.h>
60#include <kmessagebox.h> 60#include <kmessagebox.h>
61 61
62//#include <kurlrequester.h> 62//#include <kurlrequester.h>
63#include <klineedit.h> 63#include <klineedit.h>
64#include "ksyncprofile.h" 64#include "ksyncprofile.h"
65 65
66 66
67//#include "koprefs.h" 67//#include "koprefs.h"
68 68
69#include "ksyncprefsdialog.h" 69#include "ksyncprefsdialog.h"
70//#include "koglobals.h" 70//#include "koglobals.h"
71 71
72 72
73KSyncPrefsDialog::KSyncPrefsDialog(QWidget *parent, char *name, bool modal) : 73KSyncPrefsDialog::KSyncPrefsDialog(QWidget *parent, char *name, bool modal) :
74 KDialog(parent,name,true) 74 KDialog(parent,name,true)
75{ 75{
76 76
77 setCaption( i18n("Synchronization Preferences")); 77 setCaption( i18n("Synchronization Preferences"));
78 78
79 mSyncProfiles.setAutoDelete( true ); 79 mSyncProfiles.setAutoDelete( true );
80 setupSyncAlgTab(); 80 setupSyncAlgTab();
81} 81}
82 82
83 83
84KSyncPrefsDialog::~KSyncPrefsDialog() 84KSyncPrefsDialog::~KSyncPrefsDialog()
85{ 85{
86} 86}
87 87
88void KSyncPrefsDialog::setupSyncAlgTab() 88void KSyncPrefsDialog::setupSyncAlgTab()
89{ 89{
90 QLabel * lab; 90 QLabel * lab;
91 //QFrame *page = addPage(i18n("Sync Prefs"),0,0); 91 //QFrame *page = addPage(i18n("Sync Prefs"),0,0);
92 QVBox * mainbox = new QVBox( this ); 92 QVBox * mainbox = new QVBox( this );
93 QScrollView* sv = new QScrollView( mainbox ); 93 QScrollView* sv = new QScrollView( mainbox );
94 QHBoxLayout * lay = new QHBoxLayout( this ); 94 QHBoxLayout * lay = new QHBoxLayout( this );
95 lay->addWidget( mainbox ); 95 lay->addWidget( mainbox );
96 QHBox * b_box = new QHBox( mainbox ); 96 QHBox * b_box = new QHBox( mainbox );
97 97
98 QPushButton* button = new QPushButton( i18n("Ok"), b_box ); 98 QPushButton* button = new QPushButton( i18n("Ok"), b_box );
99 connect ( button, SIGNAL( clicked()), this, SLOT (slotOK() ) ); 99 connect ( button, SIGNAL( clicked()), this, SLOT (slotOK() ) );
100 button = new QPushButton( i18n("Cancel"), b_box ); 100 button = new QPushButton( i18n("Cancel"), b_box );
101 connect ( button, SIGNAL( clicked()), this, SLOT (reject() ) ); 101 connect ( button, SIGNAL( clicked()), this, SLOT (reject() ) );
102 //QBoxLayout * sl = new QVBoxLayout(this ); 102 //QBoxLayout * sl = new QVBoxLayout(this );
103 //sl->addWidget ( sv ); 103 //sl->addWidget ( sv );
104 sv->setResizePolicy ( QScrollView::AutoOneFit ); 104 sv->setResizePolicy ( QScrollView::AutoOneFit );
105 QFrame *topFrame = new QFrame ( sv ); 105 QFrame *topFrame = new QFrame ( sv );
106 sv->addChild( topFrame ); 106 sv->addChild( topFrame );
107 mSetupSyncAlgTab = topFrame; 107 mSetupSyncAlgTab = topFrame;
108 QGridLayout *topLayout = new QGridLayout(topFrame,6,2); 108 QGridLayout *topLayout = new QGridLayout(topFrame,6,2);
109 topLayout->setSpacing(spacingHint()); 109 topLayout->setSpacing(spacingHint());
110 topLayout->setMargin(marginHint()); 110 topLayout->setMargin(marginHint());
111 111
112 //lab = new QLabel(i18n("Sync settings not yet implemented. DO NOT USE!"), topFrame); 112 //lab = new QLabel(i18n("Sync settings not yet implemented. DO NOT USE!"), topFrame);
113 int iii = 0; 113 int iii = 0;
114 //topLayout->addMultiCellWidget(lab , iii,iii,0,1); 114 //topLayout->addMultiCellWidget(lab , iii,iii,0,1);
115 //++iii; 115 //++iii;
116 116
117 mMyMachineName = new QLineEdit(topFrame); 117 mMyMachineName = new QLineEdit(topFrame);
118 lab = new QLabel(mMyMachineName, i18n("Local device name:"), topFrame); 118 lab = new QLabel(mMyMachineName, i18n("Local device name:"), topFrame);
119 topLayout->addWidget(lab ,iii,0); 119 topLayout->addWidget(lab ,iii,0);
120 topLayout->addWidget(mMyMachineName,iii,1); 120 topLayout->addWidget(mMyMachineName,iii,1);
121 ++iii; 121 ++iii;
122 122
123 QHBox* buttonbox = new QHBox( topFrame); 123 QHBox* buttonbox = new QHBox( topFrame);
124 topLayout->addMultiCellWidget(buttonbox, iii,iii,0,1); 124 topLayout->addMultiCellWidget(buttonbox, iii,iii,0,1);
125 ++iii; 125 ++iii;
126 button = new QPushButton( i18n("New profile"), buttonbox ); 126 button = new QPushButton( i18n("New profile"), buttonbox );
127 connect ( button, SIGNAL( clicked()), this, SLOT (newProfile() ) ); 127 connect ( button, SIGNAL( clicked()), this, SLOT (newProfile() ) );
128 128
129 button = new QPushButton( i18n("Clone profile"), buttonbox ); 129 button = new QPushButton( i18n("Clone profile"), buttonbox );
130 connect ( button, SIGNAL( clicked()), this, SLOT ( cloneProfile() ) ); 130 connect ( button, SIGNAL( clicked()), this, SLOT ( cloneProfile() ) );
131 131
132 button = new QPushButton( i18n("Delete profile"), buttonbox ); 132 button = new QPushButton( i18n("Delete profile"), buttonbox );
133 connect ( button, SIGNAL( clicked()), this, SLOT (deleteProfile() ) ); 133 connect ( button, SIGNAL( clicked()), this, SLOT (deleteProfile() ) );
134 134
135 mProfileBox = new QComboBox(topFrame); 135 mProfileBox = new QComboBox(topFrame);
136 mProfileBox->setEditable ( true ); 136 mProfileBox->setEditable ( true );
137 mProfileBox->setInsertionPolicy(QComboBox::NoInsertion); 137 mProfileBox->setInsertionPolicy(QComboBox::NoInsertion);
138 connect ( mProfileBox, SIGNAL(activated ( int ) ), this, SLOT (profileChanged( int ) ) ); 138 connect ( mProfileBox, SIGNAL(activated ( int ) ), this, SLOT (profileChanged( int ) ) );
139 connect ( mProfileBox, SIGNAL( textChanged ( const QString & ) ), this, SLOT (textChanged( const QString & ) ) ); 139 connect ( mProfileBox, SIGNAL( textChanged ( const QString & ) ), this, SLOT (textChanged( const QString & ) ) );
140 140
141 lab = new QLabel(mProfileBox, i18n("Profile:"), topFrame); 141 lab = new QLabel(mProfileBox, i18n("Profile:"), topFrame);
142 topLayout->addWidget(lab ,iii,0); 142 topLayout->addWidget(lab ,iii,0);
143 topLayout->addWidget(mProfileBox, iii,1); 143 topLayout->addWidget(mProfileBox, iii,1);
144 ++iii; 144 ++iii;
145 145
146 146
147 147
148 QHGroupBox *iims = new QHGroupBox( i18n("Multiple Sync options"), topFrame); 148 QHGroupBox *iims = new QHGroupBox( i18n("Multiple Sync options"), topFrame);
149 new QLabel( i18n("Include in multiple "), iims ); 149 new QLabel( i18n("Include in multiple "), iims );
150 mIncludeInRing = new QCheckBox( i18n("calendar "), iims ); 150 mIncludeInRing = new QCheckBox( i18n("calendar "), iims );
151 mIncludeInRingAB = new QCheckBox( i18n("addressbook "), iims ); 151 mIncludeInRingAB = new QCheckBox( i18n("addressbook "), iims );
152 mIncludeInRingPWM = new QCheckBox( i18n("pwmanager"), iims ); 152 mIncludeInRingPWM = new QCheckBox( i18n("pwmanager"), iims );
153 new QLabel( i18n(" sync"), iims ); 153 new QLabel( i18n(" sync"), iims );
154 topLayout->addMultiCellWidget(iims, iii,iii,0,1); 154 topLayout->addMultiCellWidget(iims, iii,iii,0,1);
155 ++iii; 155 ++iii;
156 QVGroupBox* gb0 = new QVGroupBox( i18n("Sync algo options"), topFrame); 156 QVGroupBox* gb0 = new QVGroupBox( i18n("Sync algo options"), topFrame);
157 topLayout->addMultiCellWidget(gb0, iii,iii,0,1); 157 topLayout->addMultiCellWidget(gb0, iii,iii,0,1);
158 ++iii; 158 ++iii;
159 QButtonGroup* gr; 159 QButtonGroup* gr;
160 { 160 {
161 QVGroupBox* topFrame = gb0; 161 QVGroupBox* topFrame = gb0;
162 162
163 163
164 164
165 mAskForPreferences = new QCheckBox( i18n("Ask for preferences before sync"), topFrame ); 165 mAskForPreferences = new QCheckBox( i18n("Ask for preferences before sync"), topFrame );
166 //topLayout->addMultiCellWidget(mAskForPreferences, iii,iii,0,1); 166 //topLayout->addMultiCellWidget(mAskForPreferences, iii,iii,0,1);
167 //++iii; 167 //++iii;
168 gr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Sync preferences"), topFrame); 168 gr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Sync preferences"), topFrame);
169 //topLayout->addMultiCellWidget(gr, iii,iii,0,1); 169 //topLayout->addMultiCellWidget(gr, iii,iii,0,1);
170 //++iii; 170 //++iii;
171 loc = new QRadioButton ( i18n("Take local entry on conflict"), gr ); 171 loc = new QRadioButton ( i18n("Take local entry on conflict"), gr );
172 rem = new QRadioButton ( i18n("Take remote entry on conflict"), gr ); 172 rem = new QRadioButton ( i18n("Take remote entry on conflict"), gr );
173 newest = new QRadioButton ( i18n("Take newest entry on conflict"), gr ); 173 newest = new QRadioButton ( i18n("Take newest entry on conflict"), gr );
174 ask = new QRadioButton ( i18n("Ask for every entry on conflict"), gr ); 174 ask = new QRadioButton ( i18n("Ask for every entry on conflict"), gr );
175 f_loc= new QRadioButton ( i18n("Force: Take local entry always"), gr ); 175 f_loc= new QRadioButton ( i18n("Force: Take local entry always"), gr );
176 f_rem = new QRadioButton ( i18n("Force: Take remote entry always"), gr ); 176 f_rem = new QRadioButton ( i18n("Force: Take remote entry always"), gr );
177 // both = new QRadioButton ( i18n("Take both on conflict"), gr ); 177 // both = new QRadioButton ( i18n("Take both on conflict"), gr );
178 178
179 mShowSummaryAfterSync = new QCheckBox( i18n("Show summary after sync"), topFrame ); 179 mShowSummaryAfterSync = new QCheckBox( i18n("Show summary after sync"), topFrame );
180 //topLayout->addMultiCellWidget(mShowSummaryAfterSync, iii,iii,0,1); 180 //topLayout->addMultiCellWidget(mShowSummaryAfterSync, iii,iii,0,1);
181 //++iii; 181 //++iii;
182 182
183#if 0 183#if 0
184 QHGroupBox* gb51 = new QHGroupBox( i18n("Local resources to sync with:"), topFrame); 184 QHGroupBox* gb51 = new QHGroupBox( i18n("Local resources to sync with:"), topFrame);
185 { 185 {
186 QVBox * fibo2 = new QVBox ( gb51 ); 186 QVBox * fibo2 = new QVBox ( gb51 );
187 new QLabel ( i18n("Calendar resources:"), fibo2 ); 187 new QLabel ( i18n("Calendar resources:"), fibo2 );
188 //mFilterInCal = new QComboBox( fibo2 ); 188 //mFilterInCal = new QComboBox( fibo2 );
189 fibo2 = new QVBox ( gb51 ); 189 fibo2 = new QVBox ( gb51 );
190 new QLabel ( i18n("Addressbook resources:"), fibo2 ); 190 new QLabel ( i18n("Addressbook resources:"), fibo2 );
191 //mFilterInAB = new QComboBox( fibo2 ); 191 //mFilterInAB = new QComboBox( fibo2 );
192 } 192 }
193#endif 193#endif
194 QHGroupBox* gb5 = new QHGroupBox( i18n("Apply filter when adding data to local:"), topFrame); 194 QHGroupBox* gb5 = new QHGroupBox( i18n("Apply filter when adding data to local:"), topFrame);
195 QVBox * fibo2 = new QVBox ( gb5 ); 195 QVBox * fibo2 = new QVBox ( gb5 );
196 new QLabel ( i18n("Incoming calendar filter:"), fibo2 ); 196 new QLabel ( i18n("Incoming calendar filter:"), fibo2 );
197 mFilterInCal = new QComboBox( fibo2 ); 197 mFilterInCal = new QComboBox( fibo2 );
198 fibo2 = new QVBox ( gb5 ); 198 fibo2 = new QVBox ( gb5 );
199 new QLabel ( i18n("Incoming addressbook filter:"), fibo2 ); 199 new QLabel ( i18n("Incoming addressbook filter:"), fibo2 );
200 mFilterInAB = new QComboBox( fibo2 ); 200 mFilterInAB = new QComboBox( fibo2 );
201 201
202 mWriteBackFile = new QCheckBox( i18n("Write back synced data"), topFrame ); 202 mWriteBackFile = new QCheckBox( i18n("Write back synced data"), topFrame );
203 // topLayout->addMultiCellWidget(mWriteBackFile, iii,iii,0,1); 203 // topLayout->addMultiCellWidget(mWriteBackFile, iii,iii,0,1);
204 // ++iii; 204 // ++iii;
205 205
206 QVGroupBox* gb2 = new QVGroupBox( i18n("Write back options"), topFrame); 206 QVGroupBox* gb2 = new QVGroupBox( i18n("Write back options"), topFrame);
207 //topLayout->addMultiCellWidget(gb2, iii,iii,0,1); 207 //topLayout->addMultiCellWidget(gb2, iii,iii,0,1);
208 //++iii; 208 //++iii;
209 { 209 {
210 QVGroupBox*topFrame = gb2; 210 QVGroupBox*topFrame = gb2;
211 mWriteBackExisting= new QCheckBox( i18n("Write back (on remote) existing entries only"), topFrame ); 211 mWriteBackExisting= new QCheckBox( i18n("Write back (on remote) existing entries only"), topFrame );
212 QHGroupBox* gb4 = new QHGroupBox( i18n("Apply filter when adding data to remote:"), topFrame); 212 QHGroupBox* gb4 = new QHGroupBox( i18n("Apply filter when adding data to remote:"), topFrame);
213 QVBox * fibo = new QVBox ( gb4 ); 213 QVBox * fibo = new QVBox ( gb4 );
214 new QLabel ( i18n("Outgoing calendar filter:"), fibo ); 214 new QLabel ( i18n("Outgoing calendar filter:"), fibo );
215 mFilterOutCal = new QComboBox( fibo ); 215 mFilterOutCal = new QComboBox( fibo );
216 fibo = new QVBox ( gb4 ); 216 fibo = new QVBox ( gb4 );
217 new QLabel ( i18n("Outgoing addressbook filter:"), fibo ); 217 new QLabel ( i18n("Outgoing addressbook filter:"), fibo );
218 mFilterOutAB = new QComboBox( fibo ); 218 mFilterOutAB = new QComboBox( fibo );
219 //topLayout->addMultiCellWidget(mWriteBackExisting, iii,iii,0,1); 219 //topLayout->addMultiCellWidget(mWriteBackExisting, iii,iii,0,1);
220 //++iii; 220 //++iii;
221 mWriteBackFuture= new QCheckBox( i18n("Write back (calendar) entries for time period only"), topFrame ); 221 mWriteBackFuture= new QCheckBox( i18n("Write back (calendar) entries for time period only"), topFrame );
222 //topLayout->addMultiCellWidget(mWriteBackFuture, iii,iii,0,1); 222 //topLayout->addMultiCellWidget(mWriteBackFuture, iii,iii,0,1);
223 //++iii; 223 //++iii;
224 QHGroupBox* gb3 = new QHGroupBox( i18n("Time period"), topFrame); 224 QHGroupBox* gb3 = new QHGroupBox( i18n("Time period"), topFrame);
225 connect ( mWriteBackFuture, SIGNAL( toggled ( bool ) ), gb3, SLOT ( setEnabled ( bool ) ) ); 225 connect ( mWriteBackFuture, SIGNAL( toggled ( bool ) ), gb3, SLOT ( setEnabled ( bool ) ) );
226 new QLabel( i18n("From ") , gb3 ); 226 new QLabel( i18n("From ") , gb3 );
227 mWriteBackPastWeeks= new QSpinBox(1,104, 1, gb3); 227 mWriteBackPastWeeks= new QSpinBox(1,104, 1, gb3);
228 new QLabel( i18n(" weeks in the past to ") , gb3 ); 228 new QLabel( i18n(" weeks in the past to ") , gb3 );
229 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, gb3); 229 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, gb3);
230 new QLabel( i18n(" weeks in the future ") , gb3 ); 230 new QLabel( i18n(" weeks in the future ") , gb3 );
231 //topLayout->addMultiCellWidget(mWriteBackFutureWeeks, iii,iii,1,1); 231 //topLayout->addMultiCellWidget(mWriteBackFutureWeeks, iii,iii,1,1);
232 //++iii; 232 //++iii;
233 gb3->setEnabled( false ); 233 gb3->setEnabled( false );
234 connect ( mWriteBackExisting, SIGNAL( toggled ( bool ) ), gb4, SLOT ( setDisabled ( bool ) ) ); 234 connect ( mWriteBackExisting, SIGNAL( toggled ( bool ) ), gb4, SLOT ( setDisabled ( bool ) ) );
235 } 235 }
236 connect ( mWriteBackFile, SIGNAL( toggled ( bool ) ), gb2, SLOT ( setEnabled ( bool ) ) ); 236 connect ( mWriteBackFile, SIGNAL( toggled ( bool ) ), gb2, SLOT ( setEnabled ( bool ) ) );
237 237
238 } 238 }
239 proGr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Profile kind"), topFrame); 239 proGr = new QButtonGroup ( 1, Qt::Horizontal, i18n("Profile kind"), topFrame);
240 gr = proGr; 240 gr = proGr;
241 topLayout->addMultiCellWidget(gr, iii,iii,0,1); 241 topLayout->addMultiCellWidget(gr, iii,iii,0,1);
242 ++iii; 242 ++iii;
243 mIsLocal = new QRadioButton ( i18n("Local file"), gr ); 243 mIsLocal = new QRadioButton ( i18n("Local file"), gr );
244 mIsPi = new QRadioButton ( i18n("Pi-Sync - all resources ( direct Kx/Pi to Kx/Pi sync )"), gr ); 244 mIsPi = new QRadioButton ( i18n("Pi-Sync - all resources ( direct Kx/Pi to Kx/Pi sync )"), gr );
245 connect (mIsPi, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 245 connect (mIsPi, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
246 mIsPiSpecific = new QRadioButton ( i18n("Pi-Sync - selected resources ( direct Kx/Pi to Kx/Pi sync )"), gr ); 246 mIsPiSpecific = new QRadioButton ( i18n("Pi-Sync - selected resources ( direct Kx/Pi to Kx/Pi sync )"), gr );
247 connect (mIsPiSpecific, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 247 connect (mIsPiSpecific, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
248 mIsNotLocal = new QRadioButton ( i18n("Remote file (w down/upload command)"), gr ); 248 mIsNotLocal = new QRadioButton ( i18n("Remote file (w down/upload command)"), gr );
249 connect (mIsLocal, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 249 connect (mIsLocal, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
250 mIsPhone = new QRadioButton ( i18n("Mobile device (cell phone)"), gr ); 250 mIsPhone = new QRadioButton ( i18n("Mobile device (cell phone)"), gr );
251 connect (mIsPhone, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) ); 251 connect (mIsPhone, SIGNAL( toggled(bool)), this, SLOT (kindChanged(bool) ) );
252 252
253 QVGroupBox* gb1 = new QVGroupBox( i18n("Profile kind specific settings"), topFrame); 253 QVGroupBox* gb1 = new QVGroupBox( i18n("Profile kind specific settings"), topFrame);
254 topLayout->addMultiCellWidget(gb1, iii,iii,0,1); 254 topLayout->addMultiCellWidget(gb1, iii,iii,0,1);
255 ++iii; 255 ++iii;
256 256
257 // ****************************************** 257 // ******************************************
258 // Profile kind specific settings 258 // Profile kind specific settings
259 { 259 {
260 // *** phone ******************************* 260 // *** phone *******************************
261 QVGroupBox* topFrame = gb1; 261 QVGroupBox* topFrame = gb1;
262 phoneWidget = new QVBox( topFrame); 262 phoneWidget = new QVBox( topFrame);
263 //topLayout->addMultiCellWidget(phoneWidget, iii,iii,0,1); 263 //topLayout->addMultiCellWidget(phoneWidget, iii,iii,0,1);
264 //++iii; 264 //++iii;
265 mWriteContactToSIM = 0;//new QCheckBox( i18n("Sync contacts with phone SIM card (If not, sync with phone memory)"), phoneWidget ); 265 mWriteContactToSIM = 0;//new QCheckBox( i18n("Sync contacts with phone SIM card (If not, sync with phone memory)"), phoneWidget );
266 QHBox* temphb = new QHBox( phoneWidget ); 266 QHBox* temphb = new QHBox( phoneWidget );
267 new QLabel( i18n("I/O device: "), temphb ); 267 new QLabel( i18n("I/O device: "), temphb );
268 mPhoneDevice = new QLineEdit( temphb); 268 mPhoneDevice = new QLineEdit( temphb);
269 button = new QPushButton( i18n("Help..."), temphb ); 269 button = new QPushButton( i18n("Help..."), temphb );
270 connect ( button, SIGNAL( clicked()), this, SLOT ( helpDevice() ) ); 270 connect ( button, SIGNAL( clicked()), this, SLOT ( helpDevice() ) );
271 271
272 272
273 temphb = new QHBox( phoneWidget ); 273 temphb = new QHBox( phoneWidget );
274 new QLabel( i18n("Connection: "), temphb ); 274 new QLabel( i18n("Connection: "), temphb );
275 mPhoneConnection = new QLineEdit( temphb); 275 mPhoneConnection = new QLineEdit( temphb);
276 button = new QPushButton( i18n("Help..."), temphb ); 276 button = new QPushButton( i18n("Help..."), temphb );
277 connect ( button, SIGNAL( clicked()), this, SLOT ( helpConnection() ) ); 277 connect ( button, SIGNAL( clicked()), this, SLOT ( helpConnection() ) );
278 278
279 279
280 temphb = new QHBox( phoneWidget ); 280 temphb = new QHBox( phoneWidget );
281 new QLabel( i18n("Model(opt.): "), temphb ); 281 new QLabel( i18n("Model(opt.): "), temphb );
282 mPhoneModel = new QLineEdit( temphb); 282 mPhoneModel = new QLineEdit( temphb);
283 button = new QPushButton( i18n("Help..."), temphb ); 283 button = new QPushButton( i18n("Help..."), temphb );
284 connect ( button, SIGNAL( clicked()), this, SLOT ( helpModel() ) ); 284 connect ( button, SIGNAL( clicked()), this, SLOT ( helpModel() ) );
285 285
286 // *** local******************************* 286 // *** local*******************************
287 localFileWidget = new QVBox( topFrame); 287 localFileWidget = new QVBox( topFrame);
288 //topLayout->addMultiCellWidget(localFileWidget, iii,iii,0,1); 288 //topLayout->addMultiCellWidget(localFileWidget, iii,iii,0,1);
289 //++iii; 289 //++iii;
290 temphb = new QHBox( localFileWidget ); 290 temphb = new QHBox( localFileWidget );
291 291
292 lab = new QLabel( i18n("Local file Cal:"), temphb ); 292 lab = new QLabel( i18n("Local file Cal:"), temphb );
293 lab = new QLabel( i18n("Local file ABook:"), temphb ); 293 lab = new QLabel( i18n("Local file ABook:"), temphb );
294 lab = new QLabel( i18n("Local file PWMgr:"), temphb ); 294 lab = new QLabel( i18n("Local file PWMgr:"), temphb );
295 temphb = new QHBox( localFileWidget ); 295 temphb = new QHBox( localFileWidget );
296 button = new QPushButton( i18n("Choose..."), temphb ); 296 button = new QPushButton( i18n("Choose..."), temphb );
297 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFile() ) ); 297 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFile() ) );
298 button = new QPushButton( i18n("Choose..."), temphb ); 298 button = new QPushButton( i18n("Choose..."), temphb );
299 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFileAB() ) ); 299 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFileAB() ) );
300 button = new QPushButton( i18n("Choose..."), temphb ); 300 button = new QPushButton( i18n("Choose..."), temphb );
301 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFilePWM() ) ); 301 connect ( button, SIGNAL( clicked()), this, SLOT ( chooseFilePWM() ) );
302 temphb = new QHBox( localFileWidget ); 302 temphb = new QHBox( localFileWidget );
303 303
304 mRemoteFile = new QLineEdit( temphb); 304 mRemoteFile = new QLineEdit( temphb);
305 mRemoteFileAB = new QLineEdit( temphb); 305 mRemoteFileAB = new QLineEdit( temphb);
306 mRemoteFilePWM = new QLineEdit( temphb); 306 mRemoteFilePWM = new QLineEdit( temphb);
307 mIsKapiFileL = new QCheckBox( i18n("Addressbook file (*.vcf) is used by KA/Pi"), localFileWidget ); 307 mIsKapiFileL = new QCheckBox( i18n("Addressbook file (*.vcf) is used by KA/Pi"), localFileWidget );
308 308
309 309
310 // *** remote******************************* 310 // *** remote*******************************
311 remoteFileWidget = new QVBox( topFrame); 311 remoteFileWidget = new QVBox( topFrame);
312 //topLayout->addMultiCellWidget(remoteFileWidget, iii,iii,0,1); 312 //topLayout->addMultiCellWidget(remoteFileWidget, iii,iii,0,1);
313 //++iii; 313 //++iii;
314 temphb = new QHBox( remoteFileWidget ); 314 temphb = new QHBox( remoteFileWidget );
315 new QLabel( i18n("Calendar:"), temphb); 315 new QLabel( i18n("Calendar:"), temphb);
316 new QLabel( i18n("AddressBook:"), temphb); 316 new QLabel( i18n("AddressBook:"), temphb);
317 new QLabel( i18n("PWManager:"), temphb); 317 new QLabel( i18n("PWManager:"), temphb);
318 318
319 lab = new QLabel( i18n("Pre sync (download) command:"), remoteFileWidget); 319 lab = new QLabel( i18n("Pre sync (download) command:"), remoteFileWidget);
320 temphb = new QHBox( remoteFileWidget ); 320 temphb = new QHBox( remoteFileWidget );
321 mRemotePrecommand = new QLineEdit(temphb); 321 mRemotePrecommand = new QLineEdit(temphb);
322 mRemotePrecommandAB = new QLineEdit(temphb); 322 mRemotePrecommandAB = new QLineEdit(temphb);
323 mRemotePrecommandPWM = new QLineEdit(temphb); 323 mRemotePrecommandPWM = new QLineEdit(temphb);
324 324
325 lab = new QLabel( i18n("Local temp file:"), remoteFileWidget); 325 lab = new QLabel( i18n("Local temp file:"), remoteFileWidget);
326 temphb = new QHBox( remoteFileWidget ); 326 temphb = new QHBox( remoteFileWidget );
327 mLocalTempFile = new QLineEdit(temphb); 327 mLocalTempFile = new QLineEdit(temphb);
328 mLocalTempFileAB = new QLineEdit(temphb); 328 mLocalTempFileAB = new QLineEdit(temphb);
329 mLocalTempFilePWM = new QLineEdit(temphb); 329 mLocalTempFilePWM = new QLineEdit(temphb);
330 330
331 lab = new QLabel( i18n("Post sync (upload) command:"), remoteFileWidget); 331 lab = new QLabel( i18n("Post sync (upload) command:"), remoteFileWidget);
332 temphb = new QHBox( remoteFileWidget ); 332 temphb = new QHBox( remoteFileWidget );
333 mRemotePostcommand = new QLineEdit(temphb ); 333 mRemotePostcommand = new QLineEdit(temphb );
334 mRemotePostcommandAB = new QLineEdit(temphb ); 334 mRemotePostcommandAB = new QLineEdit(temphb );
335 mRemotePostcommandPWM = new QLineEdit(temphb ); 335 mRemotePostcommandPWM = new QLineEdit(temphb );
336 mIsKapiFileR = new QCheckBox( i18n("Addressbook file is used by KA/Pi"), remoteFileWidget ); 336 mIsKapiFileR = new QCheckBox( i18n("Addressbook file is used by KA/Pi"), remoteFileWidget );
337 lab = new QLabel( i18n("Fill in default values for:"), remoteFileWidget); 337 lab = new QLabel( i18n("Fill in default values for:"), remoteFileWidget);
338 temphb = new QHBox( remoteFileWidget ); 338 temphb = new QHBox( remoteFileWidget );
339 button = new QPushButton( i18n("ssh/scp"), temphb ); 339 button = new QPushButton( i18n("ssh/scp"), temphb );
340 connect ( button, SIGNAL( clicked()), this, SLOT (fillSSH() ) ); 340 connect ( button, SIGNAL( clicked()), this, SLOT (fillSSH() ) );
341 button = new QPushButton( i18n("ftp"), temphb ); 341 button = new QPushButton( i18n("ftp"), temphb );
342 connect ( button, SIGNAL( clicked()), this, SLOT (fillFTP() ) ); 342 connect ( button, SIGNAL( clicked()), this, SLOT (fillFTP() ) );
343 lab = new QLabel( i18n("Hint: Use $PWD$ for placeholder of password!"), remoteFileWidget); 343 lab = new QLabel( i18n("Hint: Use $PWD$ for placeholder of password!"), remoteFileWidget);
344 344
345 // *** pi-sync******************************* 345 // *** pi-sync*******************************
346 piWidget = new QVBox( topFrame); 346 piWidget = new QVBox( topFrame);
347 //topLayout->addMultiCellWidget(piWidget, iii,iii,0,1); 347 //topLayout->addMultiCellWidget(piWidget, iii,iii,0,1);
348 //++iii; 348 //++iii;
349 temphb = new QHBox( piWidget ); 349 temphb = new QHBox( piWidget );
350 new QLabel( i18n("Calendar:"), temphb); 350 new QLabel( i18n("Calendar:"), temphb);
351 new QLabel( i18n("AddressBook:"), temphb); 351 new QLabel( i18n("AddressBook:"), temphb);
352 new QLabel( i18n("PWManager:"), temphb); 352 new QLabel( i18n("PWManager:"), temphb);
353 353
354 lab = new QLabel( i18n("Password for remote access: (could be the same for each)"), piWidget); 354 lab = new QLabel( i18n("Password for remote access: (could be the same for each)"), piWidget);
355 temphb = new QHBox( piWidget ); 355 temphb = new QHBox( piWidget );
356 mRemotePw = new QLineEdit(temphb); 356 mRemotePw = new QLineEdit(temphb);
357 mRemotePwAB = new QLineEdit(temphb); 357 mRemotePwAB = new QLineEdit(temphb);
358 mRemotePwPWM = new QLineEdit(temphb); 358 mRemotePwPWM = new QLineEdit(temphb);
359 359
360 lab = new QLabel( i18n("Remote IP address: (could be the same for each)"), piWidget); 360 lab = new QLabel( i18n("Remote IP address: (could be the same for each)"), piWidget);
361 temphb = new QHBox( piWidget ); 361 temphb = new QHBox( piWidget );
362 mRemoteIP = new QLineEdit(temphb); 362 mRemoteIP = new QLineEdit(temphb);
363 mRemoteIPAB = new QLineEdit(temphb); 363 mRemoteIPAB = new QLineEdit(temphb);
364 mRemoteIPPWM = new QLineEdit(temphb); 364 mRemoteIPPWM = new QLineEdit(temphb);
365 365
366 lab = new QLabel( i18n("Remote port number: (should be different for each)"), piWidget); 366 lab = new QLabel( i18n("Remote port number: (should be different for each)"), piWidget);
367 temphb = new QHBox( piWidget ); 367 temphb = new QHBox( piWidget );
368 mRemotePort = new QLineEdit(temphb); 368 mRemotePort = new QLineEdit(temphb);
369 mRemotePortAB = new QLineEdit(temphb); 369 mRemotePortAB = new QLineEdit(temphb);
370 mRemotePortPWM = new QLineEdit(temphb); 370 mRemotePortPWM = new QLineEdit(temphb);
371 371
372 lab = new QLabel( i18n("Local/remote Resource sync partners"), piWidget); 372 lab = new QLabel( i18n("Local/remote Resource sync partners (Leave empty to not sync)"), piWidget);
373 mTableBox = new QHBox( piWidget ); 373 mTableBox = new QHBox( piWidget );
374 mResTableKopi = new QTable( 1, 1, mTableBox ); 374 mResTableKopi = new QTable( 1, 1, mTableBox );
375 mResTableKapi = new QTable( 1, 1, mTableBox ); 375 mResTableKapi = new QTable( 1, 1, mTableBox );
376 mResTablePwmpi = new QTable( 1, 1, mTableBox ); 376 mResTablePwmpi = new QTable( 1, 1, mTableBox );
377 mResTableKopi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 377 mResTableKopi->horizontalHeader()->setLabel( 0, i18n("Remote") );
378 mResTableKapi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 378 mResTableKapi->horizontalHeader()->setLabel( 0, i18n("Remote") );
379 mResTablePwmpi->horizontalHeader()->setLabel( 0, i18n("Remote") ); 379 mResTablePwmpi->horizontalHeader()->setLabel( 0, i18n("Remote") );
380 mResTableKopi->setLeftMargin( 80 ); 380 mResTableKopi->setLeftMargin( 80 );
381 } 381 }
382 // ****************************************** 382 // ******************************************
383 // Profile kind specific settings END 383 // Profile kind specific settings END
384 384
385} 385}
386 386
387void KSyncPrefsDialog::readResources() 387void KSyncPrefsDialog::readResources()
388{ 388{
389 mResourcesKopi.clear(); 389 mResourcesKopi.clear();
390 mResourcesKapi.clear(); 390 mResourcesKapi.clear();
391 KConfig fc(locateLocal("config","kopicalendarrc")); 391 KConfig fc(locateLocal("config","kopicalendarrc"));
392 fc.setGroup("CC"); 392 fc.setGroup("CC");
393 int numCals = fc.readNumEntry("NumberCalendars",0 ); 393 int numCals = fc.readNumEntry("NumberCalendars",0 );
394 int curCal = 1; 394 int curCal = 1;
395 while ( curCal <= numCals ) { 395 while ( curCal <= numCals ) {
396 QString prefix = "Cal_" +QString::number( curCal ); 396 QString prefix = "Cal_" +QString::number( curCal );
397 QString name = fc.readEntry( prefix+"_Name", "Calendar"); 397 QString name = fc.readEntry( prefix+"_Name", "Calendar");
398 mResourcesKopi.append( name ); 398 mResourcesKopi.append( name );
399 ++curCal; 399 ++curCal;
400 } 400 }
401 mResTableKopi->setNumRows( mResourcesKopi.count() ); 401 mResTableKopi->setNumRows( mResourcesKopi.count() );
402 int i; 402 int i;
403 for ( i = 0;i < mResourcesKopi.count(); ++i ) { 403 for ( i = 0;i < mResourcesKopi.count(); ++i ) {
404 mResTableKopi->verticalHeader ()->setLabel( i, mResourcesKopi[i] ); 404 mResTableKopi->verticalHeader ()->setLabel( i, mResourcesKopi[i] );
405 } 405 }
406} 406}
407void KSyncPrefsDialog::readFilter() 407void KSyncPrefsDialog::readFilter()
408{ 408{
409 mFilterKapi.clear(); 409 mFilterKapi.clear();
410 mFilterKopi.clear(); 410 mFilterKopi.clear();
411 KConfig cfgko(locateLocal("config","korganizerrc")); 411 KConfig cfgko(locateLocal("config","korganizerrc"));
412 KConfig cfgka(locateLocal("config","kaddressbookrc")); 412 KConfig cfgka(locateLocal("config","kaddressbookrc"));
413 cfgko.setGroup("General"); 413 cfgko.setGroup("General");
414 mFilterKopi = cfgko.readListEntry("CalendarFilters"); 414 mFilterKopi = cfgko.readListEntry("CalendarFilters");
415 cfgka.setGroup("Filter"); 415 cfgka.setGroup("Filter");
416 int count = cfgka.readNumEntry( "Count", 0 ); 416 int count = cfgka.readNumEntry( "Count", 0 );
417 for ( int i = 0; i < count; i++ ) { 417 for ( int i = 0; i < count; i++ ) {
418 cfgka.setGroup("Filter_"+QString::number( i ) ); 418 cfgka.setGroup("Filter_"+QString::number( i ) );
419 mFilterKapi.append( cfgka.readEntry("Name", "internal error") ); 419 mFilterKapi.append( cfgka.readEntry("Name", "internal error") );
420 } 420 }
421 mFilterOutCal->clear(); 421 mFilterOutCal->clear();
422 mFilterInCal->clear(); 422 mFilterInCal->clear();
423 mFilterOutAB->clear(); 423 mFilterOutAB->clear();
424 mFilterInAB->clear(); 424 mFilterInAB->clear();
425 QStringList temp = mFilterKopi; 425 QStringList temp = mFilterKopi;
426 temp.prepend(i18n("No Filter") ); 426 temp.prepend(i18n("No Filter") );
427 mFilterOutCal->insertStringList( temp ); 427 mFilterOutCal->insertStringList( temp );
428 mFilterInCal->insertStringList( temp ); 428 mFilterInCal->insertStringList( temp );
429 temp = mFilterKapi; 429 temp = mFilterKapi;
430 temp.prepend(i18n("No Filter") ); 430 temp.prepend(i18n("No Filter") );
431 mFilterOutAB->insertStringList( temp ); 431 mFilterOutAB->insertStringList( temp );
432 mFilterInAB->insertStringList( temp ); 432 mFilterInAB->insertStringList( temp );
433} 433}
434 434
435void KSyncPrefsDialog::slotOK() 435void KSyncPrefsDialog::slotOK()
436{ 436{
437 if ( mMyMachineName->text() == "undefined" ) { 437 if ( mMyMachineName->text() == "undefined" ) {
438 KMessageBox::error(this,i18n("Local device name undefined!\nPlease define device name!"),i18n("KO/Pi config error")); 438 KMessageBox::error(this,i18n("Local device name undefined!\nPlease define device name!"),i18n("KO/Pi config error"));
439 return; 439 return;
440 } 440 }
441 int i; 441 int i;
442 for (i = 0; i < mSyncProfileNames.count(); ++ i) { 442 for (i = 0; i < mSyncProfileNames.count(); ++ i) {
443 if ( mSyncProfileNames.contains( mSyncProfileNames[i]) > 1 ) { 443 if ( mSyncProfileNames.contains( mSyncProfileNames[i]) > 1 ) {
444 KMessageBox::error(this,i18n("Multiple profiles with same name!\nPlease use unique profile names!"),i18n("KO/Pi config error")); 444 KMessageBox::error(this,i18n("Multiple profiles with same name!\nPlease use unique profile names!"),i18n("KO/Pi config error"));
445 return; 445 return;
446 } 446 }
447 } 447 }
448 usrWriteConfig(); 448 usrWriteConfig();
449 QDialog::accept(); 449 QDialog::accept();
450} 450}
451void KSyncPrefsDialog::accept() 451void KSyncPrefsDialog::accept()
452{ 452{
453 slotOK(); 453 slotOK();
454} 454}
455void KSyncPrefsDialog::chooseFile() 455void KSyncPrefsDialog::chooseFile()
456{ 456{
457 QString fn = QDir::homeDirPath(); 457 QString fn = QDir::homeDirPath();
458 458
459 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 459 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
460 if ( fn == "" ) 460 if ( fn == "" )
461 return; 461 return;
462 mRemoteFile->setText( fn ); 462 mRemoteFile->setText( fn );
463} 463}
464 464
465void KSyncPrefsDialog::chooseFileAB() 465void KSyncPrefsDialog::chooseFileAB()
466{ 466{
467 QString fn = QDir::homeDirPath(); 467 QString fn = QDir::homeDirPath();
468 468
469 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.vcf)"), this ); 469 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.vcf)"), this );
470 if ( fn == "" ) 470 if ( fn == "" )
471 return; 471 return;
472 mRemoteFileAB->setText( fn ); 472 mRemoteFileAB->setText( fn );
473} 473}
474 474
475void KSyncPrefsDialog::chooseFilePWM() 475void KSyncPrefsDialog::chooseFilePWM()
476{ 476{
477 QString fn = QDir::homeDirPath(); 477 QString fn = QDir::homeDirPath();
478 478
479 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.pwm)"), this ); 479 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.pwm)"), this );
480 if ( fn == "" ) 480 if ( fn == "" )
481 return; 481 return;
482 mRemoteFilePWM->setText( fn ); 482 mRemoteFilePWM->setText( fn );
483} 483}
484 484
485void KSyncPrefsDialog::textChanged( const QString & s ) 485void KSyncPrefsDialog::textChanged( const QString & s )
486{ 486{
487 if ( mProfileBox->count() == 0 ) 487 if ( mProfileBox->count() == 0 )
488 return; 488 return;
489 if ( currentSelection < 3 ) { 489 if ( currentSelection < 3 ) {
490 //KMessageBox::error(this,i18n("This profil name\ncannot be edited!\n"),i18n("KO/Pi config error")); 490 //KMessageBox::error(this,i18n("This profil name\ncannot be edited!\n"),i18n("KO/Pi config error"));
491 mProfileBox->blockSignals( true ); 491 mProfileBox->blockSignals( true );
492 mProfileBox->setCurrentItem(mProfileBox-> currentItem ()); 492 mProfileBox->setCurrentItem(mProfileBox-> currentItem ());
493 mProfileBox->blockSignals( false ); 493 mProfileBox->blockSignals( false );
494 return; 494 return;
495 } 495 }
496 //qDebug("cur i %d ",mProfileBox-> currentItem () ); 496 //qDebug("cur i %d ",mProfileBox-> currentItem () );
497 mProfileBox->changeItem ( s, mProfileBox-> currentItem () ) ; 497 mProfileBox->changeItem ( s, mProfileBox-> currentItem () ) ;
498 KSyncProfile* prof = mSyncProfiles.at(mProfileBox-> currentItem ()) ; 498 KSyncProfile* prof = mSyncProfiles.at(mProfileBox-> currentItem ()) ;
499 prof->setName( s ); 499 prof->setName( s );
500 mSyncProfileNames[mProfileBox-> currentItem ()] = s; 500 mSyncProfileNames[mProfileBox-> currentItem ()] = s;
501} 501}
502void KSyncPrefsDialog::profileChanged( int item ) 502void KSyncPrefsDialog::profileChanged( int item )
503{ 503{
504 //qDebug("KSyncPrefsDialog::profileChanged before %d, count %d ", item, mProfileBox->count() ); 504 //qDebug("KSyncPrefsDialog::profileChanged before %d, count %d ", item, mProfileBox->count() );
505 KSyncProfile* prof; 505 KSyncProfile* prof;
506 saveProfile(); 506 saveProfile();
507 readFilter(); 507 readFilter();
508 readResources(); 508 readResources();
509 currentSelection = item; 509 currentSelection = item;
510 prof = mSyncProfiles.at(item) ; 510 prof = mSyncProfiles.at(item) ;
511 511
512 mRemotePw->setText(prof->getRemotePw()); 512 mRemotePw->setText(prof->getRemotePw());
513 mRemoteIP->setText(prof->getRemoteIP()); 513 mRemoteIP->setText(prof->getRemoteIP());
514 mRemotePort->setText(prof->getRemotePort()); 514 mRemotePort->setText(prof->getRemotePort());
515 515
516 mRemotePwAB->setText(prof->getRemotePwAB()); 516 mRemotePwAB->setText(prof->getRemotePwAB());
517 mRemoteIPAB->setText(prof->getRemoteIPAB()); 517 mRemoteIPAB->setText(prof->getRemoteIPAB());
518 mRemotePortAB->setText(prof->getRemotePortAB()); 518 mRemotePortAB->setText(prof->getRemotePortAB());
519 519
520 mRemotePwPWM->setText(prof->getRemotePwPWM()); 520 mRemotePwPWM->setText(prof->getRemotePwPWM());
521 mRemoteIPPWM->setText(prof->getRemoteIPPWM()); 521 mRemoteIPPWM->setText(prof->getRemoteIPPWM());
522 mRemotePortPWM->setText(prof->getRemotePortPWM()); 522 mRemotePortPWM->setText(prof->getRemotePortPWM());
523 523
524 mRemotePrecommand->setText(prof->getPreSyncCommand()); 524 mRemotePrecommand->setText(prof->getPreSyncCommand());
525 mRemotePostcommand->setText(prof->getPostSyncCommand()); 525 mRemotePostcommand->setText(prof->getPostSyncCommand());
526 mLocalTempFile->setText(prof->getLocalTempFile()); 526 mLocalTempFile->setText(prof->getLocalTempFile());
527 mRemoteFile->setText(prof->getRemoteFileName()) ; 527 mRemoteFile->setText(prof->getRemoteFileName()) ;
528 528
529 mRemotePrecommandAB->setText(prof->getPreSyncCommandAB()); 529 mRemotePrecommandAB->setText(prof->getPreSyncCommandAB());
530 mRemotePostcommandAB->setText(prof->getPostSyncCommandAB()); 530 mRemotePostcommandAB->setText(prof->getPostSyncCommandAB());
531 mLocalTempFileAB->setText(prof->getLocalTempFileAB()); 531 mLocalTempFileAB->setText(prof->getLocalTempFileAB());
532 mRemoteFileAB->setText(prof->getRemoteFileNameAB()) ; 532 mRemoteFileAB->setText(prof->getRemoteFileNameAB()) ;
533 533
534 mRemotePrecommandPWM->setText(prof->getPreSyncCommandPWM()); 534 mRemotePrecommandPWM->setText(prof->getPreSyncCommandPWM());
535 mRemotePostcommandPWM->setText(prof->getPostSyncCommandPWM()); 535 mRemotePostcommandPWM->setText(prof->getPostSyncCommandPWM());
536 mLocalTempFilePWM->setText(prof->getLocalTempFilePWM()); 536 mLocalTempFilePWM->setText(prof->getLocalTempFilePWM());
537 mRemoteFilePWM->setText(prof->getRemoteFileNamePWM()) ; 537 mRemoteFilePWM->setText(prof->getRemoteFileNamePWM()) ;
538 538
539 if ( mWriteContactToSIM ) 539 if ( mWriteContactToSIM )
540 mWriteContactToSIM->setChecked( prof->getWriteContactToSIM()); 540 mWriteContactToSIM->setChecked( prof->getWriteContactToSIM());
541 mPhoneDevice->setText(prof->getPhoneDevice()); 541 mPhoneDevice->setText(prof->getPhoneDevice());
542 mPhoneConnection->setText(prof->getPhoneConnection()); 542 mPhoneConnection->setText(prof->getPhoneConnection());
543 mPhoneModel->setText(prof->getPhoneModel()); 543 mPhoneModel->setText(prof->getPhoneModel());
544 544
545 mShowSummaryAfterSync->setChecked( prof->getShowSummaryAfterSync()); 545 mShowSummaryAfterSync->setChecked( prof->getShowSummaryAfterSync());
546 mAskForPreferences->setChecked( prof->getAskForPreferences()); 546 mAskForPreferences->setChecked( prof->getAskForPreferences());
547 mWriteBackExisting->setChecked( prof->getWriteBackExisting() ); 547 mWriteBackExisting->setChecked( prof->getWriteBackExisting() );
548 mWriteBackFile->setChecked( prof->getWriteBackFile()); 548 mWriteBackFile->setChecked( prof->getWriteBackFile());
549 mIncludeInRing->setChecked( prof->getIncludeInRingSync() ); 549 mIncludeInRing->setChecked( prof->getIncludeInRingSync() );
550 mIncludeInRingAB->setChecked( prof->getIncludeInRingSyncAB() ); 550 mIncludeInRingAB->setChecked( prof->getIncludeInRingSyncAB() );
551 mIncludeInRingPWM->setChecked( prof->getIncludeInRingSyncPWM() ); 551 mIncludeInRingPWM->setChecked( prof->getIncludeInRingSyncPWM() );
552 mWriteBackFuture->setChecked( prof->getWriteBackFuture()); 552 mWriteBackFuture->setChecked( prof->getWriteBackFuture());
553 mWriteBackFutureWeeks->setValue( prof->getWriteBackFutureWeeks() ); 553 mWriteBackFutureWeeks->setValue( prof->getWriteBackFutureWeeks() );
554 mWriteBackPastWeeks->setValue( prof->getWriteBackPastWeeks() ); 554 mWriteBackPastWeeks->setValue( prof->getWriteBackPastWeeks() );
555 555
556 mFilterInCal->setCurrentItem( mFilterKopi.findIndex(prof->getFilterInCal () ) + 1 ); 556 mFilterInCal->setCurrentItem( mFilterKopi.findIndex(prof->getFilterInCal () ) + 1 );
557 mFilterOutCal->setCurrentItem( mFilterKopi.findIndex(prof->getFilterOutCal () ) + 1 ); 557 mFilterOutCal->setCurrentItem( mFilterKopi.findIndex(prof->getFilterOutCal () ) + 1 );
558 mFilterInAB->setCurrentItem( mFilterKapi.findIndex(prof->getFilterInAB () ) + 1 ); 558 mFilterInAB->setCurrentItem( mFilterKapi.findIndex(prof->getFilterInAB () ) + 1 );
559 mFilterOutAB->setCurrentItem( mFilterKapi.findIndex(prof->getFilterOutAB () ) + 1 ); 559 mFilterOutAB->setCurrentItem( mFilterKapi.findIndex(prof->getFilterOutAB () ) + 1 );
560 560
561 switch ( prof->getSyncPrefs() ) { 561 switch ( prof->getSyncPrefs() ) {
562 case 0: 562 case 0:
563 loc->setChecked( true); 563 loc->setChecked( true);
564 break; 564 break;
565 case 1: 565 case 1:
566 rem->setChecked( true ); 566 rem->setChecked( true );
567 break; 567 break;
568 case 2: 568 case 2:
569 newest->setChecked( true); 569 newest->setChecked( true);
570 break; 570 break;
571 case 3: 571 case 3:
572 ask->setChecked( true); 572 ask->setChecked( true);
573 break; 573 break;
574 case 4: 574 case 4:
575 f_loc->setChecked( true); 575 f_loc->setChecked( true);
576 break; 576 break;
577 case 5: 577 case 5:
578 f_rem->setChecked( true); 578 f_rem->setChecked( true);
579 break; 579 break;
580 case 6: 580 case 6:
581 //both->setChecked( true); 581 //both->setChecked( true);
582 break; 582 break;
583 default: 583 default:
584 break; 584 break;
585 } 585 }
586 mIsLocal->setChecked(prof->getIsLocalFileSync()) ; 586 mIsLocal->setChecked(prof->getIsLocalFileSync()) ;
587 mIsPhone->setChecked(prof->getIsPhoneSync()) ; 587 mIsPhone->setChecked(prof->getIsPhoneSync()) ;
588 mIsPi->setChecked(prof->getIsPiSync()) ; 588 mIsPi->setChecked(prof->getIsPiSync()) ;
589 mIsPiSpecific->setChecked(prof->getIsPiSyncSpec()) ; 589 mIsPiSpecific->setChecked(prof->getIsPiSyncSpec()) ;
590 mIsKapiFileL->setChecked(prof->getIsKapiFile()) ; 590 mIsKapiFileL->setChecked(prof->getIsKapiFile()) ;
591 mIsKapiFileR->setChecked(prof->getIsKapiFile()) ; 591 mIsKapiFileR->setChecked(prof->getIsKapiFile()) ;
592 592
593 593
594 QStringList res = QStringList::split( ":",prof->getResSpecKopi(), true ); 594 QStringList res = QStringList::split( ":",prof->getResSpecKopi(), true );
595 int add = res.count()/2; 595 int add = res.count()/2;
596 int i; 596 int i;
597 for ( i = 0;i < add ; ++i ) { 597 for ( i = 0;i < add ; ++i ) {
598 mResTableKopi->setText( i, 0, res[i+add] ); 598 mResTableKopi->setText( i, 0, res[i+add] );
599 } 599 }
600 res = QStringList::split( ":",prof->getResSpecKapi(), true); 600 res = QStringList::split( ":",prof->getResSpecKapi(), true);
601 add = res.count()/2; 601 add = res.count()/2;
602 for ( i = 0;i < add; ++i ) { 602 for ( i = 0;i < add; ++i ) {
603 mResTableKapi->setText( i, 0, res[i+add] ); 603 mResTableKapi->setText( i, 0, res[i+add] );
604 } 604 }
605 mIsNotLocal->setChecked(!prof->getIsLocalFileSync() && !prof->getIsPhoneSync() &&!prof->getIsPiSync() &&!prof->getIsPiSyncSpec()); 605 mIsNotLocal->setChecked(!prof->getIsLocalFileSync() && !prof->getIsPhoneSync() &&!prof->getIsPiSync() &&!prof->getIsPiSyncSpec());
606 proGr->setEnabled( item > 2 ); 606 proGr->setEnabled( item > 2 );
607 if ( item < 3 ) { 607 if ( item < 3 ) {
608 localFileWidget->hide(); 608 localFileWidget->hide();
609 remoteFileWidget->hide(); 609 remoteFileWidget->hide();
610 phoneWidget->hide(); 610 phoneWidget->hide();
611 piWidget->hide(); 611 piWidget->hide();
612 612
613 } else 613 } else
614 kindChanged( prof->getIsLocalFileSync() ); 614 kindChanged( prof->getIsLocalFileSync() );
615} 615}
616 616
617void KSyncPrefsDialog::fillSSH() 617void KSyncPrefsDialog::fillSSH()
618{ 618{
619 mRemotePrecommand->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/korganizer/mycalendar.ics /tmp/mycalendar.ics" ); 619 mRemotePrecommand->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/korganizer/mycalendar.ics /tmp/mycalendar.ics" );
620 mLocalTempFile->setText("/tmp/mycalendar.ics" ); 620 mLocalTempFile->setText("/tmp/mycalendar.ics" );
621 mRemotePostcommand->setText("scp /tmp/mycalendar.ics zaurus@192.168.0.65:/home/zaurus/kdepim/apps/korganizer/mycalendar.ics" ); 621 mRemotePostcommand->setText("scp /tmp/mycalendar.ics zaurus@192.168.0.65:/home/zaurus/kdepim/apps/korganizer/mycalendar.ics" );
622 mRemotePrecommandAB->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/kabc/std.vcf /tmp/std.vcf" ); 622 mRemotePrecommandAB->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/kabc/std.vcf /tmp/std.vcf" );
623 mLocalTempFileAB->setText("/tmp/std.vcf" ); 623 mLocalTempFileAB->setText("/tmp/std.vcf" );
624 mRemotePostcommandAB->setText("scp /tmp/std.vcf zaurus@192.168.0.65:/home/zaurus/kdepim/apps/kabc/std.vcf" ); 624 mRemotePostcommandAB->setText("scp /tmp/std.vcf zaurus@192.168.0.65:/home/zaurus/kdepim/apps/kabc/std.vcf" );
625 mRemotePrecommandPWM->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/pwmanager/passwords.pwm /tmp/passwords.pwm" ); 625 mRemotePrecommandPWM->setText("scp zaurus@192.168.0.65:/home/zaurus/kdepim/apps/pwmanager/passwords.pwm /tmp/passwords.pwm" );
626 mLocalTempFilePWM->setText("/tmp/passwords.pwm" ); 626 mLocalTempFilePWM->setText("/tmp/passwords.pwm" );
627 mRemotePostcommandPWM->setText("scp /tmp/passwords.pwm zaurus@192.168.0.65:/home/zaurus/kdepim/apps/pwmanager/pwmanager.pwm" ); 627 mRemotePostcommandPWM->setText("scp /tmp/passwords.pwm zaurus@192.168.0.65:/home/zaurus/kdepim/apps/pwmanager/pwmanager.pwm" );
628} 628}
629void KSyncPrefsDialog::fillFTP() 629void KSyncPrefsDialog::fillFTP()
630{ 630{
631 mRemotePrecommand->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/korganizer/mycalendar.ics" ); 631 mRemotePrecommand->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/korganizer/mycalendar.ics" );
632 mLocalTempFile->setText("/tmp/mycalendar.ics" ); 632 mLocalTempFile->setText("/tmp/mycalendar.ics" );
633 mRemotePostcommand->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/korganizer/mycalendar.ics /tmp/mycalendar.ics" ); 633 mRemotePostcommand->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/korganizer/mycalendar.ics /tmp/mycalendar.ics" );
634 mRemotePrecommandAB->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/kabc/std.vcf" ); 634 mRemotePrecommandAB->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/kabc/std.vcf" );
635 mLocalTempFileAB->setText("/tmp/std.vcf" ); 635 mLocalTempFileAB->setText("/tmp/std.vcf" );
636 mRemotePostcommandAB->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/kabc/std.vcf /tmp/std.vcf" ); 636 mRemotePostcommandAB->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/kabc/std.vcf /tmp/std.vcf" );
637 637
638 mRemotePrecommandPWM->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/pwmanager/passwords.pwm" ); 638 mRemotePrecommandPWM->setText("cd /tmp;ftp ftp://zaurus:a@192.168.0.65/kdepim/apps/pwmanager/passwords.pwm" );
639 mLocalTempFilePWM->setText("/tmp/passwords.pwm" ); 639 mLocalTempFilePWM->setText("/tmp/passwords.pwm" );
640 mRemotePostcommandPWM->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/pwmanager/passwords.pwm /tmp/passwords.pwm" ); 640 mRemotePostcommandPWM->setText("ftp -u ftp://zaurus:a@192.168.0.65/kdepim/apps/pwmanager/passwords.pwm /tmp/passwords.pwm" );
641 641
642} 642}
643void KSyncPrefsDialog::kindChanged( bool b ) 643void KSyncPrefsDialog::kindChanged( bool b )
644{ 644{
645 645
646 if ( mIsLocal->isChecked () ) { 646 if ( mIsLocal->isChecked () ) {
647 mIsKapiFileL->setChecked( mIsKapiFileR->isChecked() ); 647 mIsKapiFileL->setChecked( mIsKapiFileR->isChecked() );
648 } else { 648 } else {
649 mIsKapiFileR->setChecked( mIsKapiFileL->isChecked() ); 649 mIsKapiFileR->setChecked( mIsKapiFileL->isChecked() );
650 } 650 }
651 651
652 if ( mIsLocal->isChecked () ) 652 if ( mIsLocal->isChecked () )
653 localFileWidget->show(); 653 localFileWidget->show();
654 else 654 else
655 localFileWidget->hide(); 655 localFileWidget->hide();
656 656
657 if ( mIsNotLocal->isChecked () ) 657 if ( mIsNotLocal->isChecked () )
658 remoteFileWidget->show(); 658 remoteFileWidget->show();
659 else 659 else
660 remoteFileWidget->hide(); 660 remoteFileWidget->hide();
661 661
662 if ( mIsPhone->isChecked () ) { 662 if ( mIsPhone->isChecked () ) {
663 phoneWidget->show(); 663 phoneWidget->show();
664 } 664 }
665 else { 665 else {
666 phoneWidget->hide(); 666 phoneWidget->hide();
667 } 667 }
668 668
669 if ( mIsPi->isChecked () || mIsPiSpecific->isChecked () ) { 669 if ( mIsPi->isChecked () || mIsPiSpecific->isChecked () ) {
670 piWidget->show(); 670 piWidget->show();
671 if (mIsPiSpecific->isChecked () ) { 671 if (mIsPiSpecific->isChecked () ) {
672 mTableBox->show(); 672 mTableBox->show();
673 } 673 }
674 else { 674 else {
675 mTableBox->hide(); 675 mTableBox->hide();
676 } 676 }
677 } 677 }
678 else { 678 else {
679 piWidget->hide(); 679 piWidget->hide();
680 } 680 }
681 681
682 682
683} 683}
684void KSyncPrefsDialog::deleteProfile() 684void KSyncPrefsDialog::deleteProfile()
685{ 685{
686 //qDebug("KSyncPrefsDialog::deleteProfile() "); 686 //qDebug("KSyncPrefsDialog::deleteProfile() ");
687 if ( currentSelection >= 0 ) { 687 if ( currentSelection >= 0 ) {
688 if ( currentSelection < 3 ) { 688 if ( currentSelection < 3 ) {
689 KMessageBox::error(this,i18n("This profil cannot be deleted!\n"),i18n("KO/Pi config error")); 689 KMessageBox::error(this,i18n("This profil cannot be deleted!\n"),i18n("KO/Pi config error"));
690 return; 690 return;
691 } 691 }
692 KSyncProfile* temp = mSyncProfiles.at(currentSelection); 692 KSyncProfile* temp = mSyncProfiles.at(currentSelection);
693 mSyncProfiles.remove( temp ); 693 mSyncProfiles.remove( temp );
694 mSyncProfileNames.remove( mSyncProfileNames.at( currentSelection )); 694 mSyncProfileNames.remove( mSyncProfileNames.at( currentSelection ));
695 insertProfiles(); 695 insertProfiles();
696 } 696 }
697} 697}
698 698
699void KSyncPrefsDialog::saveProfile() 699void KSyncPrefsDialog::saveProfile()
700{ 700{
701 KSyncProfile* prof; 701 KSyncProfile* prof;
702 if ( currentSelection >= 0 ) { 702 if ( currentSelection >= 0 ) {
703 prof = mSyncProfiles.at(currentSelection) ; 703 prof = mSyncProfiles.at(currentSelection) ;
704 704
705 prof->setRemotePw( mRemotePw->text()); 705 prof->setRemotePw( mRemotePw->text());
706 prof->setRemoteIP( mRemoteIP->text()); 706 prof->setRemoteIP( mRemoteIP->text());
707 prof->setRemotePort( mRemotePort->text()); 707 prof->setRemotePort( mRemotePort->text());
708 708
709 prof->setRemotePwAB( mRemotePwAB->text()); 709 prof->setRemotePwAB( mRemotePwAB->text());
710 prof->setRemoteIPAB( mRemoteIPAB->text()); 710 prof->setRemoteIPAB( mRemoteIPAB->text());
711 prof->setRemotePortAB( mRemotePortAB->text()); 711 prof->setRemotePortAB( mRemotePortAB->text());
712 712
713 prof->setRemotePwPWM( mRemotePwPWM->text()); 713 prof->setRemotePwPWM( mRemotePwPWM->text());
714 prof->setRemoteIPPWM( mRemoteIPPWM->text()); 714 prof->setRemoteIPPWM( mRemoteIPPWM->text());
715 prof->setRemotePortPWM( mRemotePortPWM->text()); 715 prof->setRemotePortPWM( mRemotePortPWM->text());
716 716
717 prof->setPreSyncCommand( mRemotePrecommand->text()); 717 prof->setPreSyncCommand( mRemotePrecommand->text());
718 prof->setPostSyncCommand( mRemotePostcommand->text() ); 718 prof->setPostSyncCommand( mRemotePostcommand->text() );
719 prof->setLocalTempFile( mLocalTempFile->text()); 719 prof->setLocalTempFile( mLocalTempFile->text());
720 prof->setRemoteFileName( mRemoteFile->text() ); 720 prof->setRemoteFileName( mRemoteFile->text() );
721 prof->setPreSyncCommandAB( mRemotePrecommandAB->text()); 721 prof->setPreSyncCommandAB( mRemotePrecommandAB->text());
722 prof->setPostSyncCommandAB( mRemotePostcommandAB->text() ); 722 prof->setPostSyncCommandAB( mRemotePostcommandAB->text() );
723 prof->setLocalTempFileAB( mLocalTempFileAB->text()); 723 prof->setLocalTempFileAB( mLocalTempFileAB->text());
724 prof->setRemoteFileNameAB( mRemoteFileAB->text() ); 724 prof->setRemoteFileNameAB( mRemoteFileAB->text() );
725 prof->setPreSyncCommandPWM( mRemotePrecommandPWM->text()); 725 prof->setPreSyncCommandPWM( mRemotePrecommandPWM->text());
726 prof->setPostSyncCommandPWM( mRemotePostcommandPWM->text() ); 726 prof->setPostSyncCommandPWM( mRemotePostcommandPWM->text() );
727 prof->setLocalTempFilePWM( mLocalTempFilePWM->text()); 727 prof->setLocalTempFilePWM( mLocalTempFilePWM->text());
728 prof->setRemoteFileNamePWM( mRemoteFilePWM->text() ); 728 prof->setRemoteFileNamePWM( mRemoteFilePWM->text() );
729 prof->setShowSummaryAfterSync( mShowSummaryAfterSync->isChecked() ); 729 prof->setShowSummaryAfterSync( mShowSummaryAfterSync->isChecked() );
730 prof->setAskForPreferences( mAskForPreferences->isChecked()); 730 prof->setAskForPreferences( mAskForPreferences->isChecked());
731 prof->setWriteBackExisting(mWriteBackExisting->isChecked() ); 731 prof->setWriteBackExisting(mWriteBackExisting->isChecked() );
732 prof->setWriteBackFile( mWriteBackFile->isChecked()); 732 prof->setWriteBackFile( mWriteBackFile->isChecked());
733 prof->setIncludeInRingSync( mIncludeInRing->isChecked() ); 733 prof->setIncludeInRingSync( mIncludeInRing->isChecked() );
734 prof->setIncludeInRingSyncAB( mIncludeInRingAB->isChecked() ); 734 prof->setIncludeInRingSyncAB( mIncludeInRingAB->isChecked() );
735 prof->setIncludeInRingSyncPWM( mIncludeInRingPWM->isChecked() ); 735 prof->setIncludeInRingSyncPWM( mIncludeInRingPWM->isChecked() );
736 int syncprefs = rem->isChecked()*1+newest->isChecked()*2+ ask->isChecked()*3+ f_loc->isChecked()*4+ f_rem->isChecked()*5 ;//+ both->isChecked()*6 ; 736 int syncprefs = rem->isChecked()*1+newest->isChecked()*2+ ask->isChecked()*3+ f_loc->isChecked()*4+ f_rem->isChecked()*5 ;//+ both->isChecked()*6 ;
737 prof->setSyncPrefs( syncprefs); 737 prof->setSyncPrefs( syncprefs);
738 prof->setIsLocalFileSync( mIsLocal->isChecked() ); 738 prof->setIsLocalFileSync( mIsLocal->isChecked() );
739 prof->setIsPhoneSync( mIsPhone->isChecked() ); 739 prof->setIsPhoneSync( mIsPhone->isChecked() );
740 prof->setIsPiSync( mIsPi->isChecked() ); 740 prof->setIsPiSync( mIsPi->isChecked() );
741 prof->setIsPiSyncSpec( mIsPiSpecific->isChecked() ); 741 prof->setIsPiSyncSpec( mIsPiSpecific->isChecked() );
742 prof->setIsKapiFile( mIsKapiFileL->isChecked() ); 742 prof->setIsKapiFile( mIsKapiFileL->isChecked() );
743 prof->setWriteBackFuture(mWriteBackFuture->isChecked()); 743 prof->setWriteBackFuture(mWriteBackFuture->isChecked());
744 prof->setWriteBackFutureWeeks(mWriteBackFutureWeeks->value()); 744 prof->setWriteBackFutureWeeks(mWriteBackFutureWeeks->value());
745 prof->setWriteBackPastWeeks(mWriteBackPastWeeks->value()); 745 prof->setWriteBackPastWeeks(mWriteBackPastWeeks->value());
746 if ( mWriteContactToSIM ) 746 if ( mWriteContactToSIM )
747 prof->setWriteContactToSIM(mWriteContactToSIM->isChecked()); 747 prof->setWriteContactToSIM(mWriteContactToSIM->isChecked());
748 prof->setPhoneDevice( mPhoneDevice->text() ); 748 prof->setPhoneDevice( mPhoneDevice->text() );
749 prof->setPhoneConnection( mPhoneConnection->text() ); 749 prof->setPhoneConnection( mPhoneConnection->text() );
750 prof->setPhoneModel( mPhoneModel->text() ); 750 prof->setPhoneModel( mPhoneModel->text() );
751 prof->setFilterInCal ( mFilterInCal->currentText ()); 751 prof->setFilterInCal ( mFilterInCal->currentText ());
752 prof->setFilterOutCal ( mFilterOutCal ->currentText ()); 752 prof->setFilterOutCal ( mFilterOutCal ->currentText ());
753 prof->setFilterInAB ( mFilterInAB ->currentText ()); 753 prof->setFilterInAB ( mFilterInAB ->currentText ());
754 prof->setFilterOutAB ( mFilterOutAB ->currentText ()); 754 prof->setFilterOutAB ( mFilterOutAB ->currentText ());
755 if ( mIsPiSpecific->isChecked() ) { 755 if ( mIsPiSpecific->isChecked() ) {
756 756
757 QStringList res = mResourcesKopi; 757 QStringList res = mResourcesKopi;
758 int i; 758 int i;
759 for ( i = 0;i < mResourcesKopi.count(); ++i ) { 759 for ( i = 0;i < mResourcesKopi.count(); ++i ) {
760 res.append( mResTableKopi->text( i, 0 )); 760 res.append( mResTableKopi->text( i, 0 ));
761 } 761 }
762 prof->setResSpecKopi( res.join(":")); 762 prof->setResSpecKopi( res.join(":"));
763 } 763 }
764 } 764 }
765} 765}
766 766
767void KSyncPrefsDialog::insertProfiles() 767void KSyncPrefsDialog::insertProfiles()
768{ 768{
769 int curItem = mProfileBox->currentItem(); 769 int curItem = mProfileBox->currentItem();
770 mProfileBox->blockSignals( true ); 770 mProfileBox->blockSignals( true );
771 mProfileBox->clear(); 771 mProfileBox->clear();
772 mProfileBox->insertStringList (mSyncProfileNames ); 772 mProfileBox->insertStringList (mSyncProfileNames );
773 int item = mSyncProfileNames.count() -1; 773 int item = mSyncProfileNames.count() -1;
774 if ( curItem >= 0 && mSyncProfileNames.count() > 0 && curItem < mSyncProfileNames.count() ) 774 if ( curItem >= 0 && mSyncProfileNames.count() > 0 && curItem < mSyncProfileNames.count() )
775 mProfileBox->setCurrentItem( curItem ); 775 mProfileBox->setCurrentItem( curItem );
776 else if ( item >= 0 ) { 776 else if ( item >= 0 ) {
777 mProfileBox->setCurrentItem( item ); 777 mProfileBox->setCurrentItem( item );
778 } 778 }
779 currentSelection = -1; 779 currentSelection = -1;
780 if ( mSyncProfileNames.count() > 0 ) { 780 if ( mSyncProfileNames.count() > 0 ) {
781 //qDebug(" profileChanged( mProfileBox->currentItem() "); 781 //qDebug(" profileChanged( mProfileBox->currentItem() ");
782 profileChanged( mProfileBox->currentItem() ); 782 profileChanged( mProfileBox->currentItem() );
783 currentSelection = mProfileBox->currentItem(); 783 currentSelection = mProfileBox->currentItem();
784 } 784 }
785 mProfileBox->blockSignals( false ); 785 mProfileBox->blockSignals( false );
786} 786}
787 787
788void KSyncPrefsDialog::addProfile ( KSyncProfile* temp ) 788void KSyncPrefsDialog::addProfile ( KSyncProfile* temp )
789{ 789{
790 saveProfile(); 790 saveProfile();
791 mSyncProfiles.append( temp ); 791 mSyncProfiles.append( temp );
792 mSyncProfileNames << temp->getName(); 792 mSyncProfileNames << temp->getName();
793 insertProfiles(); 793 insertProfiles();
794 int last = mProfileBox->count() -1; 794 int last = mProfileBox->count() -1;
795 mProfileBox->blockSignals( true ); 795 mProfileBox->blockSignals( true );
796 mProfileBox->setCurrentItem( last ); 796 mProfileBox->setCurrentItem( last );
797 mProfileBox->blockSignals( false ); 797 mProfileBox->blockSignals( false );
798 profileChanged(last); 798 profileChanged(last);
799} 799}
800void KSyncPrefsDialog::newProfile() 800void KSyncPrefsDialog::newProfile()
801{ 801{
802 addProfile ( new KSyncProfile () ); 802 addProfile ( new KSyncProfile () );
803} 803}
804 804
805void KSyncPrefsDialog::cloneProfile() 805void KSyncPrefsDialog::cloneProfile()
806{ 806{
807 if ( currentSelection >= 0 ) 807 if ( currentSelection >= 0 )
808 addProfile (mSyncProfiles.at(currentSelection)->clone()) ; 808 addProfile (mSyncProfiles.at(currentSelection)->clone()) ;
809 else 809 else
810 newProfile(); 810 newProfile();
811} 811}
812 812
813void KSyncPrefsDialog::setLocalMachineName ( const QString& name ) 813void KSyncPrefsDialog::setLocalMachineName ( const QString& name )
814{ 814{
815 mMyMachineName->setText( name ); 815 mMyMachineName->setText( name );
816 816
817} 817}
818QString KSyncPrefsDialog::getLocalMachineName ( ) 818QString KSyncPrefsDialog::getLocalMachineName ( )
819{ 819{
820 return mMyMachineName->text(); 820 return mMyMachineName->text();
821} 821}
822 822
823QStringList KSyncPrefsDialog::getSyncProfileNames() 823QStringList KSyncPrefsDialog::getSyncProfileNames()
824{ 824{
825 return mSyncProfileNames; 825 return mSyncProfileNames;
826} 826}
827void KSyncPrefsDialog::usrReadConfig() 827void KSyncPrefsDialog::usrReadConfig()
828{ 828{
829 //KConfig *config = KOGlobals::config(); 829 //KConfig *config = KOGlobals::config();
830 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 830 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
831 config.setGroup("General"); 831 config.setGroup("General");
832 mSyncProfileNames =config.readListEntry("SyncProfileNames"); 832 mSyncProfileNames =config.readListEntry("SyncProfileNames");
833 mMyMachineName->setText(config.readEntry("LocalMachineName","undefined")); 833 mMyMachineName->setText(config.readEntry("LocalMachineName","undefined"));
834 int i; 834 int i;
835 KSyncProfile* temp ; 835 KSyncProfile* temp ;
836 mSyncProfiles.clear(); 836 mSyncProfiles.clear();
837 for ( i = 0; i < mSyncProfileNames.count();++i ) { 837 for ( i = 0; i < mSyncProfileNames.count();++i ) {
838 temp = new KSyncProfile (); 838 temp = new KSyncProfile ();
839 temp->setName( mSyncProfileNames[i] ); 839 temp->setName( mSyncProfileNames[i] );
840 temp->readConfig( &config ); 840 temp->readConfig( &config );
841 mSyncProfiles.append( temp ); 841 mSyncProfiles.append( temp );
842 } 842 }
843 insertProfiles(); 843 insertProfiles();
844 //mMyMachineName->setText(KOPrefs::instance()->mLocalMachineName ); 844 //mMyMachineName->setText(KOPrefs::instance()->mLocalMachineName );
845} 845}
846 846
847 847
848void KSyncPrefsDialog::usrWriteConfig() 848void KSyncPrefsDialog::usrWriteConfig()
849{ 849{
850 saveProfile(); 850 saveProfile();
851 if ( currentSelection >= 0 ) 851 if ( currentSelection >= 0 )
852 profileChanged(currentSelection); 852 profileChanged(currentSelection);
853 //KConfig *config = KOGlobals::config(); 853 //KConfig *config = KOGlobals::config();
854 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 854 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
855 KSyncProfile* prof = mSyncProfiles.first(); 855 KSyncProfile* prof = mSyncProfiles.first();
856 QStringList externalSyncProfileNames; 856 QStringList externalSyncProfileNames;
857 externalSyncProfileNames.append("Sharp_DTM");; 857 externalSyncProfileNames.append("Sharp_DTM");;
858 while ( prof ) { 858 while ( prof ) {
859 prof->writeConfig(&config); 859 prof->writeConfig(&config);
860 if ( prof->getIsPhoneSync( ) ) 860 if ( prof->getIsPhoneSync( ) )
861 externalSyncProfileNames.append(prof->getName( ) ); 861 externalSyncProfileNames.append(prof->getName( ) );
862 prof = mSyncProfiles.next(); 862 prof = mSyncProfiles.next();
863 } 863 }
864 //KOPrefs::instance()->mSyncProfileNames = mSyncProfileNames; 864 //KOPrefs::instance()->mSyncProfileNames = mSyncProfileNames;
865 //KOPrefs::instance()->mLocalMachineName = mMyMachineName->text(); 865 //KOPrefs::instance()->mLocalMachineName = mMyMachineName->text();
866 config.setGroup("General"); 866 config.setGroup("General");
867 config.writeEntry("SyncProfileNames",mSyncProfileNames); 867 config.writeEntry("SyncProfileNames",mSyncProfileNames);
868 config.writeEntry("ExternSyncProfiles",externalSyncProfileNames); 868 config.writeEntry("ExternSyncProfiles",externalSyncProfileNames);
869 config.writeEntry("LocalMachineName",mMyMachineName->text()); 869 config.writeEntry("LocalMachineName",mMyMachineName->text());
870 config.sync(); 870 config.sync();
871} 871}
872 872
873void KSyncPrefsDialog::helpDevice() 873void KSyncPrefsDialog::helpDevice()
874{ 874{
875 QString hint = i18n("Insert device where\nphone is connected. E.g.:\n"); 875 QString hint = i18n("Insert device where\nphone is connected. E.g.:\n");
876#ifdef _WIN32_ 876#ifdef _WIN32_
877 hint += "Leave empty for Irda.\n" 877 hint += "Leave empty for Irda.\n"
878 "com1:\n(first serial port)\n" 878 "com1:\n(first serial port)\n"
879 "usb not supported\n" 879 "usb not supported\n"
880 "???\n(bluetooth device address)\n"; 880 "???\n(bluetooth device address)\n";
881 881
882#else 882#else
883 hint += "/dev/ircomm\n(Irda)\n" 883 hint += "/dev/ircomm\n(Irda)\n"
884 "/dev/ttyS0\n(first serial port)\n" 884 "/dev/ttyS0\n(first serial port)\n"
885 "/dev/ttyUSB0\n(first device usb port)\n" 885 "/dev/ttyUSB0\n(first device usb port)\n"
886 "???\n(bluetooth device address)\n"; 886 "???\n(bluetooth device address)\n";
887#endif 887#endif
888 KMessageBox::information(this,hint,i18n("KDE-Pim sync config")); 888 KMessageBox::information(this,hint,i18n("KDE-Pim sync config"));
889} 889}
890void KSyncPrefsDialog::helpModel() 890void KSyncPrefsDialog::helpModel()
891{ 891{
892 QString hint = i18n("Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n"); 892 QString hint = i18n("Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n");
893 hint += "E.g. for Nokia 6310i:\n6310i\nAlso possible:\nobex\nfor Obex connection"; 893 hint += "E.g. for Nokia 6310i:\n6310i\nAlso possible:\nobex\nfor Obex connection";
894 KMessageBox::information(this,hint,i18n("KDE-Pim sync config")); 894 KMessageBox::information(this,hint,i18n("KDE-Pim sync config"));
895 895
896} 896}
897void KSyncPrefsDialog::helpConnection() 897void KSyncPrefsDialog::helpConnection()
898{ 898{
899 QString hint = i18n("Insert kind of connection,e.g.:\n"); 899 QString hint = i18n("Insert kind of connection,e.g.:\n");
900 hint += "irda | Nokia FBUS over infrared\n" 900 hint += "irda | Nokia FBUS over infrared\n"
901 "irdaat | AT commands infrared\n(for Siemens/Sony-Erricsson)\n" 901 "irdaat | AT commands infrared\n(for Siemens/Sony-Erricsson)\n"
902 "irdaobex | set also model as obex\n" 902 "irdaobex | set also model as obex\n"
903 "fbus | Nokia FBUS2 serial\n"; 903 "fbus | Nokia FBUS2 serial\n";
904 KMessageBox::information(this,hint,i18n("KDE-Pim sync config")); 904 KMessageBox::information(this,hint,i18n("KDE-Pim sync config"));
905} 905}