summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendarlocal.cpp3
-rw-r--r--libkdepim/ksyncmanager.cpp2
2 files changed, 3 insertions, 2 deletions
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 2a57724..c33581c 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,1079 +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( 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( 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 } 212 }
212 ev->unRegisterObserver( cal ); 213 ev->unRegisterObserver( cal );
213 ev->registerObserver( this ); 214 ev->registerObserver( this );
214 mEventList.append( ev ); 215 mEventList.append( ev );
215 ev = EventList.next(); 216 ev = EventList.next();
216 } 217 }
217 for ( ev = el.first(); ev; ev = el.next() ) { 218 for ( ev = el.first(); ev; ev = el.next() ) {
218 deleteIncidence ( ev ); 219 deleteIncidence ( ev );
219 } 220 }
220 } 221 }
221 { 222 {
222 223
223 QPtrList<Todo> TodoList = cal->rawTodos(); 224 QPtrList<Todo> TodoList = cal->rawTodos();
224 Todo * ev = TodoList.first(); 225 Todo * ev = TodoList.first();
225 while ( ev ) { 226 while ( ev ) {
226 QString rel = ev->relatedToUid(); 227 QString rel = ev->relatedToUid();
227 if ( !rel.isEmpty() ){ 228 if ( !rel.isEmpty() ){
228 ev->setRelatedTo ( 0 ); 229 ev->setRelatedTo ( 0 );
229 ev->setRelatedToUid( rel ); 230 ev->setRelatedToUid( rel );
230 } 231 }
231 ev = TodoList.next(); 232 ev = TodoList.next();
232 } 233 }
233 //TodoList = cal->rawTodos(); 234 //TodoList = cal->rawTodos();
234 ev = TodoList.first(); 235 ev = TodoList.first();
235 while ( ev ) { 236 while ( ev ) {
236 ev->unRegisterObserver( cal ); 237 ev->unRegisterObserver( cal );
237 ev->registerObserver( this ); 238 ev->registerObserver( this );
238 mTodoList.append( ev ); 239 mTodoList.append( ev );
239 setupRelations( ev ); 240 setupRelations( ev );
240 ev = TodoList.next(); 241 ev = TodoList.next();
241 } 242 }
242 } 243 }
243 { 244 {
244 QPtrList<Journal> JournalList = cal->journals(); 245 QPtrList<Journal> JournalList = cal->journals();
245 Journal * ev = JournalList.first(); 246 Journal * ev = JournalList.first();
246 while ( ev ) { 247 while ( ev ) {
247 ev->unRegisterObserver( cal ); 248 ev->unRegisterObserver( cal );
248 ev->registerObserver( this ); 249 ev->registerObserver( this );
249 mJournalList.append( ev ); 250 mJournalList.append( ev );
250 ev = JournalList.next(); 251 ev = JournalList.next();
251 } 252 }
252 } 253 }
253 setModified( true ); 254 setModified( true );
254} 255}
255bool CalendarLocal::load( const QString &fileName ) 256bool CalendarLocal::load( const QString &fileName )
256{ 257{
257 FileStorage storage( this, fileName ); 258 FileStorage storage( this, fileName );
258 return storage.load(); 259 return storage.load();
259} 260}
260 261
261bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 262bool CalendarLocal::save( const QString &fileName, CalFormat *format )
262{ 263{
263 FileStorage storage( this, fileName, format ); 264 FileStorage storage( this, fileName, format );
264 return storage.save(); 265 return storage.save();
265} 266}
266 267
267void CalendarLocal::stopAllTodos() 268void CalendarLocal::stopAllTodos()
268{ 269{
269 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 270 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
270 it->setRunning( false ); 271 it->setRunning( false );
271 272
272} 273}
273void CalendarLocal::close() 274void CalendarLocal::close()
274{ 275{
275 276
276 Todo * i; 277 Todo * i;
277 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 278 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
278 279
279 mEventList.setAutoDelete( true ); 280 mEventList.setAutoDelete( true );
280 mTodoList.setAutoDelete( true ); 281 mTodoList.setAutoDelete( true );
281 mJournalList.setAutoDelete( true ); 282 mJournalList.setAutoDelete( true );
282 283
283 mEventList.clear(); 284 mEventList.clear();
284 mTodoList.clear(); 285 mTodoList.clear();
285 mJournalList.clear(); 286 mJournalList.clear();
286 287
287 mEventList.setAutoDelete( false ); 288 mEventList.setAutoDelete( false );
288 mTodoList.setAutoDelete( false ); 289 mTodoList.setAutoDelete( false );
289 mJournalList.setAutoDelete( false ); 290 mJournalList.setAutoDelete( false );
290 291
291 setModified( false ); 292 setModified( false );
292} 293}
293 294
294bool CalendarLocal::addAnniversaryNoDup( Event *event ) 295bool CalendarLocal::addAnniversaryNoDup( Event *event )
295{ 296{
296 QString cat; 297 QString cat;
297 bool isBirthday = true; 298 bool isBirthday = true;
298 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 299 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
299 isBirthday = false; 300 isBirthday = false;
300 cat = i18n( "Anniversary" ); 301 cat = i18n( "Anniversary" );
301 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 302 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
302 isBirthday = true; 303 isBirthday = true;
303 cat = i18n( "Birthday" ); 304 cat = i18n( "Birthday" );
304 } else { 305 } else {
305 qDebug("addAnniversaryNoDup called without fitting category! "); 306 qDebug("addAnniversaryNoDup called without fitting category! ");
306 return false; 307 return false;
307 } 308 }
308 Event * eve; 309 Event * eve;
309 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 310 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
310 if ( !(eve->categories().contains( cat ) )) 311 if ( !(eve->categories().contains( cat ) ))
311 continue; 312 continue;
312 // now we have an event with fitting category 313 // now we have an event with fitting category
313 if ( eve->dtStart().date() != event->dtStart().date() ) 314 if ( eve->dtStart().date() != event->dtStart().date() )
314 continue; 315 continue;
315 // now we have an event with fitting category+date 316 // now we have an event with fitting category+date
316 if ( eve->summary() != event->summary() ) 317 if ( eve->summary() != event->summary() )
317 continue; 318 continue;
318 // now we have an event with fitting category+date+summary 319 // now we have an event with fitting category+date+summary
319 return false; 320 return false;
320 } 321 }
321 return addEvent( event ); 322 return addEvent( event );
322 323
323} 324}
324bool CalendarLocal::addEventNoDup( Event *event ) 325bool CalendarLocal::addEventNoDup( Event *event )
325{ 326{
326 Event * eve; 327 Event * eve;
327 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 328 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
328 if ( *eve == *event ) { 329 if ( *eve == *event ) {
329 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 330 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
330 return false; 331 return false;
331 } 332 }
332 } 333 }
333 return addEvent( event ); 334 return addEvent( event );
334} 335}
335 336
336bool CalendarLocal::addEvent( Event *event ) 337bool CalendarLocal::addEvent( Event *event )
337{ 338{
338 insertEvent( event ); 339 insertEvent( event );
339 340
340 event->registerObserver( this ); 341 event->registerObserver( this );
341 342
342 setModified( true ); 343 setModified( true );
343 if ( event->calID() == 0 ) 344 if ( event->calID() == 0 )
344 event->setCalID( mDefaultCalendar ); 345 event->setCalID( mDefaultCalendar );
345 event->setCalEnabled( true ); 346 event->setCalEnabled( true );
346 347
347 return true; 348 return true;
348} 349}
349 350
350void CalendarLocal::deleteEvent( Event *event ) 351void CalendarLocal::deleteEvent( Event *event )
351{ 352{
352 clearUndo(event); 353 clearUndo(event);
353 if ( mEventList.removeRef( event ) ) { 354 if ( mEventList.removeRef( event ) ) {
354 setModified( true ); 355 setModified( true );
355 } 356 }
356} 357}
357 358
358 359
359Event *CalendarLocal::event( const QString &uid ) 360Event *CalendarLocal::event( const QString &uid )
360{ 361{
361 Event *event; 362 Event *event;
362 Event *retVal = 0; 363 Event *retVal = 0;
363 for ( event = mEventList.first(); event; event = mEventList.next() ) { 364 for ( event = mEventList.first(); event; event = mEventList.next() ) {
364 if ( event->calEnabled() && event->uid() == uid ) { 365 if ( event->calEnabled() && event->uid() == uid ) {
365 if ( retVal ) { 366 if ( retVal ) {
366 if ( retVal->calID() > event->calID() ) { 367 if ( retVal->calID() > event->calID() ) {
367 retVal = event; 368 retVal = event;
368 } 369 }
369 } else { 370 } else {
370 retVal = event; 371 retVal = event;
371 } 372 }
372 } 373 }
373 } 374 }
374 return retVal; 375 return retVal;
375} 376}
376bool CalendarLocal::addTodoNoDup( Todo *todo ) 377bool CalendarLocal::addTodoNoDup( Todo *todo )
377{ 378{
378 Todo * eve; 379 Todo * eve;
379 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 380 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
380 if ( *eve == *todo ) { 381 if ( *eve == *todo ) {
381 //qDebug("duplicate todo found! not inserted! "); 382 //qDebug("duplicate todo found! not inserted! ");
382 return false; 383 return false;
383 } 384 }
384 } 385 }
385 return addTodo( todo ); 386 return addTodo( todo );
386} 387}
387bool CalendarLocal::addTodo( Todo *todo ) 388bool CalendarLocal::addTodo( Todo *todo )
388{ 389{
389 mTodoList.append( todo ); 390 mTodoList.append( todo );
390 391
391 todo->registerObserver( this ); 392 todo->registerObserver( this );
392 393
393 // Set up subtask relations 394 // Set up subtask relations
394 setupRelations( todo ); 395 setupRelations( todo );
395 396
396 setModified( true ); 397 setModified( true );
397 if ( todo->calID() == 0 ) 398 if ( todo->calID() == 0 )
398 todo->setCalID( mDefaultCalendar ); 399 todo->setCalID( mDefaultCalendar );
399 todo->setCalEnabled( true ); 400 todo->setCalEnabled( true );
400 return true; 401 return true;
401} 402}
402 403
403void CalendarLocal::deleteTodo( Todo *todo ) 404void CalendarLocal::deleteTodo( Todo *todo )
404{ 405{
405 // Handle orphaned children 406 // Handle orphaned children
406 removeRelations( todo ); 407 removeRelations( todo );
407 clearUndo(todo); 408 clearUndo(todo);
408 409
409 if ( mTodoList.removeRef( todo ) ) { 410 if ( mTodoList.removeRef( todo ) ) {
410 setModified( true ); 411 setModified( true );
411 } 412 }
412} 413}
413 414
414QPtrList<Todo> CalendarLocal::rawTodos() 415QPtrList<Todo> CalendarLocal::rawTodos()
415{ 416{
416 QPtrList<Todo> el; 417 QPtrList<Todo> el;
417 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 418 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
418 if ( it->calEnabled() ) el.append( it ); 419 if ( it->calEnabled() ) el.append( it );
419 return el; 420 return el;
420} 421}
421Todo *CalendarLocal::todo( QString syncProf, QString id ) 422Todo *CalendarLocal::todo( QString syncProf, QString id )
422{ 423{
423 Todo *todo; 424 Todo *todo;
424 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 425 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
425 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 426 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
426 } 427 }
427 428
428 return 0; 429 return 0;
429} 430}
430void CalendarLocal::removeSyncInfo( QString syncProfile) 431void CalendarLocal::removeSyncInfo( QString syncProfile)
431{ 432{
432 QPtrList<Incidence> all = rawIncidences() ; 433 QPtrList<Incidence> all = rawIncidences() ;
433 Incidence *inc; 434 Incidence *inc;
434 for ( inc = all.first(); inc; inc = all.next() ) { 435 for ( inc = all.first(); inc; inc = all.next() ) {
435 inc->removeID( syncProfile ); 436 inc->removeID( syncProfile );
436 } 437 }
437 if ( syncProfile.isEmpty() ) { 438 if ( syncProfile.isEmpty() ) {
438 QPtrList<Event> el; 439 QPtrList<Event> el;
439 Event *todo; 440 Event *todo;
440 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 441 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
441 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 442 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
442 el.append( todo ); 443 el.append( todo );
443 } 444 }
444 for ( todo = el.first(); todo; todo = el.next() ) { 445 for ( todo = el.first(); todo; todo = el.next() ) {
445 deleteIncidence ( todo ); 446 deleteIncidence ( todo );
446 } 447 }
447 } else { 448 } else {
448 Event *lse = event( "last-syncEvent-"+ syncProfile); 449 Event *lse = event( "last-syncEvent-"+ syncProfile);
449 if ( lse ) 450 if ( lse )
450 deleteIncidence ( lse ); 451 deleteIncidence ( lse );
451 } 452 }
452} 453}
453QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 454QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
454{ 455{
455 QPtrList<Event> el; 456 QPtrList<Event> el;
456 Event *todo; 457 Event *todo;
457 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 458 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
458 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 459 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
459 if ( todo->summary().left(3) == "E: " ) 460 if ( todo->summary().left(3) == "E: " )
460 el.append( todo ); 461 el.append( todo );
461 } 462 }
462 463
463 return el; 464 return el;
464 465
465} 466}
466Event *CalendarLocal::event( QString syncProf, QString id ) 467Event *CalendarLocal::event( QString syncProf, QString id )
467{ 468{
468 Event *todo; 469 Event *todo;
469 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 470 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
470 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 471 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
471 } 472 }
472 473
473 return 0; 474 return 0;
474} 475}
475Todo *CalendarLocal::todo( const QString &uid ) 476Todo *CalendarLocal::todo( const QString &uid )
476{ 477{
477 Todo *todo; 478 Todo *todo;
478 Todo *retVal = 0; 479 Todo *retVal = 0;
479 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 480 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
480 if ( todo->calEnabled() && todo->uid() == uid ) { 481 if ( todo->calEnabled() && todo->uid() == uid ) {
481 if ( retVal ) { 482 if ( retVal ) {
482 if ( retVal->calID() > todo->calID() ) { 483 if ( retVal->calID() > todo->calID() ) {
483 retVal = todo; 484 retVal = todo;
484 } 485 }
485 } else { 486 } else {
486 retVal = todo; 487 retVal = todo;
487 } 488 }
488 } 489 }
489 } 490 }
490 return retVal; 491 return retVal;
491} 492}
492void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals) 493void CalendarLocal::getIncidenceCount( int calId, int& events, int & todos, int & journals)
493{ 494{
494 events = 0; 495 events = 0;
495 todos = 0; 496 todos = 0;
496 journals = 0; 497 journals = 0;
497 { 498 {
498 Todo *todo; 499 Todo *todo;
499 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 500 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
500 if ( todo->calID() == calId ) 501 if ( todo->calID() == calId )
501 ++todos; 502 ++todos;
502 } 503 }
503 } 504 }
504 { 505 {
505 Event *todo; 506 Event *todo;
506 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 507 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
507 if ( todo->calID() == calId ) 508 if ( todo->calID() == calId )
508 ++events; 509 ++events;
509 510
510 } 511 }
511 } 512 }
512 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 513 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
513 if ( it->calID() == calId ) ++journals; 514 if ( it->calID() == calId ) ++journals;
514 515
515} 516}
516QString CalendarLocal::nextSummary() const 517QString CalendarLocal::nextSummary() const
517{ 518{
518 return mNextSummary; 519 return mNextSummary;
519} 520}
520QDateTime CalendarLocal::nextAlarmEventDateTime() const 521QDateTime CalendarLocal::nextAlarmEventDateTime() const
521{ 522{
522 return mNextAlarmEventDateTime; 523 return mNextAlarmEventDateTime;
523} 524}
524void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 525void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
525{ 526{
526 //mNextAlarmIncidence 527 //mNextAlarmIncidence
527 //mNextAlarmDateTime 528 //mNextAlarmDateTime
528 //return mNextSummary; 529 //return mNextSummary;
529 //return mNextAlarmEventDateTime; 530 //return mNextAlarmEventDateTime;
530 bool newNextAlarm = false; 531 bool newNextAlarm = false;
531 bool computeNextAlarm = false; 532 bool computeNextAlarm = false;
532 bool ok; 533 bool ok;
533 int offset; 534 int offset;
534 QDateTime nextA; 535 QDateTime nextA;
535 // QString nextSum; 536 // QString nextSum;
536 //QDateTime nextEvent; 537 //QDateTime nextEvent;
537 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 538 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
538 computeNextAlarm = true; 539 computeNextAlarm = true;
539 } else { 540 } else {
540 if ( ! deleted ) { 541 if ( ! deleted ) {
541 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 542 nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
542 if ( ok ) { 543 if ( ok ) {
543 if ( nextA < mNextAlarmDateTime ) { 544 if ( nextA < mNextAlarmDateTime ) {
544 deRegisterAlarm(); 545 deRegisterAlarm();
545 mNextAlarmDateTime = nextA; 546 mNextAlarmDateTime = nextA;
546 mNextSummary = incidence->summary(); 547 mNextSummary = incidence->summary();
547 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 548 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
548 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 549 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
549 newNextAlarm = true; 550 newNextAlarm = true;
550 mNextAlarmIncidence = incidence; 551 mNextAlarmIncidence = incidence;
551 } else { 552 } else {
552 if ( incidence == mNextAlarmIncidence ) { 553 if ( incidence == mNextAlarmIncidence ) {
553 computeNextAlarm = true; 554 computeNextAlarm = true;
554 } 555 }
555 } 556 }
556 } else { 557 } else {
557 if ( mNextAlarmIncidence == incidence ) { 558 if ( mNextAlarmIncidence == incidence ) {
558 computeNextAlarm = true; 559 computeNextAlarm = true;
559 } 560 }
560 } 561 }
561 } else { // deleted 562 } else { // deleted
562 if ( incidence == mNextAlarmIncidence ) { 563 if ( incidence == mNextAlarmIncidence ) {
563 computeNextAlarm = true; 564 computeNextAlarm = true;
564 } 565 }
565 } 566 }
566 } 567 }
567 if ( computeNextAlarm ) { 568 if ( computeNextAlarm ) {
568 deRegisterAlarm(); 569 deRegisterAlarm();
569 nextA = nextAlarm( 1000 ); 570 nextA = nextAlarm( 1000 );
570 if (! mNextAlarmIncidence ) { 571 if (! mNextAlarmIncidence ) {
571 return; 572 return;
572 } 573 }
573 newNextAlarm = true; 574 newNextAlarm = true;
574 } 575 }
575 if ( newNextAlarm ) 576 if ( newNextAlarm )
576 registerAlarm(); 577 registerAlarm();
577} 578}
578QString CalendarLocal:: getAlarmNotification() 579QString CalendarLocal:: getAlarmNotification()
579{ 580{
580 QString ret; 581 QString ret;
581 // this should not happen 582 // this should not happen
582 if (! mNextAlarmIncidence ) 583 if (! mNextAlarmIncidence )
583 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 584 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
584 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 585 Alarm* alarm = mNextAlarmIncidence->alarms().first();
585 if ( alarm->type() == Alarm::Procedure ) { 586 if ( alarm->type() == Alarm::Procedure ) {
586 ret = "proc_alarm" + alarm->programFile()+"+++"; 587 ret = "proc_alarm" + alarm->programFile()+"+++";
587 } else { 588 } else {
588 ret = "audio_alarm" +alarm->audioFile() +"+++"; 589 ret = "audio_alarm" +alarm->audioFile() +"+++";
589 } 590 }
590 ret += "cal_alarm"+ mNextSummary.left( 25 ); 591 ret += "cal_alarm"+ mNextSummary.left( 25 );
591 if ( mNextSummary.length() > 25 ) 592 if ( mNextSummary.length() > 25 )
592 ret += "\n" + mNextSummary.mid(25, 25 ); 593 ret += "\n" + mNextSummary.mid(25, 25 );
593 ret+= "\n"+mNextAlarmEventDateTimeString; 594 ret+= "\n"+mNextAlarmEventDateTimeString;
594 return ret; 595 return ret;
595} 596}
596void CalendarLocal::registerAlarm() 597void CalendarLocal::registerAlarm()
597{ 598{
598 mLastAlarmNotificationString = getAlarmNotification(); 599 mLastAlarmNotificationString = getAlarmNotification();
599 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 600 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
600 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 601 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
601// #ifndef DESKTOP_VERSION 602// #ifndef DESKTOP_VERSION
602// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 603// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
603// #endif 604// #endif
604} 605}
605void CalendarLocal::deRegisterAlarm() 606void CalendarLocal::deRegisterAlarm()
606{ 607{
607 if ( mLastAlarmNotificationString.isNull() ) 608 if ( mLastAlarmNotificationString.isNull() )
608 return; 609 return;
609 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 610 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
610 611
611 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 612 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
612 mNextAlarmEventDateTime = QDateTime(); 613 mNextAlarmEventDateTime = QDateTime();
613// #ifndef DESKTOP_VERSION 614// #ifndef DESKTOP_VERSION
614// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 615// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
615// #endif 616// #endif
616} 617}
617 618
618QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 619QPtrList<Todo> CalendarLocal::todos( const QDate &date )
619{ 620{
620 QPtrList<Todo> todos; 621 QPtrList<Todo> todos;
621 622
622 Todo *todo; 623 Todo *todo;
623 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 624 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
624 if ( !todo->calEnabled() ) continue; 625 if ( !todo->calEnabled() ) continue;
625 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 626 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
626 todos.append( todo ); 627 todos.append( todo );
627 } 628 }
628 } 629 }
629 630
630 filter()->apply( &todos ); 631 filter()->apply( &todos );
631 return todos; 632 return todos;
632} 633}
633void CalendarLocal::reInitAlarmSettings() 634void CalendarLocal::reInitAlarmSettings()
634{ 635{
635 if ( !mNextAlarmIncidence ) { 636 if ( !mNextAlarmIncidence ) {
636 nextAlarm( 1000 ); 637 nextAlarm( 1000 );
637 } 638 }
638 deRegisterAlarm(); 639 deRegisterAlarm();
639 mNextAlarmIncidence = 0; 640 mNextAlarmIncidence = 0;
640 checkAlarmForIncidence( 0, false ); 641 checkAlarmForIncidence( 0, false );
641 642
642} 643}
643 644
644 645
645 646
646QDateTime CalendarLocal::nextAlarm( int daysTo ) 647QDateTime CalendarLocal::nextAlarm( int daysTo )
647{ 648{
648 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 649 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
649 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 650 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
650 QDateTime next; 651 QDateTime next;
651 Event *e; 652 Event *e;
652 bool ok; 653 bool ok;
653 bool found = false; 654 bool found = false;
654 int offset; 655 int offset;
655 mNextAlarmIncidence = 0; 656 mNextAlarmIncidence = 0;
656 for( e = mEventList.first(); e; e = mEventList.next() ) { 657 for( e = mEventList.first(); e; e = mEventList.next() ) {
657 if ( !e->calEnabled() ) continue; 658 if ( !e->calEnabled() ) continue;
658 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 659 next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
659 if ( ok ) { 660 if ( ok ) {
660 if ( next < nextA ) { 661 if ( next < nextA ) {
661 nextA = next; 662 nextA = next;
662 found = true; 663 found = true;
663 mNextSummary = e->summary(); 664 mNextSummary = e->summary();
664 mNextAlarmEventDateTime = next.addSecs(offset ) ; 665 mNextAlarmEventDateTime = next.addSecs(offset ) ;
665 mNextAlarmIncidence = (Incidence *) e; 666 mNextAlarmIncidence = (Incidence *) e;
666 } 667 }
667 } 668 }
668 } 669 }
669 Todo *t; 670 Todo *t;
670 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 671 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
671 if ( !t->calEnabled() ) continue; 672 if ( !t->calEnabled() ) continue;
672 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ; 673 next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
673 if ( ok ) { 674 if ( ok ) {
674 if ( next < nextA ) { 675 if ( next < nextA ) {
675 nextA = next; 676 nextA = next;
676 found = true; 677 found = true;
677 mNextSummary = t->summary(); 678 mNextSummary = t->summary();
678 mNextAlarmEventDateTime = next.addSecs(offset ); 679 mNextAlarmEventDateTime = next.addSecs(offset );
679 mNextAlarmIncidence = (Incidence *) t; 680 mNextAlarmIncidence = (Incidence *) t;
680 } 681 }
681 } 682 }
682 } 683 }
683 if ( mNextAlarmIncidence ) { 684 if ( mNextAlarmIncidence ) {
684 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 685 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
685 mNextAlarmDateTime = nextA; 686 mNextAlarmDateTime = nextA;
686 } 687 }
687 return nextA; 688 return nextA;
688} 689}
689Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 690Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
690{ 691{
691 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 692 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
692} 693}
693 694
694Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 695Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
695{ 696{
696 697
697 Alarm::List alarms; 698 Alarm::List alarms;
698 699
699 Event *e; 700 Event *e;
700 701
701 for( e = mEventList.first(); e; e = mEventList.next() ) { 702 for( e = mEventList.first(); e; e = mEventList.next() ) {
702 if ( !e->calEnabled() ) continue; 703 if ( !e->calEnabled() ) continue;
703 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 704 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
704 else appendAlarms( alarms, e, from, to ); 705 else appendAlarms( alarms, e, from, to );
705 } 706 }
706 707
707 Todo *t; 708 Todo *t;
708 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 709 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
709 if ( !t->calEnabled() ) continue; 710 if ( !t->calEnabled() ) continue;
710 appendAlarms( alarms, t, from, to ); 711 appendAlarms( alarms, t, from, to );
711 } 712 }
712 713
713 return alarms; 714 return alarms;
714} 715}
715 716
716void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 717void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
717 const QDateTime &from, const QDateTime &to ) 718 const QDateTime &from, const QDateTime &to )
718{ 719{
719 QPtrList<Alarm> alarmList = incidence->alarms(); 720 QPtrList<Alarm> alarmList = incidence->alarms();
720 Alarm *alarm; 721 Alarm *alarm;
721 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 722 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
722// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 723// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
723// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 724// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
724 if ( alarm->enabled() ) { 725 if ( alarm->enabled() ) {
725 if ( alarm->time() >= from && alarm->time() <= to ) { 726 if ( alarm->time() >= from && alarm->time() <= to ) {
726 alarms.append( alarm ); 727 alarms.append( alarm );
727 } 728 }
728 } 729 }
729 } 730 }
730} 731}
731 732
732void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 733void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
733 Incidence *incidence, 734 Incidence *incidence,
734 const QDateTime &from, 735 const QDateTime &from,
735 const QDateTime &to ) 736 const QDateTime &to )
736{ 737{
737 738
738 QPtrList<Alarm> alarmList = incidence->alarms(); 739 QPtrList<Alarm> alarmList = incidence->alarms();
739 Alarm *alarm; 740 Alarm *alarm;
740 QDateTime qdt; 741 QDateTime qdt;
741 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 742 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
742 if (incidence->recursOn(from.date())) { 743 if (incidence->recursOn(from.date())) {
743 qdt.setTime(alarm->time().time()); 744 qdt.setTime(alarm->time().time());
744 qdt.setDate(from.date()); 745 qdt.setDate(from.date());
745 } 746 }
746 else qdt = alarm->time(); 747 else qdt = alarm->time();
747 // 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());
748 if ( alarm->enabled() ) { 749 if ( alarm->enabled() ) {
749 if ( qdt >= from && qdt <= to ) { 750 if ( qdt >= from && qdt <= to ) {
750 alarms.append( alarm ); 751 alarms.append( alarm );
751 } 752 }
752 } 753 }
753 } 754 }
754} 755}
755 756
756 757
757/****************************** PROTECTED METHODS ****************************/ 758/****************************** PROTECTED METHODS ****************************/
758 759
759// after changes are made to an event, this should be called. 760// after changes are made to an event, this should be called.
760void CalendarLocal::update( IncidenceBase *incidence ) 761void CalendarLocal::update( IncidenceBase *incidence )
761{ 762{
762 incidence->setSyncStatus( Event::SYNCMOD ); 763 incidence->setSyncStatus( Event::SYNCMOD );
763 incidence->setLastModified( QDateTime::currentDateTime() ); 764 incidence->setLastModified( QDateTime::currentDateTime() );
764 // we should probably update the revision number here, 765 // we should probably update the revision number here,
765 // or internally in the Event itself when certain things change. 766 // or internally in the Event itself when certain things change.
766 // need to verify with ical documentation. 767 // need to verify with ical documentation.
767 768
768 setModified( true ); 769 setModified( true );
769} 770}
770 771
771void CalendarLocal::insertEvent( Event *event ) 772void CalendarLocal::insertEvent( Event *event )
772{ 773{
773 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 774 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
774} 775}
775 776
776 777
777QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 778QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
778{ 779{
779 QPtrList<Event> eventList; 780 QPtrList<Event> eventList;
780 781
781 Event *event; 782 Event *event;
782 for( event = mEventList.first(); event; event = mEventList.next() ) { 783 for( event = mEventList.first(); event; event = mEventList.next() ) {
783 if ( !event->calEnabled() ) continue; 784 if ( !event->calEnabled() ) continue;
784 if ( event->doesRecur() ) { 785 if ( event->doesRecur() ) {
785 if ( event->isMultiDay() ) { 786 if ( event->isMultiDay() ) {
786 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 787 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
787 int i; 788 int i;
788 for ( i = 0; i <= extraDays; i++ ) { 789 for ( i = 0; i <= extraDays; i++ ) {
789 if ( event->recursOn( qd.addDays( -i ) ) ) { 790 if ( event->recursOn( qd.addDays( -i ) ) ) {
790 eventList.append( event ); 791 eventList.append( event );
791 break; 792 break;
792 } 793 }
793 } 794 }
794 } else { 795 } else {
795 if ( event->recursOn( qd ) ) 796 if ( event->recursOn( qd ) )
796 eventList.append( event ); 797 eventList.append( event );
797 } 798 }
798 } else { 799 } else {
799 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 800 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
800 eventList.append( event ); 801 eventList.append( event );
801 } 802 }
802 } 803 }
803 } 804 }
804 805
805 if ( !sorted ) { 806 if ( !sorted ) {
806 return eventList; 807 return eventList;
807 } 808 }
808 809
809 // kdDebug(5800) << "Sorting events for date\n" << endl; 810 // kdDebug(5800) << "Sorting events for date\n" << endl;
810 // now, we have to sort it based on dtStart.time() 811 // now, we have to sort it based on dtStart.time()
811 QPtrList<Event> eventListSorted; 812 QPtrList<Event> eventListSorted;
812 Event *sortEvent; 813 Event *sortEvent;
813 for ( event = eventList.first(); event; event = eventList.next() ) { 814 for ( event = eventList.first(); event; event = eventList.next() ) {
814 sortEvent = eventListSorted.first(); 815 sortEvent = eventListSorted.first();
815 int i = 0; 816 int i = 0;
816 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 817 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
817 { 818 {
818 i++; 819 i++;
819 sortEvent = eventListSorted.next(); 820 sortEvent = eventListSorted.next();
820 } 821 }
821 eventListSorted.insert( i, event ); 822 eventListSorted.insert( i, event );
822 } 823 }
823 return eventListSorted; 824 return eventListSorted;
824} 825}
825 826
826 827
827QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 828QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
828 bool inclusive ) 829 bool inclusive )
829{ 830{
830 Event *event = 0; 831 Event *event = 0;
831 832
832 QPtrList<Event> eventList; 833 QPtrList<Event> eventList;
833 834
834 // Get non-recurring events 835 // Get non-recurring events
835 for( event = mEventList.first(); event; event = mEventList.next() ) { 836 for( event = mEventList.first(); event; event = mEventList.next() ) {
836 if ( !event->calEnabled() ) continue; 837 if ( !event->calEnabled() ) continue;
837 if ( event->doesRecur() ) { 838 if ( event->doesRecur() ) {
838 QDate rStart = event->dtStart().date(); 839 QDate rStart = event->dtStart().date();
839 bool found = false; 840 bool found = false;
840 if ( inclusive ) { 841 if ( inclusive ) {
841 if ( rStart >= start && rStart <= end ) { 842 if ( rStart >= start && rStart <= end ) {
842 // 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.
843 // 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.
844 if ( event->recurrence()->duration() == 0 ) { // End date set 845 if ( event->recurrence()->duration() == 0 ) { // End date set
845 QDate rEnd = event->recurrence()->endDate(); 846 QDate rEnd = event->recurrence()->endDate();
846 if ( rEnd >= start && rEnd <= end ) { // End date within range 847 if ( rEnd >= start && rEnd <= end ) { // End date within range
847 found = true; 848 found = true;
848 } 849 }
849 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 850 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
850 // TODO: Calculate end date from duration. Should be done in Event 851 // TODO: Calculate end date from duration. Should be done in Event
851 // For now exclude all events with a duration. 852 // For now exclude all events with a duration.
852 } 853 }
853 } 854 }
854 } else { 855 } else {
855 bool founOne; 856 bool founOne;
856 QDate next = event->getNextOccurence( start, &founOne ).date(); 857 QDate next = event->getNextOccurence( start, &founOne ).date();
857 if ( founOne ) { 858 if ( founOne ) {
858 if ( next <= end ) { 859 if ( next <= end ) {
859 found = true; 860 found = true;
860 } 861 }
861 } 862 }
862 863
863 /* 864 /*
864 // crap !!! 865 // crap !!!
865 if ( rStart <= end ) { // Start date not after range 866 if ( rStart <= end ) { // Start date not after range
866 if ( rStart >= start ) { // Start date within range 867 if ( rStart >= start ) { // Start date within range
867 found = true; 868 found = true;
868 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 869 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
869 found = true; 870 found = true;
870 } else if ( event->recurrence()->duration() == 0 ) { // End date set 871 } else if ( event->recurrence()->duration() == 0 ) { // End date set
871 QDate rEnd = event->recurrence()->endDate(); 872 QDate rEnd = event->recurrence()->endDate();
872 if ( rEnd >= start && rEnd <= end ) { // End date within range 873 if ( rEnd >= start && rEnd <= end ) { // End date within range
873 found = true; 874 found = true;
874 } 875 }
875 } else { // Duration set 876 } else { // Duration set
876 // TODO: Calculate end date from duration. Should be done in Event 877 // TODO: Calculate end date from duration. Should be done in Event
877 // For now include all events with a duration. 878 // For now include all events with a duration.
878 found = true; 879 found = true;
879 } 880 }
880 } 881 }
881 */ 882 */
882 883
883 } 884 }
884 885
885 if ( found ) eventList.append( event ); 886 if ( found ) eventList.append( event );
886 } else { 887 } else {
887 QDate s = event->dtStart().date(); 888 QDate s = event->dtStart().date();
888 QDate e = event->dtEnd().date(); 889 QDate e = event->dtEnd().date();
889 890
890 if ( inclusive ) { 891 if ( inclusive ) {
891 if ( s >= start && e <= end ) { 892 if ( s >= start && e <= end ) {
892 eventList.append( event ); 893 eventList.append( event );
893 } 894 }
894 } else { 895 } else {
895 if ( ( e >= start && s <= end ) ) { 896 if ( ( e >= start && s <= end ) ) {
896 eventList.append( event ); 897 eventList.append( event );
897 } 898 }
898 } 899 }
899 } 900 }
900 } 901 }
901 902
902 return eventList; 903 return eventList;
903} 904}
904 905
905QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 906QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
906{ 907{
907 return rawEventsForDate( qdt.date() ); 908 return rawEventsForDate( qdt.date() );
908} 909}
909 910
910QPtrList<Event> CalendarLocal::rawEvents() 911QPtrList<Event> CalendarLocal::rawEvents()
911{ 912{
912 QPtrList<Event> el; 913 QPtrList<Event> el;
913 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 914 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
914 if ( it->calEnabled() ) el.append( it ); 915 if ( it->calEnabled() ) el.append( it );
915 return el; 916 return el;
916} 917}
917 918
918bool CalendarLocal::addJournal(Journal *journal) 919bool CalendarLocal::addJournal(Journal *journal)
919{ 920{
920 mJournalList.append(journal); 921 mJournalList.append(journal);
921 922
922 journal->registerObserver( this ); 923 journal->registerObserver( this );
923 924
924 setModified( true ); 925 setModified( true );
925 if ( journal->calID() == 0 ) 926 if ( journal->calID() == 0 )
926 journal->setCalID( mDefaultCalendar ); 927 journal->setCalID( mDefaultCalendar );
927 journal->setCalEnabled( true ); 928 journal->setCalEnabled( true );
928 return true; 929 return true;
929} 930}
930 931
931void CalendarLocal::deleteJournal( Journal *journal ) 932void CalendarLocal::deleteJournal( Journal *journal )
932{ 933{
933 clearUndo(journal); 934 clearUndo(journal);
934 if ( mJournalList.removeRef(journal) ) { 935 if ( mJournalList.removeRef(journal) ) {
935 setModified( true ); 936 setModified( true );
936 } 937 }
937} 938}
938 939
939QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date ) 940QPtrList<Journal> CalendarLocal::journals4Date( const QDate & date )
940{ 941{
941 QPtrList<Journal> el; 942 QPtrList<Journal> el;
942 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 943 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
943 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it ); 944 if ( it->calEnabled() && it->dtStart().date() == date) el.append( it );
944 return el; 945 return el;
945} 946}
946Journal *CalendarLocal::journal( const QDate &date ) 947Journal *CalendarLocal::journal( const QDate &date )
947{ 948{
948// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 949// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
949 950
950 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 951 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
951 if ( it->calEnabled() && it->dtStart().date() == date ) 952 if ( it->calEnabled() && it->dtStart().date() == date )
952 return it; 953 return it;
953 954
954 return 0; 955 return 0;
955} 956}
956 957
957Journal *CalendarLocal::journal( const QString &uid ) 958Journal *CalendarLocal::journal( const QString &uid )
958{ 959{
959 Journal * retVal = 0; 960 Journal * retVal = 0;
960 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 961 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
961 if ( it->calEnabled() && it->uid() == uid ) { 962 if ( it->calEnabled() && it->uid() == uid ) {
962 if ( retVal ) { 963 if ( retVal ) {
963 if ( retVal->calID() > it->calID() ) { 964 if ( retVal->calID() > it->calID() ) {
964 retVal = it; 965 retVal = it;
965 } 966 }
966 } else { 967 } else {
967 retVal = it; 968 retVal = it;
968 } 969 }
969 } 970 }
970 return retVal; 971 return retVal;
971} 972}
972 973
973QPtrList<Journal> CalendarLocal::journals() 974QPtrList<Journal> CalendarLocal::journals()
974{ 975{
975 QPtrList<Journal> el; 976 QPtrList<Journal> el;
976 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 977 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
977 if ( it->calEnabled() ) el.append( it ); 978 if ( it->calEnabled() ) el.append( it );
978 return el; 979 return el;
979} 980}
980void CalendarLocal::setCalendarRemove( int id ) 981void CalendarLocal::setCalendarRemove( int id )
981{ 982{
982 983
983 { 984 {
984 QPtrList<Event> EventList = mEventList; 985 QPtrList<Event> EventList = mEventList;
985 Event * ev = EventList.first(); 986 Event * ev = EventList.first();
986 while ( ev ) { 987 while ( ev ) {
987 if ( ev->calID() == id ) 988 if ( ev->calID() == id )
988 deleteEvent( ev ); 989 deleteEvent( ev );
989 ev = EventList.next(); 990 ev = EventList.next();
990 } 991 }
991 } 992 }
992 { 993 {
993 994
994 QPtrList<Todo> TodoList = mTodoList; 995 QPtrList<Todo> TodoList = mTodoList;
995 Todo * ev = TodoList.first(); 996 Todo * ev = TodoList.first();
996 while ( ev ) { 997 while ( ev ) {
997 if ( ev->calID() == id ) 998 if ( ev->calID() == id )
998 deleteTodo( ev ); 999 deleteTodo( ev );
999 ev = TodoList.next(); 1000 ev = TodoList.next();
1000 } 1001 }
1001 } 1002 }
1002 { 1003 {
1003 QPtrList<Journal> JournalList = mJournalList; 1004 QPtrList<Journal> JournalList = mJournalList;
1004 Journal * ev = JournalList.first(); 1005 Journal * ev = JournalList.first();
1005 while ( ev ) { 1006 while ( ev ) {
1006 if ( ev->calID() == id ) 1007 if ( ev->calID() == id )
1007 deleteJournal( ev ); 1008 deleteJournal( ev );
1008 ev = JournalList.next(); 1009 ev = JournalList.next();
1009 } 1010 }
1010 } 1011 }
1011 1012
1012 clearUndo(0); 1013 clearUndo(0);
1013 1014
1014} 1015}
1015 1016
1016void CalendarLocal::setAllCalendarEnabled( bool enable ) 1017void CalendarLocal::setAllCalendarEnabled( bool enable )
1017{ 1018{
1018 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1019 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1019 it->setCalEnabled( enable ); 1020 it->setCalEnabled( enable );
1020 1021
1021 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1022 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1022 it->setCalEnabled( enable ); 1023 it->setCalEnabled( enable );
1023 1024
1024 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1025 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1025 it->setCalEnabled( enable ); 1026 it->setCalEnabled( enable );
1026 1027
1027 1028
1028} 1029}
1029void CalendarLocal::setCalendarEnabled( int id, bool enable ) 1030void CalendarLocal::setCalendarEnabled( int id, bool enable )
1030{ 1031{
1031 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1032 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1032 if ( it->calID() == id ) it->setCalEnabled( enable ); 1033 if ( it->calID() == id ) it->setCalEnabled( enable );
1033 1034
1034 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1035 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1035 if ( it->calID() == id ) it->setCalEnabled( enable ); 1036 if ( it->calID() == id ) it->setCalEnabled( enable );
1036 1037
1037 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1038 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1038 if ( it->calID() == id ) it->setCalEnabled( enable ); 1039 if ( it->calID() == id ) it->setCalEnabled( enable );
1039 1040
1040} 1041}
1041 1042
1042void CalendarLocal::setReadOnly( int id, bool enable ) 1043void CalendarLocal::setReadOnly( int id, bool enable )
1043{ 1044{
1044 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1045 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1045 if ( it->calID() == id ) it->setReadOnly( enable ); 1046 if ( it->calID() == id ) it->setReadOnly( enable );
1046 1047
1047 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1048 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1048 if ( it->calID() == id ) it->setReadOnly( enable ); 1049 if ( it->calID() == id ) it->setReadOnly( enable );
1049 1050
1050 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1051 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1051 if ( it->calID() == id ) it->setReadOnly( enable ); 1052 if ( it->calID() == id ) it->setReadOnly( enable );
1052 1053
1053} 1054}
1054 1055
1055void CalendarLocal::setAlarmEnabled( int id, bool enable ) 1056void CalendarLocal::setAlarmEnabled( int id, bool enable )
1056{ 1057{
1057 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1058 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1058 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1059 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1059 1060
1060 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1061 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1061 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1062 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1062 1063
1063 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1064 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1064 if ( it->calID() == id ) it->setAlarmEnabled( enable ); 1065 if ( it->calID() == id ) it->setAlarmEnabled( enable );
1065 reInitAlarmSettings(); 1066 reInitAlarmSettings();
1066 1067
1067} 1068}
1068void CalendarLocal::setDefaultCalendarEnabledOnly() 1069void CalendarLocal::setDefaultCalendarEnabledOnly()
1069{ 1070{
1070 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 1071 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
1071 it->setCalEnabled( it->calID() == mDefaultCalendar ); 1072 it->setCalEnabled( it->calID() == mDefaultCalendar );
1072 1073
1073 for ( Event *it = mEventList.first(); it; it = mEventList.next() ) 1074 for ( Event *it = mEventList.first(); it; it = mEventList.next() )
1074 it->setCalEnabled( it->calID() == mDefaultCalendar); 1075 it->setCalEnabled( it->calID() == mDefaultCalendar);
1075 1076
1076 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 1077 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
1077 it->setCalEnabled( it->calID() == mDefaultCalendar); 1078 it->setCalEnabled( it->calID() == mDefaultCalendar);
1078 1079
1079} 1080}
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index d2cb71b..e1b15d2 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -752,1027 +752,1027 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
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 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1163 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1164 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1164 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1165 commandSocket->readFile( syncFileName() ); 1165 commandSocket->readFile( syncFileName() );
1166 while ( !mPisyncFinished ) { 1166 while ( !mPisyncFinished ) {
1167 //qDebug("waiting "); 1167 //qDebug("waiting ");
1168 qApp->processEvents(); 1168 qApp->processEvents();
1169 } 1169 }
1170 } 1170 }
1171 ++startRemote; 1171 ++startRemote;
1172 ++startLocal; 1172 ++startLocal;
1173 } 1173 }
1174 mPisyncFinished = true; 1174 mPisyncFinished = true;
1175 } else { 1175 } else {
1176 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1176 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1177 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1177 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1178 commandSocket->readFile( syncFileName() ); 1178 commandSocket->readFile( syncFileName() );
1179 } 1179 }
1180} 1180}
1181 1181
1182void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1182void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1183{ 1183{
1184 //enum { success, errorW, errorR, quiet }; 1184 //enum { success, errorW, errorR, quiet };
1185 1185
1186 1186
1187 1187
1188 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1188 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1189 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1189 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1190 if ( state == KCommandSocket::errorPW ) 1190 if ( state == KCommandSocket::errorPW )
1191 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1191 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1192 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1192 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1193 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1193 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1194 else if ( state == KCommandSocket::errorCA ) 1194 else if ( state == KCommandSocket::errorCA )
1195 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1195 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1196 else if ( state == KCommandSocket::errorFI ) 1196 else if ( state == KCommandSocket::errorFI )
1197 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1197 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1198 else if ( state == KCommandSocket::errorED ) 1198 else if ( state == KCommandSocket::errorED )
1199 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1199 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1200 else if ( state == KCommandSocket::errorUN ) 1200 else if ( state == KCommandSocket::errorUN )
1201 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1201 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1202 delete s; 1202 delete s;
1203 if ( state == KCommandSocket::errorR ) { 1203 if ( state == KCommandSocket::errorR ) {
1204 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1204 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1205 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1205 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1206 commandSocket->sendStop(); 1206 commandSocket->sendStop();
1207 } 1207 }
1208 mPisyncFinished = true; 1208 mPisyncFinished = true;
1209 return; 1209 return;
1210 1210
1211 } else if ( state == KCommandSocket::errorW ) { 1211 } else if ( state == KCommandSocket::errorW ) {
1212 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1212 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1213 mPisyncFinished = true; 1213 mPisyncFinished = true;
1214 1214
1215 } else if ( state == KCommandSocket::successR ) { 1215 } else if ( state == KCommandSocket::successR ) {
1216 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1216 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1217 1217
1218 } else if ( state == KCommandSocket::successW ) { 1218 } else if ( state == KCommandSocket::successW ) {
1219 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1219 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1220 mPisyncFinished = true; 1220 mPisyncFinished = true;
1221 } else if ( state == KCommandSocket::quiet ){ 1221 } else if ( state == KCommandSocket::quiet ){
1222 qDebug("KSS: quiet "); 1222 qDebug("KSS: quiet ");
1223 mPisyncFinished = true; 1223 mPisyncFinished = true;
1224 } else { 1224 } else {
1225 qDebug("KSS: Error: unknown state: %d ", state); 1225 qDebug("KSS: Error: unknown state: %d ", state);
1226 mPisyncFinished = true; 1226 mPisyncFinished = true;
1227 } 1227 }
1228 1228
1229 delete s; 1229 delete s;
1230} 1230}
1231 1231
1232void KSyncManager::readFileFromSocket() 1232void KSyncManager::readFileFromSocket()
1233{ 1233{
1234 QString fileName = syncFileName(); 1234 QString fileName = syncFileName();
1235 bool syncOK = true; 1235 bool syncOK = true;
1236 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1236 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1237 if ( ! syncWithFile( fileName , true ) ) { 1237 if ( ! syncWithFile( fileName , true ) ) {
1238 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1238 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1239 syncOK = false; 1239 syncOK = false;
1240 } 1240 }
1241 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1241 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1242 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1242 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1243 if ( mWriteBackFile && syncOK ) { 1243 if ( mWriteBackFile && syncOK ) {
1244 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); 1244 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1245 commandSocket->writeFile( fileName ); 1245 commandSocket->writeFile( fileName );
1246 } 1246 }
1247 else { 1247 else {
1248 commandSocket->sendStop(); 1248 commandSocket->sendStop();
1249 if ( syncOK ) 1249 if ( syncOK )
1250 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1250 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1251 mPisyncFinished = true; 1251 mPisyncFinished = true;
1252 } 1252 }
1253} 1253}
1254 1254
1255KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1255KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1256{ 1256{
1257 mPassWord = pw; 1257 mPassWord = pw;
1258 mSocket = 0; 1258 mSocket = 0;
1259 mSyncActionDialog = 0; 1259 mSyncActionDialog = 0;
1260 blockRC = false; 1260 blockRC = false;
1261 mErrorMessage = 0; 1261 mErrorMessage = 0;
1262} 1262}
1263 1263
1264void KServerSocket::newConnection ( int socket ) 1264void KServerSocket::newConnection ( int socket )
1265{ 1265{
1266 // qDebug("KServerSocket:New connection %d ", socket); 1266 // qDebug("KServerSocket:New connection %d ", socket);
1267 if ( mSocket ) { 1267 if ( mSocket ) {
1268 qDebug("KSS::newConnection Socket deleted! "); 1268 qDebug("KSS::newConnection Socket deleted! ");
1269 delete mSocket; 1269 delete mSocket;
1270 mSocket = 0; 1270 mSocket = 0;
1271 } 1271 }
1272 mSocket = new QSocket( this ); 1272 mSocket = new QSocket( this );
1273 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1273 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1274 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1274 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1275 mSocket->setSocket( socket ); 1275 mSocket->setSocket( socket );
1276} 1276}
1277 1277
1278void KServerSocket::discardClient() 1278void KServerSocket::discardClient()
1279{ 1279{
1280 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1280 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1281} 1281}
1282void KServerSocket::deleteSocket() 1282void KServerSocket::deleteSocket()
1283{ 1283{
1284 qDebug("KSS::deleteSocket"); 1284 qDebug("KSS::deleteSocket");
1285 if ( mSocket ) { 1285 if ( mSocket ) {
1286 delete mSocket; 1286 delete mSocket;
1287 mSocket = 0; 1287 mSocket = 0;
1288 } 1288 }
1289 if ( mErrorMessage ) 1289 if ( mErrorMessage )
1290 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1290 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1291} 1291}
1292void KServerSocket::readClient() 1292void KServerSocket::readClient()
1293{ 1293{
1294 if ( blockRC ) 1294 if ( blockRC )
1295 return; 1295 return;
1296 if ( mSocket == 0 ) { 1296 if ( mSocket == 0 ) {
1297 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1297 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1298 return; 1298 return;
1299 } 1299 }
1300 if ( mErrorMessage ) { 1300 if ( mErrorMessage ) {
1301 mErrorMessage = 999; 1301 mErrorMessage = 999;
1302 error_connect("ERROR_ED\r\n\r\n"); 1302 error_connect("ERROR_ED\r\n\r\n");
1303 return; 1303 return;
1304 } 1304 }
1305 mResource = ""; 1305 mResource = "";
1306 mErrorMessage = 0; 1306 mErrorMessage = 0;
1307 //qDebug("KServerSocket::readClient()"); 1307 //qDebug("KServerSocket::readClient()");
1308 if ( mSocket->canReadLine() ) { 1308 if ( mSocket->canReadLine() ) {
1309 QString line = mSocket->readLine(); 1309 QString line = mSocket->readLine();
1310 //qDebug("KServerSocket readline: %s ", line.latin1()); 1310 //qDebug("KServerSocket readline: %s ", line.latin1());
1311 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1311 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1312 if ( tokens[0] == "GET" ) { 1312 if ( tokens[0] == "GET" ) {
1313 if ( tokens[1] == mPassWord ) { 1313 if ( tokens[1] == mPassWord ) {
1314 //emit sendFile( mSocket ); 1314 //emit sendFile( mSocket );
1315 bool ok = false; 1315 bool ok = false;
1316 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1316 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1317 if ( ok ) { 1317 if ( ok ) {
1318 KSyncManager::mRequestedSyncEvent = dt; 1318 KSyncManager::mRequestedSyncEvent = dt;
1319 } 1319 }
1320 else 1320 else
1321 KSyncManager::mRequestedSyncEvent = QDateTime(); 1321 KSyncManager::mRequestedSyncEvent = QDateTime();
1322 mResource =tokens[3]; 1322 mResource =tokens[3];
1323 send_file(); 1323 send_file();
1324 } 1324 }
1325 else { 1325 else {
1326 mErrorMessage = 1; 1326 mErrorMessage = 1;
1327 error_connect("ERROR_PW\r\n\r\n"); 1327 error_connect("ERROR_PW\r\n\r\n");
1328 } 1328 }
1329 } 1329 }
1330 if ( tokens[0] == "PUT" ) { 1330 if ( tokens[0] == "PUT" ) {
1331 if ( tokens[1] == mPassWord ) { 1331 if ( tokens[1] == mPassWord ) {
1332 //emit getFile( mSocket ); 1332 //emit getFile( mSocket );
1333 blockRC = true; 1333 blockRC = true;
1334 mResource =tokens[2]; 1334 mResource =tokens[2];
1335 get_file(); 1335 get_file();
1336 } 1336 }
1337 else { 1337 else {
1338 mErrorMessage = 2; 1338 mErrorMessage = 2;
1339 error_connect("ERROR_PW\r\n\r\n"); 1339 error_connect("ERROR_PW\r\n\r\n");
1340 end_connect(); 1340 end_connect();
1341 } 1341 }
1342 } 1342 }
1343 if ( tokens[0] == "STOP" ) { 1343 if ( tokens[0] == "STOP" ) {
1344 //emit endConnect(); 1344 //emit endConnect();
1345 end_connect(); 1345 end_connect();
1346 } 1346 }
1347 } 1347 }
1348} 1348}
1349void KServerSocket::displayErrorMessage() 1349void KServerSocket::displayErrorMessage()
1350{ 1350{
1351 if ( mErrorMessage == 1 ) { 1351 if ( mErrorMessage == 1 ) {
1352 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error")); 1352 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1353 mErrorMessage = 0; 1353 mErrorMessage = 0;
1354 } 1354 }
1355 else if ( mErrorMessage == 2 ) { 1355 else if ( mErrorMessage == 2 ) {
1356 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error")); 1356 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1357 mErrorMessage = 0; 1357 mErrorMessage = 0;
1358 } 1358 }
1359} 1359}
1360void KServerSocket::error_connect( QString errmess ) 1360void KServerSocket::error_connect( QString errmess )
1361{ 1361{
1362 QTextStream os( mSocket ); 1362 QTextStream os( mSocket );
1363 os.setEncoding( QTextStream::Latin1 ); 1363 os.setEncoding( QTextStream::Latin1 );
1364 os << errmess ; 1364 os << errmess ;
1365 mSocket->close(); 1365 mSocket->close();
1366 if ( mSocket->state() == QSocket::Idle ) { 1366 if ( mSocket->state() == QSocket::Idle ) {
1367 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1367 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1368 } 1368 }
1369} 1369}
1370void KServerSocket::end_connect() 1370void KServerSocket::end_connect()
1371{ 1371{
1372 delete mSyncActionDialog; 1372 delete mSyncActionDialog;
1373 mSyncActionDialog = 0; 1373 mSyncActionDialog = 0;
1374} 1374}
1375void KServerSocket::send_file() 1375void KServerSocket::send_file()
1376{ 1376{
1377 //qDebug("MainWindow::sendFile(QSocket* s) "); 1377 //qDebug("MainWindow::sendFile(QSocket* s) ");
1378 if ( mSyncActionDialog ) 1378 if ( mSyncActionDialog )
1379 delete mSyncActionDialog; 1379 delete mSyncActionDialog;
1380 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1380 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1381 mSyncActionDialog->setCaption(i18n("Received sync request")); 1381 mSyncActionDialog->setCaption(i18n("Received sync request"));
1382 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1382 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1383 label->setAlignment ( Qt::AlignHCenter ); 1383 label->setAlignment ( Qt::AlignHCenter );
1384 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1384 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1385 lay->addWidget( label); 1385 lay->addWidget( label);
1386 lay->setMargin(7); 1386 lay->setMargin(7);
1387 lay->setSpacing(7); 1387 lay->setSpacing(7);
1388 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1388 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1389 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1389 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1390 //secs = 333; 1390 //secs = 333;
1391 if ( secs < 0 ) 1391 if ( secs < 0 )
1392 secs = secs * (-1); 1392 secs = secs * (-1);
1393 if ( secs > 30 ) 1393 if ( secs > 30 )
1394 //if ( true ) 1394 //if ( true )
1395 { 1395 {
1396 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1396 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1397 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1397 QLabel* label = new QLabel( warning, mSyncActionDialog );
1398 label->setAlignment ( Qt::AlignHCenter ); 1398 label->setAlignment ( Qt::AlignHCenter );
1399 lay->addWidget( label); 1399 lay->addWidget( label);
1400 if ( secs > 180 ) 1400 if ( secs > 180 )
1401 { 1401 {
1402 if ( secs > 300 ) { 1402 if ( secs > 300 ) {
1403 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!"))) { 1403 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!"))) {
1404 qDebug("KSS::Sync cancelled ,cs"); 1404 qDebug("KSS::Sync cancelled ,cs");
1405 mErrorMessage = 0; 1405 mErrorMessage = 0;
1406 end_connect(); 1406 end_connect();
1407 error_connect("ERROR_CA\r\n\r\n"); 1407 error_connect("ERROR_CA\r\n\r\n");
1408 return ; 1408 return ;
1409 } 1409 }
1410 } 1410 }
1411 QFont f = label->font(); 1411 QFont f = label->font();
1412 f.setPointSize ( f.pointSize() *2 ); 1412 f.setPointSize ( f.pointSize() *2 );
1413 f. setBold (true ); 1413 f. setBold (true );
1414 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1414 QLabel* label = new QLabel( warning, mSyncActionDialog );
1415 label->setFont( f ); 1415 label->setFont( f );
1416 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1416 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1417 label->setText( warning ); 1417 label->setText( warning );
1418 label->setAlignment ( Qt::AlignHCenter ); 1418 label->setAlignment ( Qt::AlignHCenter );
1419 lay->addWidget( label); 1419 lay->addWidget( label);
1420 mSyncActionDialog->setFixedSize( 230, 300); 1420 mSyncActionDialog->setFixedSize( 230, 300);
1421 } else { 1421 } else {
1422 mSyncActionDialog->setFixedSize( 230, 200); 1422 mSyncActionDialog->setFixedSize( 230, 200);
1423 } 1423 }
1424 } else { 1424 } else {
1425 mSyncActionDialog->setFixedSize( 230, 120); 1425 mSyncActionDialog->setFixedSize( 230, 120);
1426 } 1426 }
1427 } else 1427 } else
1428 mSyncActionDialog->setFixedSize( 230, 120); 1428 mSyncActionDialog->setFixedSize( 230, 120);
1429 mSyncActionDialog->show(); 1429 mSyncActionDialog->show();
1430 mSyncActionDialog->raise(); 1430 mSyncActionDialog->raise();
1431 emit request_file(mResource); 1431 emit request_file(mResource);
1432 emit request_file(); 1432 emit request_file();
1433 qApp->processEvents(); 1433 qApp->processEvents();
1434 QString fileName = mFileName; 1434 QString fileName = mFileName;
1435 QFile file( fileName ); 1435 QFile file( fileName );
1436 if (!file.open( IO_ReadOnly ) ) { 1436 if (!file.open( IO_ReadOnly ) ) {
1437 mErrorMessage = 0; 1437 mErrorMessage = 0;
1438 end_connect(); 1438 end_connect();
1439 error_connect("ERROR_FI\r\n\r\n"); 1439 error_connect("ERROR_FI\r\n\r\n");
1440 return ; 1440 return ;
1441 } 1441 }
1442 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1442 mSyncActionDialog->setCaption( i18n("Sending file...") );
1443 QTextStream ts( &file ); 1443 QTextStream ts( &file );
1444 ts.setEncoding( QTextStream::Latin1 ); 1444 ts.setEncoding( QTextStream::Latin1 );
1445 1445
1446 QTextStream os( mSocket ); 1446 QTextStream os( mSocket );
1447 os.setEncoding( QTextStream::Latin1 ); 1447 os.setEncoding( QTextStream::Latin1 );
1448 while ( ! ts.atEnd() ) { 1448 while ( ! ts.atEnd() ) {
1449 os << ts.readLine() << "\r\n"; 1449 os << ts.readLine() << "\r\n";
1450 } 1450 }
1451 os << "\r\n"; 1451 os << "\r\n";
1452 //os << ts.read(); 1452 //os << ts.read();
1453 file.close(); 1453 file.close();
1454 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1454 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1455 mSocket->close(); 1455 mSocket->close();
1456 if ( mSocket->state() == QSocket::Idle ) 1456 if ( mSocket->state() == QSocket::Idle )
1457 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1457 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1458} 1458}
1459void KServerSocket::get_file() 1459void KServerSocket::get_file()
1460{ 1460{
1461 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1461 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1462 1462
1463 piTime.start(); 1463 piTime.start();
1464 piFileString = ""; 1464 piFileString = "";
1465 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1465 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1466} 1466}
1467 1467
1468 1468
1469void KServerSocket::readBackFileFromSocket() 1469void KServerSocket::readBackFileFromSocket()
1470{ 1470{
1471 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1471 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1472 while ( mSocket->canReadLine () ) { 1472 while ( mSocket->canReadLine () ) {
1473 piTime.restart(); 1473 piTime.restart();
1474 QString line = mSocket->readLine (); 1474 QString line = mSocket->readLine ();
1475 piFileString += line; 1475 piFileString += line;
1476 //qDebug("readline: %s ", line.latin1()); 1476 //qDebug("readline: %s ", line.latin1());
1477 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1477 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1478 1478
1479 } 1479 }
1480 if ( piTime.elapsed () < 3000 ) { 1480 if ( piTime.elapsed () < 3000 ) {
1481 // wait for more 1481 // wait for more
1482 //qDebug("waitformore "); 1482 //qDebug("waitformore ");
1483 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1483 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1484 return; 1484 return;
1485 } 1485 }
1486 QString fileName = mFileName; 1486 QString fileName = mFileName;
1487 QFile file ( fileName ); 1487 QFile file ( fileName );
1488 if (!file.open( IO_WriteOnly ) ) { 1488 if (!file.open( IO_WriteOnly ) ) {
1489 delete mSyncActionDialog; 1489 delete mSyncActionDialog;
1490 mSyncActionDialog = 0; 1490 mSyncActionDialog = 0;
1491 qDebug("KSS:Error open read back file "); 1491 qDebug("KSS:Error open read back file ");
1492 piFileString = ""; 1492 piFileString = "";
1493 emit file_received( false, mResource); 1493 emit file_received( false, mResource);
1494 emit file_received( false); 1494 emit file_received( false);
1495 blockRC = false; 1495 blockRC = false;
1496 return ; 1496 return ;
1497 1497
1498 } 1498 }
1499 1499
1500 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1500 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1501 QTextStream ts ( &file ); 1501 QTextStream ts ( &file );
1502 ts.setEncoding( QTextStream::Latin1 ); 1502 ts.setEncoding( QTextStream::Latin1 );
1503 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1503 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1504 ts << piFileString; 1504 ts << piFileString;
1505 mSocket->close(); 1505 mSocket->close();
1506 if ( mSocket->state() == QSocket::Idle ) 1506 if ( mSocket->state() == QSocket::Idle )
1507 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1507 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1508 file.close(); 1508 file.close();
1509 piFileString = ""; 1509 piFileString = "";
1510 emit file_received( true, mResource ); 1510 emit file_received( true, mResource );
1511 emit file_received( true); 1511 emit file_received( true);
1512 delete mSyncActionDialog; 1512 delete mSyncActionDialog;
1513 mSyncActionDialog = 0; 1513 mSyncActionDialog = 0;
1514 blockRC = false; 1514 blockRC = false;
1515 1515
1516} 1516}
1517 1517
1518KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1518KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1519{ 1519{
1520 mRemoteResource = remres; 1520 mRemoteResource = remres;
1521 if ( mRemoteResource.isEmpty() ) 1521 if ( mRemoteResource.isEmpty() )
1522 mRemoteResource = "ALL"; 1522 mRemoteResource = "ALL";
1523 else 1523 else
1524 mRemoteResource.replace (QRegExp (" "),"_" ); 1524 mRemoteResource.replace (QRegExp (" "),"_" );
1525 mPassWord = password; 1525 mPassWord = password;
1526 mSocket = 0; 1526 mSocket = 0;
1527 mFirst = false; 1527 mFirst = false;
1528 mFirstLine = true; 1528 mFirstLine = true;
1529 mPort = port; 1529 mPort = port;
1530 mHost = host; 1530 mHost = host;
1531 tlw = cap; 1531 tlw = cap;
1532 mRetVal = quiet; 1532 mRetVal = quiet;
1533 mTimerSocket = new QTimer ( this ); 1533 mTimerSocket = new QTimer ( this );
1534 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) ); 1534 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1535 mConnectProgress.setCaption( i18n("Pi-Sync") ); 1535 mConnectProgress.setCaption( i18n("Pi-Sync") );
1536 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) ); 1536 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1537 mConnectCount = -1; 1537 mConnectCount = -1;
1538} 1538}
1539void KCommandSocket::sendFileRequest() 1539void KCommandSocket::sendFileRequest()
1540{ 1540{
1541 if ( tlw ) 1541 if ( tlw )
1542 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1542 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1543 mConnectProgress.hide(); 1543 mConnectProgress.hide();
1544 mConnectCount = 300;mConnectMax = 300; 1544 mConnectCount = 300;mConnectMax = 300;
1545 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") ); 1545 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1546 mTimerSocket->start( 100, true ); 1546 mTimerSocket->start( 100, true );
1547 QTextStream os( mSocket ); 1547 QTextStream os( mSocket );
1548 os.setEncoding( QTextStream::Latin1 ); 1548 os.setEncoding( QTextStream::Latin1 );
1549 1549
1550 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1550 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1551 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n"; 1551 os << "GET " << mPassWord << curDt << " " << mRemoteResource << "\r\n\r\n";
1552} 1552}
1553 1553
1554void KCommandSocket::readFile( QString fn ) 1554void KCommandSocket::readFile( QString fn )
1555{ 1555{
1556 if ( !mSocket ) { 1556 if ( !mSocket ) {
1557 mSocket = new QSocket( this ); 1557 mSocket = new QSocket( this );
1558 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1558 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1559 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1559 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1560 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1560 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1561 } 1561 }
1562 mFileString = ""; 1562 mFileString = "";
1563 mFileName = fn; 1563 mFileName = fn;
1564 mFirst = true; 1564 mFirst = true;
1565 if ( tlw ) 1565 if ( tlw )
1566 tlw->setCaption( i18n("Trying to connect to remote...") ); 1566 tlw->setCaption( i18n("Trying to connect to remote...") );
1567 mConnectCount = 30;mConnectMax = 30; 1567 mConnectCount = 30;mConnectMax = 30;
1568 mTimerSocket->start( 1000, true ); 1568 mTimerSocket->start( 1000, true );
1569 mSocket->connectToHost( mHost, mPort ); 1569 mSocket->connectToHost( mHost, mPort );
1570 qDebug("KSS: Waiting for connection"); 1570 qDebug("KSS: Waiting for connection");
1571} 1571}
1572void KCommandSocket::updateConnectDialog() 1572void KCommandSocket::updateConnectDialog()
1573{ 1573{
1574 1574
1575 if ( mConnectCount == mConnectMax ) { 1575 if ( mConnectCount == mConnectMax ) {
1576 //qDebug("MAXX %d", mConnectMax); 1576 //qDebug("MAXX %d", mConnectMax);
1577 mConnectProgress.setTotalSteps ( 30 ); 1577 mConnectProgress.setTotalSteps ( 30 );
1578 mConnectProgress.show(); 1578 mConnectProgress.show();
1579 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") ); 1579 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1580 } 1580 }
1581 //qDebug("updateConnectDialog() %d", mConnectCount); 1581 //qDebug("updateConnectDialog() %d", mConnectCount);
1582 mConnectProgress.raise(); 1582 mConnectProgress.raise();
1583 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 ); 1583 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1584 --mConnectCount; 1584 --mConnectCount;
1585 if ( mConnectCount > 0 ) 1585 if ( mConnectCount > 0 )
1586 mTimerSocket->start( 1000, true ); 1586 mTimerSocket->start( 1000, true );
1587 else 1587 else
1588 deleteSocket(); 1588 deleteSocket();
1589 1589
1590} 1590}
1591void KCommandSocket::writeFile( QString fileName ) 1591void KCommandSocket::writeFile( QString fileName )
1592{ 1592{
1593 if ( !mSocket ) { 1593 if ( !mSocket ) {
1594 mSocket = new QSocket( this ); 1594 mSocket = new QSocket( this );
1595 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1595 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1596 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1596 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1597 } 1597 }
1598 mFileName = fileName ; 1598 mFileName = fileName ;
1599 mConnectCount = 30;mConnectMax = 30; 1599 mConnectCount = 30;mConnectMax = 30;
1600 mTimerSocket->start( 1000, true ); 1600 mTimerSocket->start( 1000, true );
1601 mSocket->connectToHost( mHost, mPort ); 1601 mSocket->connectToHost( mHost, mPort );
1602} 1602}
1603void KCommandSocket::writeFileToSocket() 1603void KCommandSocket::writeFileToSocket()
1604{ 1604{
1605 mTimerSocket->stop(); 1605 mTimerSocket->stop();
1606 QFile file2( mFileName ); 1606 QFile file2( mFileName );
1607 if (!file2.open( IO_ReadOnly ) ) { 1607 if (!file2.open( IO_ReadOnly ) ) {
1608 mConnectProgress.hide(); 1608 mConnectProgress.hide();
1609 mConnectCount = -1; 1609 mConnectCount = -1;
1610 mRetVal= errorW; 1610 mRetVal= errorW;
1611 mSocket->close(); 1611 mSocket->close();
1612 if ( mSocket->state() == QSocket::Idle ) 1612 if ( mSocket->state() == QSocket::Idle )
1613 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1613 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1614 return ; 1614 return ;
1615 } 1615 }
1616 mConnectProgress.setTotalSteps ( file2.size() ); 1616 mConnectProgress.setTotalSteps ( file2.size() );
1617 mConnectProgress.show(); 1617 mConnectProgress.show();
1618 int count = 0; 1618 int count = 0;
1619 mConnectProgress.setLabelText( i18n("Sending back synced file...") ); 1619 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1620 mConnectProgress.setProgress( count ); 1620 mConnectProgress.setProgress( count );
1621 mConnectProgress.blockSignals( true ); 1621 mConnectProgress.blockSignals( true );
1622 QTextStream ts2( &file2 ); 1622 QTextStream ts2( &file2 );
1623 ts2.setEncoding( QTextStream::Latin1 ); 1623 ts2.setEncoding( QTextStream::Latin1 );
1624 QTextStream os2( mSocket ); 1624 QTextStream os2( mSocket );
1625 os2.setEncoding( QTextStream::Latin1 ); 1625 os2.setEncoding( QTextStream::Latin1 );
1626 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";; 1626 os2 << "PUT " << mPassWord << " " << mRemoteResource << "\r\n\r\n";;
1627 int byteCount = 0; 1627 int byteCount = 0;
1628 int byteMax = file2.size()/53; 1628 int byteMax = file2.size()/53;
1629 while ( ! ts2.atEnd() ) { 1629 while ( ! ts2.atEnd() ) {
1630 qApp->processEvents(); 1630 qApp->processEvents();
1631 if ( byteCount > byteMax ) { 1631 if ( byteCount > byteMax ) {
1632 byteCount = 0; 1632 byteCount = 0;
1633 mConnectProgress.setProgress( count ); 1633 mConnectProgress.setProgress( count );
1634 } 1634 }
1635 QString temp = ts2.readLine(); 1635 QString temp = ts2.readLine();
1636 count += temp.length(); 1636 count += temp.length();
1637 byteCount += temp.length(); 1637 byteCount += temp.length();
1638 os2 << temp << "\r\n"; 1638 os2 << temp << "\r\n";
1639 } 1639 }
1640 file2.close(); 1640 file2.close();
1641 mConnectProgress.hide(); 1641 mConnectProgress.hide();
1642 mConnectCount = -1; 1642 mConnectCount = -1;
1643 os2 << "\r\n"; 1643 os2 << "\r\n";
1644 mRetVal= successW; 1644 mRetVal= successW;
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 mConnectProgress.blockSignals( false ); 1648 mConnectProgress.blockSignals( false );
1649} 1649}
1650void KCommandSocket::sendStop() 1650void KCommandSocket::sendStop()
1651{ 1651{
1652 if ( !mSocket ) { 1652 if ( !mSocket ) {
1653 mSocket = new QSocket( this ); 1653 mSocket = new QSocket( this );
1654 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1654 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1655 } 1655 }
1656 mSocket->connectToHost( mHost, mPort ); 1656 mSocket->connectToHost( mHost, mPort );
1657 QTextStream os2( mSocket ); 1657 QTextStream os2( mSocket );
1658 os2.setEncoding( QTextStream::Latin1 ); 1658 os2.setEncoding( QTextStream::Latin1 );
1659 os2 << "STOP\r\n\r\n"; 1659 os2 << "STOP\r\n\r\n";
1660 mSocket->close(); 1660 mSocket->close();
1661 if ( mSocket->state() == QSocket::Idle ) 1661 if ( mSocket->state() == QSocket::Idle )
1662 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1662 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1663} 1663}
1664 1664
1665void KCommandSocket::startReadFileFromSocket() 1665void KCommandSocket::startReadFileFromSocket()
1666{ 1666{
1667 if ( ! mFirst ) 1667 if ( ! mFirst )
1668 return; 1668 return;
1669 mConnectProgress.setLabelText( i18n("Receiving file from remote...") ); 1669 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1670 mFirst = false; 1670 mFirst = false;
1671 mFileString = ""; 1671 mFileString = "";
1672 mTime.start(); 1672 mTime.start();
1673 mFirstLine = true; 1673 mFirstLine = true;
1674 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1674 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1675 1675
1676} 1676}
1677void KCommandSocket::readFileFromSocket() 1677void KCommandSocket::readFileFromSocket()
1678{ 1678{
1679 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1679 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1680 while ( mSocket->canReadLine () ) { 1680 while ( mSocket->canReadLine () ) {
1681 mTime.restart(); 1681 mTime.restart();
1682 QString line = mSocket->readLine (); 1682 QString line = mSocket->readLine ();
1683 if ( mFirstLine ) { 1683 if ( mFirstLine ) {
1684 mFirstLine = false; 1684 mFirstLine = false;
1685 if ( line.left( 6 ) == "ERROR_" ) { 1685 if ( line.left( 6 ) == "ERROR_" ) {
1686 mTimerSocket->stop(); 1686 mTimerSocket->stop();
1687 mConnectCount = -1; 1687 mConnectCount = -1;
1688 if ( line.left( 8 ) == "ERROR_PW" ) { 1688 if ( line.left( 8 ) == "ERROR_PW" ) {
1689 mRetVal = errorPW; 1689 mRetVal = errorPW;
1690 deleteSocket(); 1690 deleteSocket();
1691 return ; 1691 return ;
1692 } 1692 }
1693 if ( line.left( 8 ) == "ERROR_CA" ) { 1693 if ( line.left( 8 ) == "ERROR_CA" ) {
1694 mRetVal = errorCA; 1694 mRetVal = errorCA;
1695 deleteSocket(); 1695 deleteSocket();
1696 return ; 1696 return ;
1697 } 1697 }
1698 if ( line.left( 8 ) == "ERROR_FI" ) { 1698 if ( line.left( 8 ) == "ERROR_FI" ) {
1699 mRetVal = errorFI; 1699 mRetVal = errorFI;
1700 deleteSocket(); 1700 deleteSocket();
1701 return ; 1701 return ;
1702 } 1702 }
1703 if ( line.left( 8 ) == "ERROR_ED" ) { 1703 if ( line.left( 8 ) == "ERROR_ED" ) {
1704 mRetVal = errorED; 1704 mRetVal = errorED;
1705 deleteSocket(); 1705 deleteSocket();
1706 return ; 1706 return ;
1707 } 1707 }
1708 mRetVal = errorUN; 1708 mRetVal = errorUN;
1709 deleteSocket(); 1709 deleteSocket();
1710 return ; 1710 return ;
1711 } 1711 }
1712 } 1712 }
1713 mFileString += line; 1713 mFileString += line;
1714 //qDebug("readline: %s ", line.latin1()); 1714 //qDebug("readline: %s ", line.latin1());
1715 } 1715 }
1716 if ( mTime.elapsed () < 3000 ) { 1716 if ( mTime.elapsed () < 3000 ) {
1717 // wait for more 1717 // wait for more
1718 //qDebug("waitformore "); 1718 //qDebug("waitformore ");
1719 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1719 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1720 return; 1720 return;
1721 } 1721 }
1722 mTimerSocket->stop(); 1722 mTimerSocket->stop();
1723 mConnectCount = -1; 1723 mConnectCount = -1;
1724 mConnectProgress.hide(); 1724 mConnectProgress.hide();
1725 QString fileName = mFileName; 1725 QString fileName = mFileName;
1726 QFile file ( fileName ); 1726 QFile file ( fileName );
1727 if (!file.open( IO_WriteOnly ) ) { 1727 if (!file.open( IO_WriteOnly ) ) {
1728 mFileString = ""; 1728 mFileString = "";
1729 mRetVal = errorR; 1729 mRetVal = errorR;
1730 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1730 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1731 deleteSocket(); 1731 deleteSocket();
1732 return ; 1732 return ;
1733 1733
1734 } 1734 }
1735 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1735 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1736 QTextStream ts ( &file ); 1736 QTextStream ts ( &file );
1737 ts.setEncoding( QTextStream::Latin1 ); 1737 ts.setEncoding( QTextStream::Latin1 );
1738 ts << mFileString; 1738 ts << mFileString;
1739 file.close(); 1739 file.close();
1740 mFileString = ""; 1740 mFileString = "";
1741 mRetVal = successR; 1741 mRetVal = successR;
1742 mSocket->close(); 1742 mSocket->close();
1743 // if state is not idle, deleteSocket(); is called via 1743 // if state is not idle, deleteSocket(); is called via
1744 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1744 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1745 if ( mSocket->state() == QSocket::Idle ) 1745 if ( mSocket->state() == QSocket::Idle )
1746 deleteSocket(); 1746 deleteSocket();
1747} 1747}
1748 1748
1749void KCommandSocket::deleteSocket() 1749void KCommandSocket::deleteSocket()
1750{ 1750{
1751 //qDebug("KCommandSocket::deleteSocket() "); 1751 //qDebug("KCommandSocket::deleteSocket() ");
1752 mConnectProgress.hide(); 1752 mConnectProgress.hide();
1753 1753
1754 if ( mConnectCount >= 0 ) { 1754 if ( mConnectCount >= 0 ) {
1755 mTimerSocket->stop(); 1755 mTimerSocket->stop();
1756 mRetVal = errorTO; 1756 mRetVal = errorTO;
1757 qDebug("KCS::Connection to remote host timed out"); 1757 qDebug("KCS::Connection to remote host timed out");
1758 if ( mSocket ) { 1758 if ( mSocket ) {
1759 mSocket->close(); 1759 mSocket->close();
1760 //if ( mSocket->state() == QSocket::Idle ) 1760 //if ( mSocket->state() == QSocket::Idle )
1761 // deleteSocket(); 1761 // deleteSocket();
1762 delete mSocket; 1762 delete mSocket;
1763 mSocket = 0; 1763 mSocket = 0;
1764 } 1764 }
1765 if ( mConnectCount == 0 ) 1765 if ( mConnectCount == 0 )
1766 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1766 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1767 else if ( tlw ) 1767 else if ( tlw )
1768 tlw->setCaption( i18n("Connection to remote host cancelled!") ); 1768 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1769 emit commandFinished( this, mRetVal ); 1769 emit commandFinished( this, mRetVal );
1770 return; 1770 return;
1771 } 1771 }
1772 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1772 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1773 if ( mSocket) 1773 if ( mSocket)
1774 delete mSocket; 1774 delete mSocket;
1775 mSocket = 0; 1775 mSocket = 0;
1776 qDebug("commandFinished "); 1776 //qDebug("commandFinished ");
1777 emit commandFinished( this, mRetVal ); 1777 emit commandFinished( this, mRetVal );
1778} 1778}