summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-11-25 17:41:25 (UTC)
committer zautrix <zautrix>2005-11-25 17:41:25 (UTC)
commit279e183c0325cd9565605f60af0215bb9bfdc825 (patch) (unidiff)
tree43ab776cd108874819e7c6e73070a7d989a9078f
parent794a5204686ad9bfc16172b01db35f1f3b7683e5 (diff)
downloadkdepimpi-279e183c0325cd9565605f60af0215bb9bfdc825.zip
kdepimpi-279e183c0325cd9565605f60af0215bb9bfdc825.tar.gz
kdepimpi-279e183c0325cd9565605f60af0215bb9bfdc825.tar.bz2
sync
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp73
-rw-r--r--korganizer/calendarview.h4
-rw-r--r--korganizer/mainwindow.cpp14
-rw-r--r--korganizer/mainwindow.h4
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/calendarlocal.cpp16
-rw-r--r--libkcal/calendarlocal.h1
-rw-r--r--libkdepim/ksyncmanager.cpp24
-rw-r--r--libkdepim/ksyncmanager.h6
9 files changed, 118 insertions, 25 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 8965d3b..307027a 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -273,192 +273,193 @@ void MissedAlarmTextBrowser::setSource(const QString & n)
273class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
274{ 274{
275 public: 275 public:
276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
277 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
278 { 278 {
279 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
280 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
281 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
282 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
284 lay->addWidget( format ); 284 lay->addWidget( format );
285 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
287 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
288 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
289 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
290 vcal->setChecked( true ); 290 vcal->setChecked( true );
291 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
292 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
293 tz->setChecked( true ); 293 tz->setChecked( true );
294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
295 lay->addWidget( ok ); 295 lay->addWidget( ok );
296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
297 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
300 resize( 200, 200 ); 300 resize( 200, 200 );
301 } 301 }
302 302
303 bool beamVcal() { return vcal->isChecked(); } 303 bool beamVcal() { return vcal->isChecked(); }
304 bool beamLocal() { return local->isChecked(); } 304 bool beamLocal() { return local->isChecked(); }
305private: 305private:
306 QRadioButton* vcal, *ical, *local, *tz; 306 QRadioButton* vcal, *ical, *local, *tz;
307}; 307};
308class KOCatPrefs : public QDialog 308class KOCatPrefs : public QDialog
309{ 309{
310 public: 310 public:
311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 311 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
312 QDialog( parent, name, true ) 312 QDialog( parent, name, true )
313 { 313 {
314 setCaption( i18n("Manage new Categories") ); 314 setCaption( i18n("Manage new Categories") );
315 QVBoxLayout* lay = new QVBoxLayout( this ); 315 QVBoxLayout* lay = new QVBoxLayout( this );
316 lay->setSpacing( 3 ); 316 lay->setSpacing( 3 );
317 lay->setMargin( 3 ); 317 lay->setMargin( 3 );
318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this ); 318 QLabel * lab = new QLabel( i18n("After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:"), this );
319 lay->addWidget( lab ); 319 lay->addWidget( lab );
320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 320 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
321 lay->addWidget( format ); 321 lay->addWidget( format );
322 format->setExclusive ( true ) ; 322 format->setExclusive ( true ) ;
323 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 323 addCatBut = new QRadioButton(i18n("Add to category list"), format );
324 new QRadioButton(i18n("Remove from Events/Todos"), format ); 324 new QRadioButton(i18n("Remove from Events/Todos"), format );
325 addCatBut->setChecked( true ); 325 addCatBut->setChecked( true );
326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this ); 326 QPushButton * ok = new QPushButton( i18n("Change category list now!"), this );
327 lay->addWidget( ok ); 327 lay->addWidget( ok );
328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 328 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
329 lay->addWidget( cancel ); 329 lay->addWidget( cancel );
330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 330 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 331 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
332 resize( 200, 200 ); 332 resize( 200, 200 );
333 } 333 }
334 334
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mMultiResourceSync = false;
369 flag_blockConflict = false; 370 flag_blockConflict = false;
370 flag_blockScrollBar = false; 371 flag_blockScrollBar = false;
371 flag_checkFileFirsttime = true; 372 flag_checkFileFirsttime = true;
372 flag_clearallviewsEventDisplay = false; 373 flag_clearallviewsEventDisplay = false;
373 flag_clearallviewsupdateView = false; 374 flag_clearallviewsupdateView = false;
374 mNextAlarmDateTime = QDateTime::currentDateTime(); 375 mNextAlarmDateTime = QDateTime::currentDateTime();
375 setFocusPolicy (NoFocus ); 376 setFocusPolicy (NoFocus );
376 mViewerCallerIsSearchDialog = false; 377 mViewerCallerIsSearchDialog = false;
377 mBlockShowDates = false; 378 mBlockShowDates = false;
378 mConflictingEvent = 0; 379 mConflictingEvent = 0;
379 mDatePickerMode = 0; 380 mDatePickerMode = 0;
380 mCurrentSyncDevice = ""; 381 mCurrentSyncDevice = "";
381 mViewManager = new KOViewManager( this ); 382 mViewManager = new KOViewManager( this );
382 mDialogManager = new KODialogManager( this ); 383 mDialogManager = new KODialogManager( this );
383 mEventViewerDialog = 0; 384 mEventViewerDialog = 0;
384 mModified = false; 385 mModified = false;
385 mReadOnly = false; 386 mReadOnly = false;
386 mSelectedIncidence = 0; 387 mSelectedIncidence = 0;
387 mCalPrinter = 0; 388 mCalPrinter = 0;
388 mFilters.setAutoDelete(true); 389 mFilters.setAutoDelete(true);
389 390
390 mCalendar->registerObserver( this ); 391 mCalendar->registerObserver( this );
391 // TODO: Make sure that view is updated, when calendar is changed. 392 // TODO: Make sure that view is updated, when calendar is changed.
392 393
393 mStorage = new FileStorage( mCalendar ); 394 mStorage = new FileStorage( mCalendar );
394 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 395 mNavigator = new DateNavigator( this, "datevav", mViewManager );
395 396
396 QBoxLayout *topLayout = (QBoxLayout*)layout(); 397 QBoxLayout *topLayout = (QBoxLayout*)layout();
397#ifndef KORG_NOSPLITTER 398#ifndef KORG_NOSPLITTER
398 // create the main layout frames. 399 // create the main layout frames.
399 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 400 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
400 topLayout->addWidget(mPanner); 401 topLayout->addWidget(mPanner);
401 402
402 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 403 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
403 "CalendarView::LeftFrame"); 404 "CalendarView::LeftFrame");
404 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 405 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
405 406
406 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 407 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
407 "CalendarView::DateNavigator" ); 408 "CalendarView::DateNavigator" );
408 409
409 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 410 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
410 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 411 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
411 mTodoList->setNavigator( mNavigator ); 412 mTodoList->setNavigator( mNavigator );
412 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 413 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
413 414
414#ifdef KORG_NORESOURCEVIEW 415#ifdef KORG_NORESOURCEVIEW
415 mResourceView = 0; 416 mResourceView = 0;
416#else 417#else
417 if ( mResourceManager ) { 418 if ( mResourceManager ) {
418 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 419 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
419 mResourceView->updateView(); 420 mResourceView->updateView();
420 connect( mResourceView, SIGNAL( resourcesChanged() ), 421 connect( mResourceView, SIGNAL( resourcesChanged() ),
421 SLOT( updateView() ) ); 422 SLOT( updateView() ) );
422 } else { 423 } else {
423 mResourceView = 0; 424 mResourceView = 0;
424 } 425 }
425#endif 426#endif
426 QWidget *rightBox = new QWidget( mPanner ); 427 QWidget *rightBox = new QWidget( mPanner );
427 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 428 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
428 429
429 mRightFrame = new QWidgetStack( rightBox ); 430 mRightFrame = new QWidgetStack( rightBox );
430 rightLayout->addWidget( mRightFrame, 1 ); 431 rightLayout->addWidget( mRightFrame, 1 );
431 432
432 mLeftFrame = mLeftSplitter; 433 mLeftFrame = mLeftSplitter;
433#else 434#else
434 //QWidget *mainBox = new QWidget( this ); 435 //QWidget *mainBox = new QWidget( this );
435 //QWidget *leftFrame = new QWidget( mainBox ); 436 //QWidget *leftFrame = new QWidget( mainBox );
436 //QBoxLayout * mainBoxLayout; 437 //QBoxLayout * mainBoxLayout;
437 if ( KOPrefs::instance()->mVerticalScreen ) { 438 if ( KOPrefs::instance()->mVerticalScreen ) {
438 //mainBoxLayout = new QVBoxLayout(mainBox); 439 //mainBoxLayout = new QVBoxLayout(mainBox);
439 //leftFrameLayout = new QHBoxLayout(leftFrame ); 440 //leftFrameLayout = new QHBoxLayout(leftFrame );
440 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 441 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
441 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 442 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
442 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 443 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
443 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 444 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
444 } else { 445 } else {
445 //mainBoxLayout = new QHBoxLayout(mainBox); 446 //mainBoxLayout = new QHBoxLayout(mainBox);
446 //leftFrameLayout = new QVBoxLayout(leftFrame ); 447 //leftFrameLayout = new QVBoxLayout(leftFrame );
447 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 448 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
448 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 449 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
449 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 450 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
450 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 451 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
451 } 452 }
452 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 453 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
453 //QBoxLayout * leftFrameLayout; 454 //QBoxLayout * leftFrameLayout;
454 topLayout->addWidget( mMainFrame ); 455 topLayout->addWidget( mMainFrame );
455#ifdef DESKTOP_VERSION 456#ifdef DESKTOP_VERSION
456 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 457 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
457 topLayout->addWidget( mDateScrollBar ); 458 topLayout->addWidget( mDateScrollBar );
458 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 459 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
459 if ( QApplication::desktop()->width() < 800 ) 460 if ( QApplication::desktop()->width() < 800 )
460 mDateScrollBar->hide(); 461 mDateScrollBar->hide();
461#endif 462#endif
462 //mainBoxLayout->addWidget (mLeftFrame); 463 //mainBoxLayout->addWidget (mLeftFrame);
463 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 464 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
464 "CalendarView::DateNavigator" ); 465 "CalendarView::DateNavigator" );
@@ -1459,192 +1460,193 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
1459 }//else //debug only 1460 }//else //debug only
1460 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1461 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1461 } 1462 }
1462 int result; 1463 int result;
1463 bool localIsNew; 1464 bool localIsNew;
1464 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1465 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1465 1466
1466 1467
1467 // ************************************************ 1468 // ************************************************
1468 // ************************************************ 1469 // ************************************************
1469 // ************************************************ 1470 // ************************************************
1470 // We may have that lastSync > remoteMod AND lastSync > localMod 1471 // We may have that lastSync > remoteMod AND lastSync > localMod
1471 // BUT remoteMod != localMod 1472 // BUT remoteMod != localMod
1472 1473
1473 1474
1474 if ( full && mode < SYNC_PREF_NEWEST ) 1475 if ( full && mode < SYNC_PREF_NEWEST )
1475 mode = SYNC_PREF_ASK; 1476 mode = SYNC_PREF_ASK;
1476 1477
1477 switch( mode ) { 1478 switch( mode ) {
1478 case SYNC_PREF_LOCAL: 1479 case SYNC_PREF_LOCAL:
1479 if ( lastSync > remoteMod ) 1480 if ( lastSync > remoteMod )
1480 return 1; 1481 return 1;
1481 if ( lastSync > localMod ) 1482 if ( lastSync > localMod )
1482 return 2; 1483 return 2;
1483 return 1; 1484 return 1;
1484 break; 1485 break;
1485 case SYNC_PREF_REMOTE: 1486 case SYNC_PREF_REMOTE:
1486 if ( lastSync > localMod ) 1487 if ( lastSync > localMod )
1487 return 2; 1488 return 2;
1488 if ( lastSync > remoteMod ) 1489 if ( lastSync > remoteMod )
1489 return 1; 1490 return 1;
1490 return 2; 1491 return 2;
1491 break; 1492 break;
1492 case SYNC_PREF_NEWEST: 1493 case SYNC_PREF_NEWEST:
1493 if ( localMod >= remoteMod ) 1494 if ( localMod >= remoteMod )
1494 return 1; 1495 return 1;
1495 else 1496 else
1496 return 2; 1497 return 2;
1497 break; 1498 break;
1498 case SYNC_PREF_ASK: 1499 case SYNC_PREF_ASK:
1499 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1500 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1500 if ( lastSync > remoteMod && lastSync > localMod) 1501 if ( lastSync > remoteMod && lastSync > localMod)
1501 return 0; 1502 return 0;
1502 if ( lastSync > remoteMod ) 1503 if ( lastSync > remoteMod )
1503 return 1; 1504 return 1;
1504 if ( lastSync > localMod ) 1505 if ( lastSync > localMod )
1505 return 2; 1506 return 2;
1506 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1507 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1507 localIsNew = localMod >= remoteMod; 1508 localIsNew = localMod >= remoteMod;
1508 if ( localIsNew ) 1509 if ( localIsNew )
1509 getEventViewerDialog()->setColorMode( 1 ); 1510 getEventViewerDialog()->setColorMode( 1 );
1510 else 1511 else
1511 getEventViewerDialog()->setColorMode( 2 ); 1512 getEventViewerDialog()->setColorMode( 2 );
1512 getEventViewerDialog()->setIncidence(local); 1513 getEventViewerDialog()->setIncidence(local);
1513 if ( localIsNew ) 1514 if ( localIsNew )
1514 getEventViewerDialog()->setColorMode( 2 ); 1515 getEventViewerDialog()->setColorMode( 2 );
1515 else 1516 else
1516 getEventViewerDialog()->setColorMode( 1 ); 1517 getEventViewerDialog()->setColorMode( 1 );
1517 getEventViewerDialog()->addIncidence(remote); 1518 getEventViewerDialog()->addIncidence(remote);
1518 getEventViewerDialog()->setColorMode( 0 ); 1519 getEventViewerDialog()->setColorMode( 0 );
1519 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1520 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1520 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1521 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1521 getEventViewerDialog()->showMe(); 1522 getEventViewerDialog()->showMe();
1522 result = getEventViewerDialog()->executeS( localIsNew ); 1523 result = getEventViewerDialog()->executeS( localIsNew );
1523 return result; 1524 return result;
1524 1525
1525 break; 1526 break;
1526 case SYNC_PREF_FORCE_LOCAL: 1527 case SYNC_PREF_FORCE_LOCAL:
1527 return 1; 1528 return 1;
1528 break; 1529 break;
1529 case SYNC_PREF_FORCE_REMOTE: 1530 case SYNC_PREF_FORCE_REMOTE:
1530 return 2; 1531 return 2;
1531 break; 1532 break;
1532 1533
1533 default: 1534 default:
1534 // SYNC_PREF_TAKE_BOTH not implemented 1535 // SYNC_PREF_TAKE_BOTH not implemented
1535 break; 1536 break;
1536 } 1537 }
1537 return 0; 1538 return 0;
1538} 1539}
1539Event* CalendarView::getLastSyncEvent() 1540Event* CalendarView::getLastSyncEvent()
1540{ 1541{
1541 Event* lse; 1542 Event* lse;
1542 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1543 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1543 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1544 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1544 if (!lse) { 1545 if (!lse) {
1545 lse = new Event(); 1546 lse = new Event();
1546 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1547 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1547 QString sum = ""; 1548 QString sum = "";
1548 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1549 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1549 sum = "E: "; 1550 sum = "E: ";
1550 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1551 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1551 lse->setDtStart( mLastCalendarSync ); 1552 lse->setDtStart( mLastCalendarSync );
1552 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1553 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1553 lse->setCategories( i18n("SyncEvent") ); 1554 lse->setCategories( i18n("SyncEvent") );
1554 lse->setReadOnly( true ); 1555 lse->setReadOnly( true );
1556 lse->setCalID( 1 );
1555 mCalendar->addEvent( lse ); 1557 mCalendar->addEvent( lse );
1556 } 1558 }
1557 1559
1558 return lse; 1560 return lse;
1559 1561
1560} 1562}
1561 1563
1562// we check, if the to delete event has a id for a profile 1564// we check, if the to delete event has a id for a profile
1563// if yes, we set this id in the profile to delete 1565// if yes, we set this id in the profile to delete
1564void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1566void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1565{ 1567{
1566 if ( lastSync.count() == 0 ) { 1568 if ( lastSync.count() == 0 ) {
1567 //qDebug(" lastSync.count() == 0"); 1569 //qDebug(" lastSync.count() == 0");
1568 return; 1570 return;
1569 } 1571 }
1570 if ( toDelete->typeID() == journalID ) 1572 if ( toDelete->typeID() == journalID )
1571 return; 1573 return;
1572 1574
1573 Event* eve = lastSync.first(); 1575 Event* eve = lastSync.first();
1574 1576
1575 while ( eve ) { 1577 while ( eve ) {
1576 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1578 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1577 if ( !id.isEmpty() ) { 1579 if ( !id.isEmpty() ) {
1578 QString des = eve->description(); 1580 QString des = eve->description();
1579 QString pref = "e"; 1581 QString pref = "e";
1580 if ( toDelete->typeID() == todoID ) 1582 if ( toDelete->typeID() == todoID )
1581 pref = "t"; 1583 pref = "t";
1582 des += pref+ id + ","; 1584 des += pref+ id + ",";
1583 eve->setReadOnly( false ); 1585 eve->setReadOnly( false );
1584 eve->setDescription( des ); 1586 eve->setDescription( des );
1585 //qDebug("setdes %s ", des.latin1()); 1587 //qDebug("setdes %s ", des.latin1());
1586 eve->setReadOnly( true ); 1588 eve->setReadOnly( true );
1587 } 1589 }
1588 eve = lastSync.next(); 1590 eve = lastSync.next();
1589 } 1591 }
1590 1592
1591} 1593}
1592void CalendarView::checkExternalId( Incidence * inc ) 1594void CalendarView::checkExternalId( Incidence * inc )
1593{ 1595{
1594 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1596 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1595 checkExternSyncEvent( lastSync, inc ); 1597 checkExternSyncEvent( lastSync, inc );
1596 1598
1597} 1599}
1598bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1600bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1599{ 1601{
1600 bool syncOK = true; 1602 bool syncOK = true;
1601 int addedEvent = 0; 1603 int addedEvent = 0;
1602 int addedEventR = 0; 1604 int addedEventR = 0;
1603 int deletedEventR = 0; 1605 int deletedEventR = 0;
1604 int deletedEventL = 0; 1606 int deletedEventL = 0;
1605 int changedLocal = 0; 1607 int changedLocal = 0;
1606 int changedRemote = 0; 1608 int changedRemote = 0;
1607 int filteredIN = 0; 1609 int filteredIN = 0;
1608 int filteredOUT = 0; 1610 int filteredOUT = 0;
1609 //QPtrList<Event> el = local->rawEvents(); 1611 //QPtrList<Event> el = local->rawEvents();
1610 Event* eventR; 1612 Event* eventR;
1611 QString uid; 1613 QString uid;
1612 int take; 1614 int take;
1613 Event* eventRSync; 1615 Event* eventRSync;
1614 Event* eventLSync; 1616 Event* eventLSync;
1615 clearAllViews(); 1617 clearAllViews();
1616 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1618 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1617 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1619 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1618 bool fullDateRange = false; 1620 bool fullDateRange = false;
1619 local->resetTempSyncStat(); 1621 local->resetTempSyncStat();
1620 mLastCalendarSync = QDateTime::currentDateTime(); 1622 mLastCalendarSync = QDateTime::currentDateTime();
1621 if ( mSyncManager->syncWithDesktop() ) { 1623 if ( mSyncManager->syncWithDesktop() ) {
1622 remote->resetPilotStat(1); 1624 remote->resetPilotStat(1);
1623 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1625 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1624 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1626 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1625 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1627 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1626 } else { 1628 } else {
1627 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1629 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1628 } 1630 }
1629 } 1631 }
1630 QDateTime modifiedCalendar = mLastCalendarSync; 1632 QDateTime modifiedCalendar = mLastCalendarSync;
1631 eventLSync = getLastSyncEvent(); 1633 eventLSync = getLastSyncEvent();
1632 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1634 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1633 if ( eventR ) { 1635 if ( eventR ) {
1634 qDebug("last-syncEvent on remote found "); 1636 qDebug("last-syncEvent on remote found ");
1635 eventRSync = (Event*) eventR->clone(); 1637 eventRSync = (Event*) eventR->clone();
1636 remote->deleteEvent(eventR ); 1638 remote->deleteEvent(eventR );
1637 1639
1638 } else { 1640 } else {
1639 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1641 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1640 eventRSync = (Event*)eventLSync->clone(); 1642 eventRSync = (Event*)eventLSync->clone();
1641 } else { 1643 } else {
1642 fullDateRange = true; 1644 fullDateRange = true;
1643 eventRSync = new Event(); 1645 eventRSync = new Event();
1644 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1646 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1645 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1647 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1646 eventRSync->setDtStart( mLastCalendarSync ); 1648 eventRSync->setDtStart( mLastCalendarSync );
1647 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1649 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1648 eventRSync->setCategories( i18n("SyncEvent") ); 1650 eventRSync->setCategories( i18n("SyncEvent") );
1649 } 1651 }
1650 } 1652 }
@@ -1809,202 +1811,207 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
1809 incCounter = 0; 1811 incCounter = 0;
1810 1812
1811 while ( inL ) { 1813 while ( inL ) {
1812 1814
1813 qApp->processEvents(); 1815 qApp->processEvents();
1814 if ( ! bar.isVisible() ) 1816 if ( ! bar.isVisible() )
1815 return false; 1817 return false;
1816 if ( incCounter % modulo == 0 ) 1818 if ( incCounter % modulo == 0 )
1817 bar.setProgress( incCounter ); 1819 bar.setProgress( incCounter );
1818 ++incCounter; 1820 ++incCounter;
1819 uid = inL->uid(); 1821 uid = inL->uid();
1820 bool skipIncidence = false; 1822 bool skipIncidence = false;
1821 if ( uid.left(15) == QString("last-syncEvent-") ) 1823 if ( uid.left(15) == QString("last-syncEvent-") )
1822 skipIncidence = true; 1824 skipIncidence = true;
1823 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1825 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1824 skipIncidence = true; 1826 skipIncidence = true;
1825 if ( !skipIncidence ) { 1827 if ( !skipIncidence ) {
1826 inR = remote->incidenceForUid( uid , true ); 1828 inR = remote->incidenceForUid( uid , true );
1827 if ( ! inR ) { 1829 if ( ! inR ) {
1828 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1830 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1829 // no conflict ********** add or delete local 1831 // no conflict ********** add or delete local
1830 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1832 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1831 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1833 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1832 checkExternSyncEvent(eventLSyncSharp, inL); 1834 checkExternSyncEvent(eventLSyncSharp, inL);
1833 local->deleteIncidence( inL ); 1835 local->deleteIncidence( inL );
1834 ++deletedEventL; 1836 ++deletedEventL;
1835 } else { 1837 } else {
1836 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1838 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1837 inL->removeID(mCurrentSyncDevice ); 1839 inL->removeID(mCurrentSyncDevice );
1838 ++addedEventR; 1840 ++addedEventR;
1839 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1841 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1840 inL->setLastModified( modifiedCalendar ); 1842 inL->setLastModified( modifiedCalendar );
1841 inR = inL->clone(); 1843 inR = inL->clone();
1842 inR->setIDStr( ":" ); 1844 inR->setIDStr( ":" );
1843 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1845 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1844 inR->setCalID( 0 );// add to default cal 1846 inR->setCalID( 0 );// add to default cal
1845 remote->addIncidence( inR ); 1847 remote->addIncidence( inR );
1846 } 1848 }
1847 } 1849 }
1848 } else { 1850 } else {
1849 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1851 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1850 checkExternSyncEvent(eventLSyncSharp, inL); 1852 checkExternSyncEvent(eventLSyncSharp, inL);
1851 local->deleteIncidence( inL ); 1853 local->deleteIncidence( inL );
1852 ++deletedEventL; 1854 ++deletedEventL;
1853 } else { 1855 } else {
1854 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1856 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1855 ++addedEventR; 1857 ++addedEventR;
1856 inL->setLastModified( modifiedCalendar ); 1858 inL->setLastModified( modifiedCalendar );
1857 inR = inL->clone(); 1859 inR = inL->clone();
1858 inR->setIDStr( ":" ); 1860 inR->setIDStr( ":" );
1859 inR->setCalID( 0 );// add to default cal 1861 inR->setCalID( 0 );// add to default cal
1860 remote->addIncidence( inR ); 1862 remote->addIncidence( inR );
1861 } 1863 }
1862 } 1864 }
1863 } 1865 }
1864 } else { 1866 } else {
1865 ++filteredOUT; 1867 ++filteredOUT;
1866 } 1868 }
1867 } 1869 }
1868 } 1870 }
1869 inL = el.next(); 1871 inL = el.next();
1870 } 1872 }
1871 int delFut = 0; 1873 int delFut = 0;
1872 int remRem = 0; 1874 int remRem = 0;
1873 if ( mSyncManager->mWriteBackInFuture ) { 1875 if ( mSyncManager->mWriteBackInFuture ) {
1874 er = remote->rawIncidences(); 1876 er = remote->rawIncidences();
1875 remRem = er.count(); 1877 remRem = er.count();
1876 inR = er.first(); 1878 inR = er.first();
1877 QDateTime dt; 1879 QDateTime dt;
1878 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1880 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1879 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1881 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1880 while ( inR ) { 1882 while ( inR ) {
1881 if ( inR->typeID() == todoID ) { 1883 if ( inR->typeID() == todoID ) {
1882 Todo * t = (Todo*)inR; 1884 Todo * t = (Todo*)inR;
1883 if ( t->hasDueDate() ) 1885 if ( t->hasDueDate() )
1884 dt = t->dtDue(); 1886 dt = t->dtDue();
1885 else 1887 else
1886 dt = cur.addSecs( 62 ); 1888 dt = cur.addSecs( 62 );
1887 } 1889 }
1888 else if (inR->typeID() == eventID ) { 1890 else if (inR->typeID() == eventID ) {
1889 bool ok; 1891 bool ok;
1890 dt = inR->getNextOccurence( cur, &ok ); 1892 dt = inR->getNextOccurence( cur, &ok );
1891 if ( !ok ) 1893 if ( !ok )
1892 dt = cur.addSecs( -62 ); 1894 dt = cur.addSecs( -62 );
1893 } 1895 }
1894 else 1896 else
1895 dt = inR->dtStart(); 1897 dt = inR->dtStart();
1896 if ( dt < cur || dt > end ) { 1898 if ( dt < cur || dt > end ) {
1897 remote->deleteIncidence( inR ); 1899 remote->deleteIncidence( inR );
1898 ++delFut; 1900 ++delFut;
1899 } 1901 }
1900 inR = er.next(); 1902 inR = er.next();
1901 } 1903 }
1902 } 1904 }
1903 bar.hide(); 1905 bar.hide();
1904 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1906 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1905 eventLSync->setReadOnly( false ); 1907 if ( mMultiResourceSync ) {
1906 eventLSync->setDtStart( mLastCalendarSync ); 1908 remote->removeSyncInfo( "" ); //all
1907 eventRSync->setDtStart( mLastCalendarSync ); 1909
1908 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1910 } else {
1909 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1911 eventLSync->setReadOnly( false );
1910 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1912 eventLSync->setDtStart( mLastCalendarSync );
1911 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1913 eventRSync->setDtStart( mLastCalendarSync );
1912 eventLSync->setReadOnly( true ); 1914 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1915 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1916 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1917 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1918 eventLSync->setReadOnly( true );
1919 }
1913 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1920 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1914 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1921 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop() && !mMultiResourceSync ) // kde is abnormal...
1915 remote->addEvent( eventRSync ); 1922 remote->addEvent( eventRSync );
1916 else 1923 else
1917 delete eventRSync; 1924 delete eventRSync;
1918 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1925 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1919 QString mes; 1926 QString mes;
1920 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1927 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1921 QString delmess; 1928 QString delmess;
1922 if ( delFut ) { 1929 if ( delFut ) {
1923 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1930 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1924 mes += delmess; 1931 mes += delmess;
1925 } 1932 }
1926 mes = i18n("Local calendar changed!\n") +mes; 1933 mes = i18n("Local calendar changed!\n") +mes;
1927 mCalendar->checkAlarmForIncidence( 0, true ); 1934 mCalendar->checkAlarmForIncidence( 0, true );
1928 qDebug( mes ); 1935 qDebug( mes );
1929 if ( mSyncManager->mShowSyncSummary ) { 1936 if ( mSyncManager->mShowSyncSummary ) {
1930 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1937 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1931 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1938 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1932 qDebug("KO: WB cancelled "); 1939 qDebug("KO: WB cancelled ");
1933 mSyncManager->mWriteBackFile = false; 1940 mSyncManager->mWriteBackFile = false;
1934 return syncOK; 1941 return syncOK;
1935 } 1942 }
1936 } 1943 }
1937 return syncOK; 1944 return syncOK;
1938} 1945}
1939 1946
1940void CalendarView::setSyncDevice( QString s ) 1947void CalendarView::setSyncDevice( QString s )
1941{ 1948{
1942 mCurrentSyncDevice= s; 1949 mCurrentSyncDevice= s;
1943} 1950}
1944void CalendarView::setSyncName( QString s ) 1951void CalendarView::setSyncName( QString s )
1945{ 1952{
1946 mCurrentSyncName= s; 1953 mCurrentSyncName= s;
1947} 1954}
1948bool CalendarView::syncCalendar(QString filename, int mode) 1955bool CalendarView::syncCalendar(QString filename, int mode)
1949{ 1956{
1950 //qDebug("syncCalendar %s ", filename.latin1()); 1957 //qDebug("syncCalendar %s ", filename.latin1());
1951 mGlobalSyncMode = SYNC_MODE_NORMAL; 1958 mGlobalSyncMode = SYNC_MODE_NORMAL;
1952 CalendarLocal* calendar = new CalendarLocal(); 1959 CalendarLocal* calendar = new CalendarLocal();
1953 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1960 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1954 FileStorage* storage = new FileStorage( calendar ); 1961 FileStorage* storage = new FileStorage( calendar );
1955 bool syncOK = false; 1962 bool syncOK = false;
1956 storage->setFileName( filename ); 1963 storage->setFileName( filename );
1957 // qDebug("loading ... "); 1964 // qDebug("loading ... ");
1958 if ( storage->load() ) { 1965 if ( storage->load() ) {
1959 getEventViewerDialog()->setSyncMode( true ); 1966 getEventViewerDialog()->setSyncMode( true );
1960 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1967 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1961 getEventViewerDialog()->setSyncMode( false ); 1968 getEventViewerDialog()->setSyncMode( false );
1962 if ( syncOK ) { 1969 if ( syncOK ) {
1963 if ( mSyncManager->mWriteBackFile ) 1970 if ( mSyncManager->mWriteBackFile )
1964 { 1971 {
1965 storage->setSaveFormat( new ICalFormat() ); 1972 storage->setSaveFormat( new ICalFormat() );
1966 storage->save(); 1973 storage->save();
1967 } 1974 }
1968 } 1975 }
1969 setModified( true ); 1976 setModified( true );
1970 } 1977 }
1971 delete storage; 1978 delete storage;
1972 delete calendar; 1979 delete calendar;
1973 if ( syncOK ) 1980 if ( syncOK )
1974 updateView(); 1981 updateView();
1975 return syncOK; 1982 return syncOK;
1976} 1983}
1977 1984
1978void CalendarView::syncExternal( int mode ) 1985void CalendarView::syncExternal( int mode )
1979{ 1986{
1980 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1987 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1981 qApp->processEvents(); 1988 qApp->processEvents();
1982 CalendarLocal* calendar = new CalendarLocal(); 1989 CalendarLocal* calendar = new CalendarLocal();
1983 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1990 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1984 bool syncOK = false; 1991 bool syncOK = false;
1985 bool loadSuccess = false; 1992 bool loadSuccess = false;
1986 PhoneFormat* phoneFormat = 0; 1993 PhoneFormat* phoneFormat = 0;
1987 emit tempDisableBR(true); 1994 emit tempDisableBR(true);
1988#ifndef DESKTOP_VERSION 1995#ifndef DESKTOP_VERSION
1989 SharpFormat* sharpFormat = 0; 1996 SharpFormat* sharpFormat = 0;
1990 if ( mode == 0 ) { // sharp 1997 if ( mode == 0 ) { // sharp
1991 sharpFormat = new SharpFormat () ; 1998 sharpFormat = new SharpFormat () ;
1992 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1999 loadSuccess = sharpFormat->load( calendar, mCalendar );
1993 2000
1994 } else 2001 } else
1995#endif 2002#endif
1996 if ( mode == 1 ) { // phone 2003 if ( mode == 1 ) { // phone
1997 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 2004 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1998 mSyncManager->mPhoneDevice, 2005 mSyncManager->mPhoneDevice,
1999 mSyncManager->mPhoneConnection, 2006 mSyncManager->mPhoneConnection,
2000 mSyncManager->mPhoneModel); 2007 mSyncManager->mPhoneModel);
2001 loadSuccess = phoneFormat->load( calendar,mCalendar); 2008 loadSuccess = phoneFormat->load( calendar,mCalendar);
2002 2009
2003 } else { 2010 } else {
2004 emit tempDisableBR(false); 2011 emit tempDisableBR(false);
2005 return; 2012 return;
2006 } 2013 }
2007 if ( loadSuccess ) { 2014 if ( loadSuccess ) {
2008 getEventViewerDialog()->setSyncMode( true ); 2015 getEventViewerDialog()->setSyncMode( true );
2009 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2016 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2010 getEventViewerDialog()->setSyncMode( false ); 2017 getEventViewerDialog()->setSyncMode( false );
@@ -2342,315 +2349,359 @@ bool CalendarView::restoreCalendarSettings()
2342 mCalendar->reInitAlarmSettings(); 2349 mCalendar->reInitAlarmSettings();
2343 updateUnmanagedViews(); 2350 updateUnmanagedViews();
2344 updateView(); 2351 updateView();
2345 return true; 2352 return true;
2346} 2353}
2347void CalendarView::addCalendarId( int id ) 2354void CalendarView::addCalendarId( int id )
2348{ 2355{
2349 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2356 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2350 if ( cal ) 2357 if ( cal )
2351 addCalendar( cal ); 2358 addCalendar( cal );
2352} 2359}
2353bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2360bool CalendarView::addCalendar( KopiCalendarFile * cal )
2354{ 2361{
2355 cal->mErrorOnLoad = false; 2362 cal->mErrorOnLoad = false;
2356 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2363 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2357 cal->mLoadDt = QDateTime::currentDateTime(); 2364 cal->mLoadDt = QDateTime::currentDateTime();
2358 return true; 2365 return true;
2359 } 2366 }
2360 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2367 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2361 cal->mErrorOnLoad = true; 2368 cal->mErrorOnLoad = true;
2362 return false; 2369 return false;
2363} 2370}
2364bool CalendarView::openCalendar(QString filename, bool merge) 2371bool CalendarView::openCalendar(QString filename, bool merge)
2365{ 2372{
2366 2373
2367 if (filename.isEmpty()) { 2374 if (filename.isEmpty()) {
2368 return false; 2375 return false;
2369 } 2376 }
2370 2377
2371 if (!QFile::exists(filename)) { 2378 if (!QFile::exists(filename)) {
2372 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2379 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2373 return false; 2380 return false;
2374 } 2381 }
2375 2382
2376 globalFlagBlockAgenda = 1; 2383 globalFlagBlockAgenda = 1;
2377 clearAllViews(); 2384 clearAllViews();
2378 if (!merge) { 2385 if (!merge) {
2379 mViewManager->setDocumentId( filename ); 2386 mViewManager->setDocumentId( filename );
2380 mCalendar->close(); 2387 mCalendar->close();
2381 } 2388 }
2382 mStorage->setFileName( filename ); 2389 mStorage->setFileName( filename );
2383 2390
2384 if ( mStorage->load() ) { 2391 if ( mStorage->load() ) {
2385 if ( merge ) ;//setModified( true ); 2392 if ( merge ) ;//setModified( true );
2386 else { 2393 else {
2387 //setModified( true ); 2394 //setModified( true );
2388 mViewManager->setDocumentId( filename ); 2395 mViewManager->setDocumentId( filename );
2389 mDialogManager->setDocumentId( filename ); 2396 mDialogManager->setDocumentId( filename );
2390 mTodoList->setDocumentId( filename ); 2397 mTodoList->setDocumentId( filename );
2391 } 2398 }
2392 globalFlagBlockAgenda = 2; 2399 globalFlagBlockAgenda = 2;
2393 // if ( getLastSyncEvent() ) 2400 // if ( getLastSyncEvent() )
2394 // getLastSyncEvent()->setReadOnly( true ); 2401 // getLastSyncEvent()->setReadOnly( true );
2395 mCalendar->reInitAlarmSettings(); 2402 mCalendar->reInitAlarmSettings();
2396 setSyncEventsReadOnly(); 2403 setSyncEventsReadOnly();
2397 //updateUnmanagedViews(); 2404 //updateUnmanagedViews();
2398 //updateView(); 2405 //updateView();
2399 if ( filename != MainWindow::defaultFileName() ) { 2406 if ( filename != MainWindow::defaultFileName() ) {
2400 saveCalendar( MainWindow::defaultFileName() ); 2407 saveCalendar( MainWindow::defaultFileName() );
2401 } else { 2408 } else {
2402 QFileInfo finf ( MainWindow::defaultFileName()); 2409 QFileInfo finf ( MainWindow::defaultFileName());
2403 if ( finf.exists() ) { 2410 if ( finf.exists() ) {
2404 setLoadedFileVersion( finf.lastModified () ); 2411 setLoadedFileVersion( finf.lastModified () );
2405 } 2412 }
2406 } 2413 }
2407 return true; 2414 return true;
2408 } else { 2415 } else {
2409 // while failing to load, the calendar object could 2416 // while failing to load, the calendar object could
2410 // have become partially populated. Clear it out. 2417 // have become partially populated. Clear it out.
2411 if ( !merge ) { 2418 if ( !merge ) {
2412 mCalendar->close(); 2419 mCalendar->close();
2413 mViewManager->setDocumentId( filename ); 2420 mViewManager->setDocumentId( filename );
2414 mDialogManager->setDocumentId( filename ); 2421 mDialogManager->setDocumentId( filename );
2415 mTodoList->setDocumentId( filename ); 2422 mTodoList->setDocumentId( filename );
2416 } 2423 }
2417 2424
2418 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2425 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2419 2426
2420 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2427 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2421 globalFlagBlockAgenda = 2; 2428 globalFlagBlockAgenda = 2;
2422 mCalendar->reInitAlarmSettings(); 2429 mCalendar->reInitAlarmSettings();
2423 setSyncEventsReadOnly(); 2430 setSyncEventsReadOnly();
2424 updateUnmanagedViews(); 2431 updateUnmanagedViews();
2425 updateView(); 2432 updateView();
2426 } 2433 }
2427 return false; 2434 return false;
2428} 2435}
2429void CalendarView::mergeFile( QString fn ) 2436void CalendarView::mergeFile( QString fn )
2430{ 2437{
2431 clearAllViews(); 2438 clearAllViews();
2432 mCalendar->mergeCalendarFile( fn ); 2439 mCalendar->mergeCalendarFile( fn );
2433 mCalendar->reInitAlarmSettings(); 2440 mCalendar->reInitAlarmSettings();
2434 setSyncEventsReadOnly(); 2441 setSyncEventsReadOnly();
2435 updateUnmanagedViews(); 2442 updateUnmanagedViews();
2436 updateView(); 2443 updateView();
2437} 2444}
2445void CalendarView::mergeFileResource( QString fn ,QString resource )
2446{
2447
2448 if ( resource == "ALL" ) {
2449 mergeFile( fn );
2450 return;
2451 }
2452
2453 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2454 if ( !exclusiveResource ) {
2455 qDebug("KO: CalendarView::mergeFileResource: resource not found %s", resource.latin1() );
2456 return;
2457 }
2458 clearAllViews();
2459 mCalendar->setCalendarRemove( exclusiveResource );
2460 int def = mCalendar->defaultCalendar();
2461 mCalendar->setDefaultCalendar(exclusiveResource);
2462 if ( !mCalendar->addCalendarFile( fn, exclusiveResource )) {
2463 qDebug("KO: CalendarView::mergeFileResource: error adding file %s", fn.latin1() );
2464 }
2465 mCalendar->setDefaultCalendar( def );
2466 mCalendar->reInitAlarmSettings();
2467 setSyncEventsReadOnly();
2468 updateUnmanagedViews();
2469 updateView();
2470}
2438void CalendarView::showOpenError() 2471void CalendarView::showOpenError()
2439{ 2472{
2440 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2473 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2441} 2474}
2442void CalendarView::setLoadedFileVersion(QDateTime dt) 2475void CalendarView::setLoadedFileVersion(QDateTime dt)
2443{ 2476{
2444 loadedFileVersion = dt; 2477 loadedFileVersion = dt;
2445} 2478}
2446bool CalendarView::checkFileChanged(QString fn) 2479bool CalendarView::checkFileChanged(QString fn)
2447{ 2480{
2448 QFileInfo finf ( fn ); 2481 QFileInfo finf ( fn );
2449 if ( !finf.exists() ) 2482 if ( !finf.exists() )
2450 return true; 2483 return true;
2451 QDateTime dt = finf.lastModified (); 2484 QDateTime dt = finf.lastModified ();
2452 if ( dt <= loadedFileVersion ) 2485 if ( dt <= loadedFileVersion )
2453 return false; 2486 return false;
2454 return true; 2487 return true;
2455 2488
2456} 2489}
2457void CalendarView::watchSavedFile() 2490void CalendarView::watchSavedFile()
2458{ 2491{
2459 QFileInfo finf ( MainWindow::defaultFileName()); 2492 QFileInfo finf ( MainWindow::defaultFileName());
2460 if ( !finf.exists() ) 2493 if ( !finf.exists() )
2461 return; 2494 return;
2462 QDateTime dt = finf.lastModified (); 2495 QDateTime dt = finf.lastModified ();
2463 if ( dt < loadedFileVersion ) { 2496 if ( dt < loadedFileVersion ) {
2464 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2497 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2465 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2498 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2466 return; 2499 return;
2467 } 2500 }
2468 loadedFileVersion = dt; 2501 loadedFileVersion = dt;
2469} 2502}
2470bool CalendarView::checkAllFileVersions() 2503bool CalendarView::checkAllFileVersions()
2471{ 2504{
2472 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2505 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2473 KopiCalendarFile * cal = calendars.first(); 2506 KopiCalendarFile * cal = calendars.first();
2474 mCalendar->setDefaultCalendar( 1 ); 2507 mCalendar->setDefaultCalendar( 1 );
2475 mCalendar->setDefaultCalendarEnabledOnly(); 2508 mCalendar->setDefaultCalendarEnabledOnly();
2476 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2509 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2477 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2510 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2478 restoreCalendarSettings(); 2511 restoreCalendarSettings();
2479 return false; 2512 return false;
2480 } 2513 }
2481 } 2514 }
2482 cal = calendars.next(); 2515 cal = calendars.next();
2483 QDateTime storeTemp = loadedFileVersion; 2516 QDateTime storeTemp = loadedFileVersion;
2484 while ( cal ) { 2517 while ( cal ) {
2485 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2518 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2486 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2519 mCalendar->setDefaultCalendar( cal->mCalNumber );
2487 mCalendar->setDefaultCalendarEnabledOnly(); 2520 mCalendar->setDefaultCalendarEnabledOnly();
2488 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2521 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2489 if ( !checkFileVersion(cal->mFileName )) { 2522 if ( !checkFileVersion(cal->mFileName )) {
2490 loadedFileVersion = storeTemp; 2523 loadedFileVersion = storeTemp;
2491 restoreCalendarSettings(); 2524 restoreCalendarSettings();
2492 return false; 2525 return false;
2493 } 2526 }
2494 } 2527 }
2495 cal = calendars.next(); 2528 cal = calendars.next();
2496 } 2529 }
2497 loadedFileVersion = storeTemp; 2530 loadedFileVersion = storeTemp;
2498 return true; 2531 return true;
2499} 2532}
2500bool CalendarView::checkFileVersion(QString fn) 2533bool CalendarView::checkFileVersion(QString fn)
2501{ 2534{
2502 QFileInfo finf ( fn ); 2535 QFileInfo finf ( fn );
2503 if ( !finf.exists() ) 2536 if ( !finf.exists() )
2504 return true; 2537 return true;
2505 QDateTime dt = finf.lastModified (); 2538 QDateTime dt = finf.lastModified ();
2506 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2539 //qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2507 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2540 //qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2508 if ( dt <= loadedFileVersion ) 2541 if ( dt <= loadedFileVersion )
2509 return true; 2542 return true;
2510 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2543 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2511 i18n("KO/Pi Warning"),i18n("Overwrite"), 2544 i18n("KO/Pi Warning"),i18n("Overwrite"),
2512 i18n("Sync+save")); 2545 i18n("Sync+save"));
2513 2546
2514 if ( km == KMessageBox::Cancel ) 2547 if ( km == KMessageBox::Cancel )
2515 return false; 2548 return false;
2516 if ( km == KMessageBox::Yes ) 2549 if ( km == KMessageBox::Yes )
2517 return true; 2550 return true;
2518 2551
2519 setSyncDevice("deleteaftersync" ); 2552 setSyncDevice("deleteaftersync" );
2520 mSyncManager->mAskForPreferences = true; 2553 mSyncManager->mAskForPreferences = true;
2521 mSyncManager->mSyncAlgoPrefs = 3; 2554 mSyncManager->mSyncAlgoPrefs = 3;
2522 mSyncManager->mWriteBackFile = false; 2555 mSyncManager->mWriteBackFile = false;
2523 mSyncManager->mWriteBackExistingOnly = false; 2556 mSyncManager->mWriteBackExistingOnly = false;
2524 mSyncManager->mShowSyncSummary = false; 2557 mSyncManager->mShowSyncSummary = false;
2558 mMultiResourceSync = false;
2525 syncCalendar( fn, 3 ); 2559 syncCalendar( fn, 3 );
2526 Event * e = getLastSyncEvent(); 2560 Event * e = getLastSyncEvent();
2527 if ( e ) 2561 if ( e )
2528 mCalendar->deleteEvent( e ); 2562 mCalendar->deleteEvent( e );
2529 return true; 2563 return true;
2530} 2564}
2531bool CalendarView::saveCalendars() 2565bool CalendarView::saveCalendars()
2532{ 2566{
2533 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2567 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2534 KopiCalendarFile * cal = calendars.first(); 2568 KopiCalendarFile * cal = calendars.first();
2535 mCalendar->setDefaultCalendar( 1 ); 2569 mCalendar->setDefaultCalendar( 1 );
2536 mCalendar->setDefaultCalendarEnabledOnly(); 2570 mCalendar->setDefaultCalendarEnabledOnly();
2537 QString saveError; 2571 QString saveError;
2538 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2572 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2539 saveError = cal->mName +"\n"; 2573 saveError = cal->mName +"\n";
2540 cal = calendars.next(); 2574 cal = calendars.next();
2541 while ( cal ) { 2575 while ( cal ) {
2542 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2576 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2543 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2577 mCalendar->setDefaultCalendar( cal->mCalNumber );
2544 mCalendar->setDefaultCalendarEnabledOnly(); 2578 mCalendar->setDefaultCalendarEnabledOnly();
2545 if ( saveCalendar( cal->mFileName ) ) 2579 if ( saveCalendar( cal->mFileName ) )
2546 cal->mLoadDt = QDateTime::currentDateTime(); 2580 cal->mLoadDt = QDateTime::currentDateTime();
2547 else 2581 else
2548 saveError += cal->mName + "\n"; 2582 saveError += cal->mName + "\n";
2549 } 2583 }
2550 cal = calendars.next(); 2584 cal = calendars.next();
2551 } 2585 }
2552 restoreCalendarSettings(); 2586 restoreCalendarSettings();
2553 //saveError = "test error"; 2587 //saveError = "test error";
2554 if ( !saveError.isEmpty() ) { 2588 if ( !saveError.isEmpty() ) {
2555 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2589 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2556 KMessageBox::error(this, saveError, i18n("Error saving data")); 2590 KMessageBox::error(this, saveError, i18n("Error saving data"));
2557 return false; 2591 return false;
2558 } 2592 }
2559 return true; 2593 return true;
2560} 2594}
2595bool CalendarView::saveCalendarResource(QString filename, QString resource)
2596{
2597 if ( resource == "ALL" )
2598 return saveCalendar( filename );
2599 int exclusiveResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
2600 if ( !exclusiveResource ) {
2601 qDebug("KO: CalendarView::saveCalendarResource: resource not found %s", resource.latin1() );
2602 return false;
2603 }
2604 mCalendar->setDefaultCalendar( exclusiveResource );
2605 mCalendar->setDefaultCalendarEnabledOnly();
2606 mCalendar->setSyncEventsEnabled();
2607 bool res = saveCalendar( filename );
2608 restoreCalendarSettings();
2609 return res;
2610
2611}
2561bool CalendarView::saveCalendar( QString filename ) 2612bool CalendarView::saveCalendar( QString filename )
2562{ 2613{
2563 2614
2564 // Store back all unsaved data into calendar object 2615 // Store back all unsaved data into calendar object
2565 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2616 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2566 if ( mViewManager->currentView() ) 2617 if ( mViewManager->currentView() )
2567 mViewManager->currentView()->flushView(); 2618 mViewManager->currentView()->flushView();
2568 2619
2569 2620
2570 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2621 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2571 mStorage->setSaveFormat( new ICalFormat() ); 2622 mStorage->setSaveFormat( new ICalFormat() );
2572 mStorage->setFileName( filename ); 2623 mStorage->setFileName( filename );
2573 bool success; 2624 bool success;
2574 success = mStorage->save(); 2625 success = mStorage->save();
2575 if ( !success ) { 2626 if ( !success ) {
2576 return false; 2627 return false;
2577 } 2628 }
2578 if ( filename == MainWindow::defaultFileName() ) { 2629 if ( filename == MainWindow::defaultFileName() ) {
2579 setLoadedFileVersion( lfv ); 2630 setLoadedFileVersion( lfv );
2580 watchSavedFile(); 2631 watchSavedFile();
2581 } 2632 }
2582 return true; 2633 return true;
2583} 2634}
2584 2635
2585void CalendarView::closeCalendar() 2636void CalendarView::closeCalendar()
2586{ 2637{
2587 2638
2588 // child windows no longer valid 2639 // child windows no longer valid
2589 clearAllViews(); 2640 clearAllViews();
2590 emit closingDown(); 2641 emit closingDown();
2591 2642
2592 mCalendar->close(); 2643 mCalendar->close();
2593 setModified(false); 2644 setModified(false);
2594 updateView(); 2645 updateView();
2595} 2646}
2596 2647
2597void CalendarView::archiveCalendar() 2648void CalendarView::archiveCalendar()
2598{ 2649{
2599 mDialogManager->showArchiveDialog(); 2650 mDialogManager->showArchiveDialog();
2600} 2651}
2601 2652
2602 2653
2603void CalendarView::readSettings() 2654void CalendarView::readSettings()
2604{ 2655{
2605 2656
2606 2657
2607 // mViewManager->showAgendaView(); 2658 // mViewManager->showAgendaView();
2608 QString str; 2659 QString str;
2609 //qDebug("CalendarView::readSettings() "); 2660 //qDebug("CalendarView::readSettings() ");
2610 // read settings from the KConfig, supplying reasonable 2661 // read settings from the KConfig, supplying reasonable
2611 // defaults where none are to be found 2662 // defaults where none are to be found
2612 KConfig *config = KOGlobals::config(); 2663 KConfig *config = KOGlobals::config();
2613#ifndef KORG_NOSPLITTER 2664#ifndef KORG_NOSPLITTER
2614 config->setGroup("KOrganizer Geometry"); 2665 config->setGroup("KOrganizer Geometry");
2615 2666
2616 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2667 QValueList<int> sizes = config->readIntListEntry("Separator1");
2617 if (sizes.count() != 2) { 2668 if (sizes.count() != 2) {
2618 sizes << mDateNavigator->minimumSizeHint().width(); 2669 sizes << mDateNavigator->minimumSizeHint().width();
2619 sizes << 300; 2670 sizes << 300;
2620 } 2671 }
2621 mPanner->setSizes(sizes); 2672 mPanner->setSizes(sizes);
2622 2673
2623 sizes = config->readIntListEntry("Separator2"); 2674 sizes = config->readIntListEntry("Separator2");
2624 if ( ( mResourceView && sizes.count() == 4 ) || 2675 if ( ( mResourceView && sizes.count() == 4 ) ||
2625 ( !mResourceView && sizes.count() == 3 ) ) { 2676 ( !mResourceView && sizes.count() == 3 ) ) {
2626 mLeftSplitter->setSizes(sizes); 2677 mLeftSplitter->setSizes(sizes);
2627 } 2678 }
2628#endif 2679#endif
2629 globalFlagBlockAgenda = 1; 2680 globalFlagBlockAgenda = 1;
2630 mViewManager->showAgendaView(); 2681 mViewManager->showAgendaView();
2631 //mViewManager->readSettings( config ); 2682 //mViewManager->readSettings( config );
2632 mTodoList->restoreLayout(config,QString("Todo Layout")); 2683 mTodoList->restoreLayout(config,QString("Todo Layout"));
2633 readFilterSettings(config); 2684 readFilterSettings(config);
2634 2685
2635#ifdef DESKTOP_VERSION 2686#ifdef DESKTOP_VERSION
2636 config->setGroup("WidgetLayout"); 2687 config->setGroup("WidgetLayout");
2637 QStringList list; 2688 QStringList list;
2638 list = config->readListEntry("MainLayout"); 2689 list = config->readListEntry("MainLayout");
2639 int x,y,w,h; 2690 int x,y,w,h;
2640 if ( ! list.isEmpty() ) { 2691 if ( ! list.isEmpty() ) {
2641 x = list[0].toInt(); 2692 x = list[0].toInt();
2642 y = list[1].toInt(); 2693 y = list[1].toInt();
2643 w = list[2].toInt(); 2694 w = list[2].toInt();
2644 h = list[3].toInt(); 2695 h = list[3].toInt();
2645 KApplication::testCoords( &x,&y,&w,&h ); 2696 KApplication::testCoords( &x,&y,&w,&h );
2646 topLevelWidget()->setGeometry(x,y,w,h); 2697 topLevelWidget()->setGeometry(x,y,w,h);
2647 2698
2648 } else { 2699 } else {
2649 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2700 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2650 } 2701 }
2651 list = config->readListEntry("EditEventLayout"); 2702 list = config->readListEntry("EditEventLayout");
2652 if ( ! list.isEmpty() ) { 2703 if ( ! list.isEmpty() ) {
2653 x = list[0].toInt(); 2704 x = list[0].toInt();
2654 y = list[1].toInt(); 2705 y = list[1].toInt();
2655 w = list[2].toInt(); 2706 w = list[2].toInt();
2656 h = list[3].toInt(); 2707 h = list[3].toInt();
@@ -4939,193 +4990,197 @@ void CalendarView::showIncidence(Incidence *incidence)
4939} 4990}
4940 4991
4941void CalendarView::editIncidence(Incidence *incidence) 4992void CalendarView::editIncidence(Incidence *incidence)
4942{ 4993{
4943 if ( incidence ) { 4994 if ( incidence ) {
4944 4995
4945 EditIncidenceVisitor v; 4996 EditIncidenceVisitor v;
4946 v.act( incidence, this ); 4997 v.act( incidence, this );
4947 4998
4948 } 4999 }
4949} 5000}
4950 5001
4951void CalendarView::deleteIncidence(Incidence *incidence) 5002void CalendarView::deleteIncidence(Incidence *incidence)
4952{ 5003{
4953 //qDebug(" CalendarView::deleteIncidence "); 5004 //qDebug(" CalendarView::deleteIncidence ");
4954 if ( incidence == 0 ) { 5005 if ( incidence == 0 ) {
4955 updateView(); 5006 updateView();
4956 emit updateSearchDialog(); 5007 emit updateSearchDialog();
4957 return; 5008 return;
4958 } 5009 }
4959 if ( incidence ) { 5010 if ( incidence ) {
4960 DeleteIncidenceVisitor v; 5011 DeleteIncidenceVisitor v;
4961 v.act( incidence, this ); 5012 v.act( incidence, this );
4962 } 5013 }
4963} 5014}
4964 5015
4965 5016
4966void CalendarView::lookForOutgoingMessages() 5017void CalendarView::lookForOutgoingMessages()
4967{ 5018{
4968 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 5019 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
4969 ogd->loadMessages(); 5020 ogd->loadMessages();
4970} 5021}
4971 5022
4972void CalendarView::lookForIncomingMessages() 5023void CalendarView::lookForIncomingMessages()
4973{ 5024{
4974 IncomingDialog *icd = mDialogManager->incomingDialog(); 5025 IncomingDialog *icd = mDialogManager->incomingDialog();
4975 icd->retrieve(); 5026 icd->retrieve();
4976} 5027}
4977 5028
4978bool CalendarView::removeCompletedSubTodos( Todo* t ) 5029bool CalendarView::removeCompletedSubTodos( Todo* t )
4979{ 5030{
4980 bool deleteTodo = true; 5031 bool deleteTodo = true;
4981 QPtrList<Incidence> subTodos; 5032 QPtrList<Incidence> subTodos;
4982 Incidence *aTodo; 5033 Incidence *aTodo;
4983 subTodos = t->relations(); 5034 subTodos = t->relations();
4984 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 5035 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
4985 if (! removeCompletedSubTodos( (Todo*) aTodo )) 5036 if (! removeCompletedSubTodos( (Todo*) aTodo ))
4986 deleteTodo = false; 5037 deleteTodo = false;
4987 } 5038 }
4988 if ( deleteTodo ) { 5039 if ( deleteTodo ) {
4989 if ( t->isCompleted() && !t->doesRecur()) { 5040 if ( t->isCompleted() && !t->doesRecur()) {
4990 checkExternalId( t ); 5041 checkExternalId( t );
4991 mCalendar->deleteTodo( t ); 5042 mCalendar->deleteTodo( t );
4992 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 5043 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
4993 } 5044 }
4994 else 5045 else
4995 deleteTodo = false; 5046 deleteTodo = false;
4996 } 5047 }
4997 return deleteTodo; 5048 return deleteTodo;
4998 5049
4999} 5050}
5000void CalendarView::purgeCompleted() 5051void CalendarView::purgeCompleted()
5001{ 5052{
5002 int result = KMessageBox::warningContinueCancel(this, 5053 int result = KMessageBox::warningContinueCancel(this,
5003 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge")); 5054 i18n("Delete all completed todos?\n(Completed recurring todos\nwill not be deleted!)"),i18n("Purge Todos"),i18n("Purge"));
5004 5055
5005 if (result == KMessageBox::Continue) { 5056 if (result == KMessageBox::Continue) {
5006 5057
5007 QPtrList<Todo> todoCal; 5058 QPtrList<Todo> todoCal;
5008 QPtrList<Todo> rootTodos; 5059 QPtrList<Todo> rootTodos;
5009 //QPtrList<Incidence> rel; 5060 //QPtrList<Incidence> rel;
5010 Todo *aTodo; 5061 Todo *aTodo;
5011 todoCal = calendar()->todos(); 5062 todoCal = calendar()->todos();
5012 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 5063 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
5013 if ( !aTodo->relatedTo() ) 5064 if ( !aTodo->relatedTo() )
5014 rootTodos.append( aTodo ); 5065 rootTodos.append( aTodo );
5015 } 5066 }
5016 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 5067 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
5017 removeCompletedSubTodos( aTodo ); 5068 removeCompletedSubTodos( aTodo );
5018 } 5069 }
5019 5070
5020 updateView(); 5071 updateView();
5021 } 5072 }
5022} 5073}
5023 5074
5024void CalendarView::slotCalendarChanged() 5075void CalendarView::slotCalendarChanged()
5025{ 5076{
5026 ; 5077 ;
5027} 5078}
5028 5079
5029void CalendarView::keyPressEvent ( QKeyEvent *e) 5080void CalendarView::keyPressEvent ( QKeyEvent *e)
5030{ 5081{
5031 //qDebug("CalendarView::keyPressEvent "); 5082 //qDebug("CalendarView::keyPressEvent ");
5032 e->ignore(); 5083 e->ignore();
5033} 5084}
5034 5085
5086void CalendarView::multiResourceSyncStart( bool start )
5087{
5088 mMultiResourceSync = start;
5035 5089
5090}
5036bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource) 5091bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource)
5037{ 5092{
5038 5093
5039 if ( manager != mSyncManager) 5094 if ( manager != mSyncManager)
5040 qDebug("KO: Internal error-1. SyncManager mismatch "); 5095 qDebug("KO: Internal error-1. SyncManager mismatch ");
5041 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 5096 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
5042 qDebug("KO: SyncKDE request detected!"); 5097 qDebug("KO: SyncKDE request detected!");
5043 } 5098 }
5044 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5099 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5045 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5100 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5046 if ( !resource.isEmpty() ) { 5101 if ( !resource.isEmpty() ) {
5047 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); 5102 int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource );
5048 qDebug( "KO: Sync request for resource: %s", resource.latin1() ); 5103 qDebug( "KO: Sync request for resource: %s", resource.latin1() );
5049 5104
5050 if ( !exclusiveSyncResource ) { 5105 if ( !exclusiveSyncResource ) {
5051 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() ); 5106 qDebug( "KO: Requested sync resource not found: %s", resource.latin1() );
5052 return false; 5107 return false;
5053 } 5108 }
5054 mCalendar->setDefaultCalendar( exclusiveSyncResource ); 5109 mCalendar->setDefaultCalendar( exclusiveSyncResource );
5055 mCalendar->setDefaultCalendarEnabledOnly(); 5110 mCalendar->setDefaultCalendarEnabledOnly();
5056 } 5111 }
5057 bool result = syncCalendar( filename, mode ); 5112 bool result = syncCalendar( filename, mode );
5058 if ( !resource.isEmpty() ) 5113 if ( !resource.isEmpty() )
5059 restoreCalendarSettings(); 5114 restoreCalendarSettings();
5060 return result; 5115 return result;
5061} 5116}
5062bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 5117bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
5063{ 5118{
5064 //mSyncManager = manager; 5119 //mSyncManager = manager;
5065 if ( manager != mSyncManager) 5120 if ( manager != mSyncManager)
5066 qDebug("KO: Internal error-2. SyncManager mismatch "); 5121 qDebug("KO: Internal error-2. SyncManager mismatch ");
5067 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 5122 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
5068 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 5123 mCurrentSyncName = mSyncManager->getCurrentSyncName();
5069 if ( resource == "sharp" ) 5124 if ( resource == "sharp" )
5070 syncExternal( 0 ); 5125 syncExternal( 0 );
5071 if ( resource == "phone" ) 5126 if ( resource == "phone" )
5072 syncExternal( 1 ); 5127 syncExternal( 1 );
5073 // pending setmodified 5128 // pending setmodified
5074 return true; 5129 return true;
5075} 5130}
5076void CalendarView::setSyncManager(KSyncManager* manager) 5131void CalendarView::setSyncManager(KSyncManager* manager)
5077{ 5132{
5078 mSyncManager = manager; 5133 mSyncManager = manager;
5079} 5134}
5080 5135
5081void CalendarView::removeSyncInfo( QString syncProfile) 5136void CalendarView::removeSyncInfo( QString syncProfile)
5082{ 5137{
5083 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 5138 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
5084 mCalendar->removeSyncInfo( syncProfile ); 5139 mCalendar->removeSyncInfo( syncProfile );
5085 5140
5086} 5141}
5087 5142
5088void CalendarView::undo_delete() 5143void CalendarView::undo_delete()
5089{ 5144{
5090 //qDebug("undo_delete() "); 5145 //qDebug("undo_delete() ");
5091 Incidence* undo = mCalendar->undoIncidence(); 5146 Incidence* undo = mCalendar->undoIncidence();
5092 if ( !undo ) { 5147 if ( !undo ) {
5093 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 5148 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
5094 i18n("KO/Pi")); 5149 i18n("KO/Pi"));
5095 return; 5150 return;
5096 } 5151 }
5097 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) + 5152 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( undo->summary(),0 ) +
5098 i18n("\nAre you sure you want\nto restore this?"), 5153 i18n("\nAre you sure you want\nto restore this?"),
5099 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 5154 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
5100 mCalendar->undoDeleteIncidence(); 5155 mCalendar->undoDeleteIncidence();
5101 updateView(); 5156 updateView();
5102 } 5157 }
5103} 5158}
5104 5159
5105void CalendarView::slotViewerClosed() 5160void CalendarView::slotViewerClosed()
5106{ 5161{
5107 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) ); 5162 QTimer::singleShot( 50, this, SLOT ( resetFocus() ) );
5108} 5163}
5109 5164
5110void CalendarView::resetFocus() 5165void CalendarView::resetFocus()
5111{ 5166{
5112 if ( mViewerCallerIsSearchDialog ) { 5167 if ( mViewerCallerIsSearchDialog ) {
5113 if ( mDialogManager->getSearchDialog()->isVisible() ){ 5168 if ( mDialogManager->getSearchDialog()->isVisible() ){
5114 mDialogManager->getSearchDialog()->raise(); 5169 mDialogManager->getSearchDialog()->raise();
5115 mDialogManager->getSearchDialog()->setActiveWindow(); 5170 mDialogManager->getSearchDialog()->setActiveWindow();
5116 mDialogManager->getSearchDialog()->listview()->resetFocus(); 5171 mDialogManager->getSearchDialog()->listview()->resetFocus();
5117 } else 5172 } else
5118 mViewerCallerIsSearchDialog = false; 5173 mViewerCallerIsSearchDialog = false;
5119 } 5174 }
5120 if ( !mViewerCallerIsSearchDialog ) { 5175 if ( !mViewerCallerIsSearchDialog ) {
5121 //mViewManager->currentView()->setFocus(); 5176 //mViewManager->currentView()->setFocus();
5122 //qDebug("sssssssssssssssset focus "); 5177 //qDebug("sssssssssssssssset focus ");
5123 topLevelWidget()->raise(); 5178 topLevelWidget()->raise();
5124 setActiveWindow(); 5179 setActiveWindow();
5125 //setFocus(); 5180 //setFocus();
5126 } 5181 }
5127 mViewerCallerIsSearchDialog = false; 5182 mViewerCallerIsSearchDialog = false;
5128} 5183}
5129 5184
5130void CalendarView::showNextAlarms() 5185void CalendarView::showNextAlarms()
5131{ 5186{
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index f85b6a3..60b1276 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -46,299 +46,302 @@
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 void mergeFileResource( QString fn ,QString res);
142 143
143 signals: 144 signals:
144 void save (); 145 void save ();
145 void saveStopTimer (); 146 void saveStopTimer ();
146 void tempDisableBR(bool); 147 void tempDisableBR(bool);
147 /** This todo has been modified */ 148 /** This todo has been modified */
148 void todoModified(Todo *, int); 149 void todoModified(Todo *, int);
149 150
150 /** when change is made to options dialog, the topwidget will catch this 151 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 152 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 153 * for notification to update their settings. */
153 void configChanged(); 154 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 155 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 156 child windows can also close. */
156 void closingDown(); 157 void closingDown();
157 /** emitted right before we die */ 158 /** emitted right before we die */
158 void closed(QWidget *); 159 void closed(QWidget *);
159 160
160 /** Emitted when state of modified flag changes */ 161 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 162 void modifiedChanged(bool);
162 void signalmodified(); 163 void signalmodified();
163 164
164 /** Emitted when state of read-only flag changes */ 165 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 166 void readOnlyChanged(bool);
166 167
167 /** Emitted when the unit of navigation changes */ 168 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 169 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 170 void changeNavStringNext(const QString &);
170 171
171 /** Emitted when state of events selection has changed and user is organizer*/ 172 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 173 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 174 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 175 void groupEventsSelected(bool);
175 /** 176 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 177 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 178 signal is emitted with 0 as argument.
178 */ 179 */
179 void incidenceSelected( Incidence * ); 180 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 181 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 182 void todoSelected( bool );
182 183
183 /** 184 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 185 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 186 is possible or not.
186 */ 187 */
187 void pasteEnabled(bool); 188 void pasteEnabled(bool);
188 189
189 /** Emitted, when the number of incoming messages has changed. */ 190 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 191 void numIncomingChanged(int);
191 192
192 /** Emitted, when the number of outgoing messages has changed. */ 193 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 194 void numOutgoingChanged(int);
194 195
195 /** Send status message, which can e.g. be displayed in the status bar. */ 196 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 197 void statusMessage(const QString &);
197 198
198 void calendarViewExpanded( bool ); 199 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 200 void updateSearchDialog();
200 void filtersUpdated(); 201 void filtersUpdated();
201 202
202 203
203 public slots: 204 public slots:
205 void multiResourceSyncStart( bool );
204 void displayCalendarInfo( int id ); 206 void displayCalendarInfo( int id );
205 void nextConflict( bool all, bool allday ); 207 void nextConflict( bool all, bool allday );
206 void conflictAll(); 208 void conflictAll();
207 void conflictAllday(); 209 void conflictAllday();
208 void conflictNotAll(); 210 void conflictNotAll();
209 void setCalReadOnly( int id, bool readO ); 211 void setCalReadOnly( int id, bool readO );
210 void checkAlarms(); 212 void checkAlarms();
211 void checkFiles(); 213 void checkFiles();
212 void slotprintSelInc(); 214 void slotprintSelInc();
213 void showNextAlarms(); 215 void showNextAlarms();
214 void showOpenError(); 216 void showOpenError();
215 void watchSavedFile(); 217 void watchSavedFile();
216 void recheckTimerAlarm(); 218 void recheckTimerAlarm();
217 void checkNextTimerAlarm(); 219 void checkNextTimerAlarm();
218 void addAlarm(const QDateTime &qdt, const QString &noti ); 220 void addAlarm(const QDateTime &qdt, const QString &noti );
219 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 221 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
220 void removeAlarm(const QDateTime &qdt, const QString &noti ); 222 void removeAlarm(const QDateTime &qdt, const QString &noti );
221 223
222 /** options dialog made a changed to the configuration. we catch this 224 /** options dialog made a changed to the configuration. we catch this
223 * and notify all widgets which need to update their configuration. */ 225 * and notify all widgets which need to update their configuration. */
224 void updateConfig(); 226 void updateConfig();
225 227
226 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 228 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
227 const QStringList& anniversaryList, const QStringList& realNameList, 229 const QStringList& anniversaryList, const QStringList& realNameList,
228 const QStringList& emailList, const QStringList& assembledNameList, 230 const QStringList& emailList, const QStringList& assembledNameList,
229 const QStringList& uidList); 231 const QStringList& uidList);
230 232
231 /** 233 /**
232 Load calendar from file \a filename. If \a merge is true, load 234 Load calendar from file \a filename. If \a merge is true, load
233 calendar into existing one, if it is false, clear calendar, before 235 calendar into existing one, if it is false, clear calendar, before
234 loading. Return true, if calendar could be successfully loaded. 236 loading. Return true, if calendar could be successfully loaded.
235 */ 237 */
236 bool openCalendar(QString filename, bool merge=false); 238 bool openCalendar(QString filename, bool merge=false);
237 bool loadCalendars(); 239 bool loadCalendars();
238 bool saveCalendars(); 240 bool saveCalendars();
239 bool restoreCalendarSettings(); 241 bool restoreCalendarSettings();
240 bool addCalendar( KopiCalendarFile * ); 242 bool addCalendar( KopiCalendarFile * );
241 void addCalendarId( int id ); 243 void addCalendarId( int id );
242 bool syncCalendar(QString filename,int mode = 0 ); 244 bool syncCalendar(QString filename,int mode = 0 );
243 245
244 /** 246 /**
245 Save calendar data to file. Return true if calendar could be 247 Save calendar data to file. Return true if calendar could be
246 successfully saved. 248 successfully saved.
247 */ 249 */
248 bool saveCalendar(QString filename); 250 bool saveCalendar(QString filename);
251 bool saveCalendarResource(QString filename, QString resource);
249 252
250 /** 253 /**
251 Close calendar. Clear calendar data and reset views to display an empty 254 Close calendar. Clear calendar data and reset views to display an empty
252 calendar. 255 calendar.
253 */ 256 */
254 void closeCalendar(); 257 void closeCalendar();
255 258
256 /** Archive old events of calendar */ 259 /** Archive old events of calendar */
257 void archiveCalendar(); 260 void archiveCalendar();
258 261
259 void showIncidence(); 262 void showIncidence();
260 void editIncidence(); 263 void editIncidence();
261 void editIncidenceDescription(); 264 void editIncidenceDescription();
262 void deleteIncidence(); 265 void deleteIncidence();
263 void cloneIncidence(); 266 void cloneIncidence();
264 void moveIncidence(); 267 void moveIncidence();
265 void beamIncidence(); 268 void beamIncidence();
266 void toggleCancelIncidence(); 269 void toggleCancelIncidence();
267 270
268 /** create an editeventwin with supplied date/time, and if bool is true, 271 /** create an editeventwin with supplied date/time, and if bool is true,
269 * make the event take all day. */ 272 * make the event take all day. */
270 void newEvent(QDateTime, QDateTime, bool allDay ); 273 void newEvent(QDateTime, QDateTime, bool allDay );
271 void newEvent(QDateTime, QDateTime); 274 void newEvent(QDateTime, QDateTime);
272 void newEvent(QDateTime fh); 275 void newEvent(QDateTime fh);
273 void newEvent(QDate dt); 276 void newEvent(QDate dt);
274 /** create new event without having a date hint. Takes current date as 277 /** create new event without having a date hint. Takes current date as
275 default hint. */ 278 default hint. */
276 void newEvent(); 279 void newEvent();
277 void newFloatingEvent(); 280 void newFloatingEvent();
278 281
279 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 282 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
280 void showIncidence(Incidence *); 283 void showIncidence(Incidence *);
281 void showIncidence(QString uid); 284 void showIncidence(QString uid);
282 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 285 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
283 void editIncidence(Incidence *); 286 void editIncidence(Incidence *);
284 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 287 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
285 void deleteIncidence(Incidence *); 288 void deleteIncidence(Incidence *);
286 void cloneIncidence(Incidence *); 289 void cloneIncidence(Incidence *);
287 void cancelIncidence(Incidence *); 290 void cancelIncidence(Incidence *);
288 /** Create an editor for the supplied event. */ 291 /** Create an editor for the supplied event. */
289 void editEvent(Event *); 292 void editEvent(Event *);
290 /** Delete the supplied event. */ 293 /** Delete the supplied event. */
291 void deleteEvent(Event *); 294 void deleteEvent(Event *);
292 /** Delete the event with the given unique ID. Returns false, if event wasn't 295 /** Delete the event with the given unique ID. Returns false, if event wasn't
293 found. */ 296 found. */
294 bool deleteEvent(const QString &uid); 297 bool deleteEvent(const QString &uid);
295 /** Create a read-only viewer dialog for the supplied event. */ 298 /** Create a read-only viewer dialog for the supplied event. */
296 void showEvent(Event *); 299 void showEvent(Event *);
297 300
298 void editJournal(Journal *); 301 void editJournal(Journal *);
299 void showJournal(Journal *); 302 void showJournal(Journal *);
300 void deleteJournal(Journal *); 303 void deleteJournal(Journal *);
301 /** Create an editor dialog for a todo */ 304 /** Create an editor dialog for a todo */
302 void editTodo(Todo *); 305 void editTodo(Todo *);
303 /** Create a read-only viewer dialog for the supplied todo */ 306 /** Create a read-only viewer dialog for the supplied todo */
304 void showTodo(Todo *); 307 void showTodo(Todo *);
305 /** create new todo */ 308 /** create new todo */
306 void newTodo(); 309 void newTodo();
307 void newTodoDateTime(QDateTime, bool allday); 310 void newTodoDateTime(QDateTime, bool allday);
308 /** create new todo with a parent todo */ 311 /** create new todo with a parent todo */
309 void newSubTodo(); 312 void newSubTodo();
310 /** create new todo with a parent todo */ 313 /** create new todo with a parent todo */
311 void newSubTodo(Todo *); 314 void newSubTodo(Todo *);
312 /** Delete todo */ 315 /** Delete todo */
313 void deleteTodo(Todo *); 316 void deleteTodo(Todo *);
314 317
315 318
316 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 319 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
317 * emitted as result. */ 320 * emitted as result. */
318 void checkClipboard(); 321 void checkClipboard();
319 322
320 /** using the KConfig associated with the kapp variable, read in the 323 /** using the KConfig associated with the kapp variable, read in the
321 * settings from the config file. 324 * settings from the config file.
322 */ 325 */
323 void readSettings(); 326 void readSettings();
324 327
325 /** write current state to config file. */ 328 /** write current state to config file. */
326 void writeSettings(); 329 void writeSettings();
327 330
328 /** read settings for calendar filters */ 331 /** read settings for calendar filters */
329 void readFilterSettings(KConfig *config); 332 void readFilterSettings(KConfig *config);
330 333
331 /** write settings for calendar filters */ 334 /** write settings for calendar filters */
332 void writeFilterSettings(KConfig *config); 335 void writeFilterSettings(KConfig *config);
333 336
334 /** passes on the message that an event has changed to the currently 337 /** passes on the message that an event has changed to the currently
335 * activated view so that it can make appropriate display changes. */ 338 * activated view so that it can make appropriate display changes. */
336 void changeEventDisplay(Event *, int); 339 void changeEventDisplay(Event *, int);
337 void changeIncidenceDisplay(Incidence *, int); 340 void changeIncidenceDisplay(Incidence *, int);
338 void changeTodoDisplay(Todo *, int); 341 void changeTodoDisplay(Todo *, int);
339 342
340 void eventAdded(Event *); 343 void eventAdded(Event *);
341 void eventChanged(Event *); 344 void eventChanged(Event *);
342 void eventToBeDeleted(Event *); 345 void eventToBeDeleted(Event *);
343 void eventDeleted(); 346 void eventDeleted();
344 347
@@ -446,192 +449,193 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
446 void selectFilter( int ); 449 void selectFilter( int );
447 KOFilterView *filterView(); 450 KOFilterView *filterView();
448 451
449 void showIntro(); 452 void showIntro();
450 453
451 /** Move the curdatepient view date to today */ 454 /** Move the curdatepient view date to today */
452 void goToday(); 455 void goToday();
453 456
454 /** Move to the next date(s) in the current view */ 457 /** Move to the next date(s) in the current view */
455 void goNext(); 458 void goNext();
456 459
457 /** Move to the previous date(s) in the current view */ 460 /** Move to the previous date(s) in the current view */
458 void goPrevious(); 461 void goPrevious();
459 /** Move to the next date(s) in the current view */ 462 /** Move to the next date(s) in the current view */
460 void goNextMonth(); 463 void goNextMonth();
461 464
462 /** Move to the previous date(s) in the current view */ 465 /** Move to the previous date(s) in the current view */
463 void goPreviousMonth(); 466 void goPreviousMonth();
464 467
465 void toggleExpand(); 468 void toggleExpand();
466 void toggleDateNavigatorWidget(); 469 void toggleDateNavigatorWidget();
467 void toggleAllDaySize(); 470 void toggleAllDaySize();
468 471
469 /** Look for new messages in the inbox */ 472 /** Look for new messages in the inbox */
470 void lookForIncomingMessages(); 473 void lookForIncomingMessages();
471 /** Look for new messages in the outbox */ 474 /** Look for new messages in the outbox */
472 void lookForOutgoingMessages(); 475 void lookForOutgoingMessages();
473 476
474 void processMainViewSelection( Incidence * ); 477 void processMainViewSelection( Incidence * );
475 void processTodoListSelection( Incidence * ); 478 void processTodoListSelection( Incidence * );
476 479
477 void processIncidenceSelection( Incidence * ); 480 void processIncidenceSelection( Incidence * );
478 481
479 void purgeCompleted(); 482 void purgeCompleted();
480 bool removeCompletedSubTodos( Todo* ); 483 bool removeCompletedSubTodos( Todo* );
481 void slotCalendarChanged(); 484 void slotCalendarChanged();
482 bool importBday(); 485 bool importBday();
483 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 486 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
484 bool importQtopia( const QString &categoriesFile, 487 bool importQtopia( const QString &categoriesFile,
485 const QString &datebookFile, 488 const QString &datebookFile,
486 const QString &tasklistFile ); 489 const QString &tasklistFile );
487 void syncExternal( int mode ); 490 void syncExternal( int mode );
488 void slotSelectPickerDate( QDate ) ; 491 void slotSelectPickerDate( QDate ) ;
489 void showDatePicker() ; 492 void showDatePicker() ;
490 void showDatePickerPopup() ; 493 void showDatePickerPopup() ;
491 void moveIncidence(Incidence *) ; 494 void moveIncidence(Incidence *) ;
492 void beamIncidence(Incidence *) ; 495 void beamIncidence(Incidence *) ;
493 void beamCalendar() ; 496 void beamCalendar() ;
494 void beamFilteredCalendar() ; 497 void beamFilteredCalendar() ;
495 void beamIncidenceList(QPtrList<Incidence>) ; 498 void beamIncidenceList(QPtrList<Incidence>) ;
496 void manageCategories(); 499 void manageCategories();
497 void editCategories(); 500 void editCategories();
498 int addCategories(); 501 int addCategories();
499 void removeCategories(); 502 void removeCategories();
500 void setSyncDevice( QString ); 503 void setSyncDevice( QString );
501 void setSyncName( QString ); 504 void setSyncName( QString );
502 void showDay( QDate ); 505 void showDay( QDate );
503 void undo_delete(); 506 void undo_delete();
504 protected slots: 507 protected slots:
505 void resetFocus(); 508 void resetFocus();
506 void scrollBarValue(int); 509 void scrollBarValue(int);
507 void slotViewerClosed(); 510 void slotViewerClosed();
508 void timerAlarm(); 511 void timerAlarm();
509 void suspendAlarm(); 512 void suspendAlarm();
510 void beamDone( Ir *ir ); 513 void beamDone( Ir *ir );
511 /** Select a view or adapt the current view to display the specified dates. */ 514 /** Select a view or adapt the current view to display the specified dates. */
512 void showDates( const KCal::DateList & ); 515 void showDates( const KCal::DateList & );
513 void selectWeekNum ( int ); 516 void selectWeekNum ( int );
514 void checkConflictForEvent(); 517 void checkConflictForEvent();
515 518
516 public: 519 public:
517 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ); 520 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
518 // show a standard warning 521 // show a standard warning
519 // returns KMsgBox::yesNoCancel() 522 // returns KMsgBox::yesNoCancel()
520 int msgCalModified(); 523 int msgCalModified();
521 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource); 524 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource);
522 525
523 virtual bool syncExternal(KSyncManager* manager, QString resource); 526 virtual bool syncExternal(KSyncManager* manager, QString resource);
524 virtual void removeSyncInfo( QString syncProfile); 527 virtual void removeSyncInfo( QString syncProfile);
525 void setSyncManager(KSyncManager* manager); 528 void setSyncManager(KSyncManager* manager);
526 void setLoadedFileVersion(QDateTime); 529 void setLoadedFileVersion(QDateTime);
527 bool checkFileVersion(QString fn); 530 bool checkFileVersion(QString fn);
528 bool checkAllFileVersions(); 531 bool checkAllFileVersions();
529 bool checkFileChanged(QString fn); 532 bool checkFileChanged(QString fn);
530 Event* getLastSyncEvent(); 533 Event* getLastSyncEvent();
531 /** Adapt navigation units correpsonding to step size of navigation of the 534 /** Adapt navigation units correpsonding to step size of navigation of the
532 * current view. 535 * current view.
533 */ 536 */
534 void adaptNavigationUnits(); 537 void adaptNavigationUnits();
535 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 538 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
536 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 539 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
537 //Attendee* getYourAttendee(Event *event); 540 //Attendee* getYourAttendee(Event *event);
538 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 541 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
539 void setScrollBarStep(int val ); 542 void setScrollBarStep(int val );
540 543
541 protected: 544 protected:
545 bool mMultiResourceSync;
542 Event *mConflictingEvent; 546 Event *mConflictingEvent;
543 void schedule(Scheduler::Method, Incidence *incidence = 0); 547 void schedule(Scheduler::Method, Incidence *incidence = 0);
544 548
545 // returns KMsgBox::OKCandel() 549 // returns KMsgBox::OKCandel()
546 int msgItemDelete(const QString name); 550 int msgItemDelete(const QString name);
547 void showEventEditor(); 551 void showEventEditor();
548 void showTodoEditor(); 552 void showTodoEditor();
549 Todo *selectedTodo(); 553 Todo *selectedTodo();
550 private: 554 private:
551#ifdef DESKTOP_VERSION 555#ifdef DESKTOP_VERSION
552 QScrollBar * mDateScrollBar; 556 QScrollBar * mDateScrollBar;
553#endif 557#endif
554 bool flag_blockConflict; 558 bool flag_blockConflict;
555 bool flag_blockScrollBar; 559 bool flag_blockScrollBar;
556 bool flag_checkFileFirsttime; 560 bool flag_checkFileFirsttime;
557 bool flag_clearallviewsEventDisplay; 561 bool flag_clearallviewsEventDisplay;
558 bool flag_clearallviewsupdateView; 562 bool flag_clearallviewsupdateView;
559 QDateTime mNextAlarmDateTime; 563 QDateTime mNextAlarmDateTime;
560 bool mViewerCallerIsSearchDialog; 564 bool mViewerCallerIsSearchDialog;
561 bool mBlockShowDates; 565 bool mBlockShowDates;
562 KSyncManager* mSyncManager; 566 KSyncManager* mSyncManager;
563 AlarmDialog * mAlarmDialog; 567 AlarmDialog * mAlarmDialog;
564 QString mAlarmNotification; 568 QString mAlarmNotification;
565 QString mSuspendAlarmNotification; 569 QString mSuspendAlarmNotification;
566 QTimer* mSuspendTimer; 570 QTimer* mSuspendTimer;
567 QTimer* mAlarmTimer; 571 QTimer* mAlarmTimer;
568 QTimer* mRecheckAlarmTimer; 572 QTimer* mRecheckAlarmTimer;
569 void computeAlarm( QString ); 573 void computeAlarm( QString );
570 void startAlarm( QString, QString ); 574 void startAlarm( QString, QString );
571 void setSyncEventsReadOnly(); 575 void setSyncEventsReadOnly();
572 576
573 QDateTime loadedFileVersion; 577 QDateTime loadedFileVersion;
574 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 578 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
575 void checkExternalId( Incidence * inc ); 579 void checkExternalId( Incidence * inc );
576 int mGlobalSyncMode; 580 int mGlobalSyncMode;
577 QString mCurrentSyncDevice; 581 QString mCurrentSyncDevice;
578 QString mCurrentSyncName; 582 QString mCurrentSyncName;
579 void init(); 583 void init();
580 int mDatePickerMode; 584 int mDatePickerMode;
581 bool mFlagEditDescription; 585 bool mFlagEditDescription;
582 QDateTime mLastCalendarSync; 586 QDateTime mLastCalendarSync;
583 void createPrinter(); 587 void createPrinter();
584 588
585 void calendarModified( bool, Calendar * ); 589 void calendarModified( bool, Calendar * );
586 590
587 CalPrinter *mCalPrinter; 591 CalPrinter *mCalPrinter;
588 592
589 QSplitter *mPanner; 593 QSplitter *mPanner;
590 QSplitter *mLeftSplitter; 594 QSplitter *mLeftSplitter;
591 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 595 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
592 QWidgetStack *mRightFrame; 596 QWidgetStack *mRightFrame;
593 597
594 KDatePicker* mDatePicker; 598 KDatePicker* mDatePicker;
595 QVBox* mDateFrame; 599 QVBox* mDateFrame;
596 600
597 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 601 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
598 602
599 KOFilterView *mFilterView; 603 KOFilterView *mFilterView;
600 KOCalEditView *mCalEditView; 604 KOCalEditView *mCalEditView;
601 605
602 ResourceView *mResourceView; 606 ResourceView *mResourceView;
603 607
604 // calendar object for this viewing instance 608 // calendar object for this viewing instance
605 Calendar *mCalendar; 609 Calendar *mCalendar;
606 610
607 CalendarResourceManager *mResourceManager; 611 CalendarResourceManager *mResourceManager;
608 612
609 FileStorage *mStorage; 613 FileStorage *mStorage;
610 614
611 DateNavigator *mNavigator; 615 DateNavigator *mNavigator;
612 616
613 KOViewManager *mViewManager; 617 KOViewManager *mViewManager;
614 KODialogManager *mDialogManager; 618 KODialogManager *mDialogManager;
615 619
616 // Calendar filters 620 // Calendar filters
617 QPtrList<CalFilter> mFilters; 621 QPtrList<CalFilter> mFilters;
618 622
619 // various housekeeping variables. 623 // various housekeeping variables.
620 bool mModified; // flag indicating if calendar is modified 624 bool mModified; // flag indicating if calendar is modified
621 bool mReadOnly; // flag indicating if calendar is read-only 625 bool mReadOnly; // flag indicating if calendar is read-only
622 QDate mSaveSingleDate; 626 QDate mSaveSingleDate;
623 627
624 Incidence *mSelectedIncidence; 628 Incidence *mSelectedIncidence;
625 Incidence *mMoveIncidence; 629 Incidence *mMoveIncidence;
626 QDate mMoveIncidenceOldDate; 630 QDate mMoveIncidenceOldDate;
627 KOTodoView *mTodoList; 631 KOTodoView *mTodoList;
628 KOEventEditor * mEventEditor; 632 KOEventEditor * mEventEditor;
629 KOTodoEditor * mTodoEditor; 633 KOTodoEditor * mTodoEditor;
630 KOEventViewerDialog * mEventViewerDialog; 634 KOEventViewerDialog * mEventViewerDialog;
631 void keyPressEvent ( QKeyEvent *e) ; 635 void keyPressEvent ( QKeyEvent *e) ;
632 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 636 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
633}; 637};
634 638
635 639
636class CalendarViewVisitor : public Incidence::Visitor 640class CalendarViewVisitor : public Incidence::Visitor
637{ 641{
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 66bb19b..69ccde1 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -281,194 +281,196 @@ MainWindow::MainWindow( QWidget *parent, const char *name ) :
281 if ( p->mToolBarUpN ) 281 if ( p->mToolBarUpN )
282 tbd = Right; 282 tbd = Right;
283 else 283 else
284 tbd = Left; 284 tbd = Left;
285 } 285 }
286 navigatorToolBar = new QPEToolBar( this ); 286 navigatorToolBar = new QPEToolBar( this );
287 addToolBar (navigatorToolBar , tbd ); 287 addToolBar (navigatorToolBar , tbd );
288 } 288 }
289 289
290 290
291 291
292 mCalendarModifiedFlag = false; 292 mCalendarModifiedFlag = false;
293 // QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); 293 // QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this );
294 //splash->setAlignment ( AlignCenter ); 294 //splash->setAlignment ( AlignCenter );
295 //setCentralWidget( splash ); 295 //setCentralWidget( splash );
296#ifndef DESKTOP_VERSION 296#ifndef DESKTOP_VERSION
297 //showMaximized(); 297 //showMaximized();
298#endif 298#endif
299 299
300 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); 300 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ());
301 setDefaultPreferences(); 301 setDefaultPreferences();
302 mCalendar = new CalendarLocal(); 302 mCalendar = new CalendarLocal();
303 mView = new CalendarView( mCalendar, this,"mCalendar " ); 303 mView = new CalendarView( mCalendar, this,"mCalendar " );
304 setCentralWidget( mView ); 304 setCentralWidget( mView );
305 //mView->hide(); 305 //mView->hide();
306 //mView->resize(splash->size() ); 306 //mView->resize(splash->size() );
307 initActions(); 307 initActions();
308 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu); 308 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu);
309 mSyncManager->setBlockSave(false); 309 mSyncManager->setBlockSave(false);
310 mView->setSyncManager(mSyncManager); 310 mView->setSyncManager(mSyncManager);
311#ifndef DESKTOP_VERSION 311#ifndef DESKTOP_VERSION
312 iconToolBar->show(); 312 iconToolBar->show();
313 qApp->processEvents(); 313 qApp->processEvents();
314#endif 314#endif
315 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); 315 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ());
316 int vh = height() ; 316 int vh = height() ;
317 int vw = width(); 317 int vw = width();
318 //qDebug("Toolbar hei %d ",iconToolBar->height() ); 318 //qDebug("Toolbar hei %d ",iconToolBar->height() );
319 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 319 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
320 vh -= iconToolBar->height(); 320 vh -= iconToolBar->height();
321 } else { 321 } else {
322 vw -= iconToolBar->height(); 322 vw -= iconToolBar->height();
323 } 323 }
324 //mView->setMaximumSize( splash->size() ); 324 //mView->setMaximumSize( splash->size() );
325 //mView->resize( splash->size() ); 325 //mView->resize( splash->size() );
326 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 326 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
327 mView->readSettings(); 327 mView->readSettings();
328 bool newFile = false; 328 bool newFile = false;
329 if( !QFile::exists( defaultFileName() ) ) { 329 if( !QFile::exists( defaultFileName() ) ) {
330 QFileInfo finfo ( defaultFileName() ); 330 QFileInfo finfo ( defaultFileName() );
331 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); 331 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics");
332 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; 332 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n";
333 finfo.setFile( oldFile ); 333 finfo.setFile( oldFile );
334 if (finfo.exists() ) { 334 if (finfo.exists() ) {
335 KMessageBox::information( this, message); 335 KMessageBox::information( this, message);
336 mView->openCalendar( oldFile ); 336 mView->openCalendar( oldFile );
337 qApp->processEvents(); 337 qApp->processEvents();
338 } else { 338 } else {
339 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); 339 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics");
340 finfo.setFile( oldFile ); 340 finfo.setFile( oldFile );
341 if (finfo.exists() ) { 341 if (finfo.exists() ) {
342 KMessageBox::information( this, message); 342 KMessageBox::information( this, message);
343 mView->openCalendar( oldFile ); 343 mView->openCalendar( oldFile );
344 qApp->processEvents(); 344 qApp->processEvents();
345 } 345 }
346 } 346 }
347 mView->saveCalendar( defaultFileName() ); 347 mView->saveCalendar( defaultFileName() );
348 newFile = true; 348 newFile = true;
349 } 349 }
350 350
351 //QTime neededSaveTime = QDateTime::currentDateTime().time(); 351 //QTime neededSaveTime = QDateTime::currentDateTime().time();
352 //mView->loadCalendars(); 352 //mView->loadCalendars();
353 //int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 353 //int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
354 //qDebug("KO: Calendar loading time: %d ms",msNeeded ); 354 //qDebug("KO: Calendar loading time: %d ms",msNeeded );
355 355
356 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) { 356 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) {
357 KOPrefs::instance()->setAllDefaults(); 357 KOPrefs::instance()->setAllDefaults();
358 } 358 }
359 359
360 360
361 connect( mView, SIGNAL( tempDisableBR(bool) ), 361 connect( mView, SIGNAL( tempDisableBR(bool) ),
362 SLOT( disableBR(bool) ) ); 362 SLOT( disableBR(bool) ) );
363 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); 363 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) );
364 setCentralWidget( mView ); 364 setCentralWidget( mView );
365 globalFlagBlockStartup = 0; 365 globalFlagBlockStartup = 0;
366 //mView->show(); 366 //mView->show();
367 //delete splash; 367 //delete splash;
368 if ( newFile ) 368 if ( newFile )
369 mView->updateConfig(); 369 mView->updateConfig();
370 // qApp->processEvents(); 370 // qApp->processEvents();
371 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 371 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
372 //fillSyncMenu(); 372 //fillSyncMenu();
373 373
374 374
375 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) ); 375 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) );
376 connect(mView , SIGNAL( saveStopTimer() ), this, SLOT( saveStopTimer() ) ); 376 connect(mView , SIGNAL( saveStopTimer() ), this, SLOT( saveStopTimer() ) );
377 connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 377 connect(mSyncManager , SIGNAL( request_file(const QString &) ), this, SLOT( syncFileRequest(const QString &) ) );
378 connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 378 connect(mSyncManager , SIGNAL( getFile( bool, const QString &)), this, SLOT(getFile( bool,const QString & ) ) );
379 connect(mSyncManager , SIGNAL( multiResourceSyncStart( bool )), mView, SLOT( multiResourceSyncStart( bool ) ) );
380
379 mSyncManager->setDefaultFileName( sentSyncFile()); 381 mSyncManager->setDefaultFileName( sentSyncFile());
380 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) ); 382 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) );
381 mSyncManager->fillSyncMenu(); 383 mSyncManager->fillSyncMenu();
382 384
383 385
384 386
385 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins ); 387 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins );
386 if ( showWarning ) { 388 if ( showWarning ) {
387 KMessageBox::information( this, 389 KMessageBox::information( this,
388 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information"); 390 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information");
389 //qApp->processEvents(); 391 //qApp->processEvents();
390 mView->dialogManager()->showSyncOptions(); 392 mView->dialogManager()->showSyncOptions();
391 } 393 }
392 394
393 //US listen for result adressed from Ka/Pi 395 //US listen for result adressed from Ka/Pi
394 396
395#ifndef DESKTOP_VERSION 397#ifndef DESKTOP_VERSION
396 infrared = 0; 398 infrared = 0;
397#endif 399#endif
398 updateFilterToolbar(); 400 updateFilterToolbar();
399 updateWeek( mView->startDate() ); 401 updateWeek( mView->startDate() );
400 connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ), 402 connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ),
401 SLOT( updateWeekNum( const KCal::DateList & ) ) ); 403 SLOT( updateWeekNum( const KCal::DateList & ) ) );
402 mBRdisabled = false; 404 mBRdisabled = false;
403 //toggleBeamReceive(); 405 //toggleBeamReceive();
404 406
405 setCaption(i18n("Loading calendar files ... please wait" )); 407 setCaption(i18n("Loading calendar files ... please wait" ));
406 mSaveDelay = 0; 408 mSaveDelay = 0;
407 QTimer::singleShot( 10, this, SLOT ( loadDataAfterStart() )); 409 QTimer::singleShot( 10, this, SLOT ( loadDataAfterStart() ));
408} 410}
409MainWindow::~MainWindow() 411MainWindow::~MainWindow()
410{ 412{
411 //qDebug("MainWindow::~MainWindow() "); 413 //qDebug("MainWindow::~MainWindow() ");
412 //save toolbar location 414 //save toolbar location
413 delete mCalendar; 415 delete mCalendar;
414 delete mSyncManager; 416 delete mSyncManager;
415#ifndef DESKTOP_VERSION 417#ifndef DESKTOP_VERSION
416 if ( infrared ) 418 if ( infrared )
417 delete infrared; 419 delete infrared;
418#endif 420#endif
419 421
420 422
421} 423}
422 424
423void MainWindow::loadDataAfterStart() 425void MainWindow::loadDataAfterStart()
424{ 426{
425 qDebug("KO: Start loading files..." ); 427 qDebug("KO: Start loading files..." );
426 QTime neededSaveTime = QDateTime::currentDateTime().time(); 428 QTime neededSaveTime = QDateTime::currentDateTime().time();
427 mView->loadCalendars(); 429 mView->loadCalendars();
428 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 430 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
429 qDebug("KO: Calendar loading time: %d ms",msNeeded ); 431 qDebug("KO: Calendar loading time: %d ms",msNeeded );
430 //QTimer::singleShot( 1000, mView, SLOT ( checkFiles() )); 432 //QTimer::singleShot( 1000, mView, SLOT ( checkFiles() ));
431 mView->setModified( false ); 433 mView->setModified( false );
432 mBlockAtStartup = false; 434 mBlockAtStartup = false;
433 mView->setModified( false ); 435 mView->setModified( false );
434 connect(mView , SIGNAL( save() ), this, SLOT( save() ) ); 436 connect(mView , SIGNAL( save() ), this, SLOT( save() ) );
435 processIncidenceSelection( 0 ); 437 processIncidenceSelection( 0 );
436 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), 438 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ),
437 SLOT( processIncidenceSelection( Incidence * ) ) ); 439 SLOT( processIncidenceSelection( Incidence * ) ) );
438 connect( mView, SIGNAL( modifiedChanged( bool ) ), 440 connect( mView, SIGNAL( modifiedChanged( bool ) ),
439 SLOT( slotModifiedChanged( bool ) ) ); 441 SLOT( slotModifiedChanged( bool ) ) );
440#ifndef DESKTOP_VERSION 442#ifndef DESKTOP_VERSION
441 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); 443 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & )));
442 connect( qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), this, SLOT(recieve( const QCString&, const QByteArray& ))); 444 connect( qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), this, SLOT(recieve( const QCString&, const QByteArray& )));
443 disconnect( qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), this, SLOT(receiveStart( const QCString&, const QByteArray& ))); 445 disconnect( qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), this, SLOT(receiveStart( const QCString&, const QByteArray& )));
444 if ( !mCStringMess.isEmpty() ) 446 if ( !mCStringMess.isEmpty() )
445 recieve( mCStringMess, mByteData ); 447 recieve( mCStringMess, mByteData );
446#endif 448#endif
447 QTimer::singleShot( 1000, mView, SLOT ( checkFiles() )); 449 QTimer::singleShot( 1000, mView, SLOT ( checkFiles() ));
448} 450}
449 451
450void MainWindow::slotResetFocus() 452void MainWindow::slotResetFocus()
451{ 453{
452 //qDebug(" CalendarView::slotResetFocus() %x %x %x %x", qApp->focusWidget(), menuBar1, mView,iconToolBar); 454 //qDebug(" CalendarView::slotResetFocus() %x %x %x %x", qApp->focusWidget(), menuBar1, mView,iconToolBar);
453 mFocusLoop = 3; 455 mFocusLoop = 3;
454 QTimer::singleShot( 0, this, SLOT(slotResetFocusLoop() )); 456 QTimer::singleShot( 0, this, SLOT(slotResetFocusLoop() ));
455} 457}
456void MainWindow::slotResetFocusLoop() 458void MainWindow::slotResetFocusLoop()
457{ 459{
458 --mFocusLoop; 460 --mFocusLoop;
459 QWidget* fw = mView->viewManager()->currentView(); 461 QWidget* fw = mView->viewManager()->currentView();
460 if ( fw ) { 462 if ( fw ) {
461 //qDebug("loop "); 463 //qDebug("loop ");
462 fw->setFocus(); 464 fw->setFocus();
463 if ( qApp->focusWidget() != fw && mFocusLoop > 0 ) 465 if ( qApp->focusWidget() != fw && mFocusLoop > 0 )
464 QTimer::singleShot( 0, this, SLOT(slotResetFocusLoop() )); 466 QTimer::singleShot( 0, this, SLOT(slotResetFocusLoop() ));
465 } 467 }
466 468
467} 469}
468void MainWindow::disableBR(bool b) 470void MainWindow::disableBR(bool b)
469{ 471{
470#ifndef DESKTOP_VERSION 472#ifndef DESKTOP_VERSION
471 if ( b ) { 473 if ( b ) {
472 if ( infrared ) { 474 if ( infrared ) {
473 toggleBeamReceive(); 475 toggleBeamReceive();
474 mBRdisabled = true; 476 mBRdisabled = true;
@@ -2611,211 +2613,211 @@ void MainWindow::importFile( QString fn, bool quick )
2611 QFileInfo info; 2613 QFileInfo info;
2612 info.setFile( fn ); 2614 info.setFile( fn );
2613 QString mess; 2615 QString mess;
2614 if ( !info. exists() ) { 2616 if ( !info. exists() ) {
2615 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); 2617 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30));
2616 QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2618 QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2617 mess ); 2619 mess );
2618 return; 2620 return;
2619 } 2621 }
2620 int result = 0; 2622 int result = 0;
2621 if ( !quick ) { 2623 if ( !quick ) {
2622 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2624 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2623 result = QMessageBox::warning( this, "KO/Pi: Warning!", 2625 result = QMessageBox::warning( this, "KO/Pi: Warning!",
2624 mess, 2626 mess,
2625 "Import", "Cancel", 0, 2627 "Import", "Cancel", 0,
2626 0, 1 ); 2628 0, 1 );
2627 } 2629 }
2628 if ( result == 0 ) { 2630 if ( result == 0 ) {
2629 if ( mView->openCalendar( fn, true )) { 2631 if ( mView->openCalendar( fn, true )) {
2630 KOPrefs::instance()->mLastImportFile = fn; 2632 KOPrefs::instance()->mLastImportFile = fn;
2631 setCaption(i18n("Imported file successfully")); 2633 setCaption(i18n("Imported file successfully"));
2632 } else { 2634 } else {
2633 setCaption(i18n("Error importing file")); 2635 setCaption(i18n("Error importing file"));
2634 } 2636 }
2635 mView->updateView(); 2637 mView->updateView();
2636 } 2638 }
2637} 2639}
2638 2640
2639void MainWindow::importIcal() 2641void MainWindow::importIcal()
2640{ 2642{
2641 2643
2642 QString fn =KOPrefs::instance()->mLastImportFile; 2644 QString fn =KOPrefs::instance()->mLastImportFile;
2643 2645
2644 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); 2646 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this );
2645 if ( fn == "" ) 2647 if ( fn == "" )
2646 return; 2648 return;
2647 importFile( fn, true ); 2649 importFile( fn, true );
2648 2650
2649} 2651}
2650void MainWindow::exportCalendar( bool iCalFormat ) 2652void MainWindow::exportCalendar( bool iCalFormat )
2651{ 2653{
2652 QString fn = KOPrefs::instance()->mLastVcalFile; 2654 QString fn = KOPrefs::instance()->mLastVcalFile;
2653 if ( iCalFormat ) { 2655 if ( iCalFormat ) {
2654 fn = QDir::homeDirPath()+"/kopiexport.ics"; 2656 fn = QDir::homeDirPath()+"/kopiexport.ics";
2655 fn = KFileDialog::getSaveFileName( fn, i18n("Export iCal filename(*.ics)"), this ); 2657 fn = KFileDialog::getSaveFileName( fn, i18n("Export iCal filename(*.ics)"), this );
2656 } 2658 }
2657 else 2659 else
2658 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); 2660 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this );
2659 if ( fn == "" ) 2661 if ( fn == "" )
2660 return; 2662 return;
2661 QFileInfo info; 2663 QFileInfo info;
2662 info.setFile( fn ); 2664 info.setFile( fn );
2663 QString mes; 2665 QString mes;
2664 bool createbup = true; 2666 bool createbup = true;
2665 if ( info. exists() ) { 2667 if ( info. exists() ) {
2666 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 2668 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
2667 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 2669 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
2668 i18n("Overwrite!"), i18n("Cancel"), 0, 2670 i18n("Overwrite!"), i18n("Cancel"), 0,
2669 0, 1 ); 2671 0, 1 );
2670 if ( result != 0 ) { 2672 if ( result != 0 ) {
2671 createbup = false; 2673 createbup = false;
2672 } 2674 }
2673 } 2675 }
2674 if ( createbup ) { 2676 if ( createbup ) {
2675 bool success = false; 2677 bool success = false;
2676 if ( iCalFormat ) 2678 if ( iCalFormat )
2677 success = mView->exportICalendar( fn ); 2679 success = mView->exportICalendar( fn );
2678 else 2680 else
2679 success = mView->exportVCalendar( fn ); 2681 success = mView->exportVCalendar( fn );
2680 if ( success ) { 2682 if ( success ) {
2681 if ( fn.length() > 20 ) 2683 if ( fn.length() > 20 )
2682 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; 2684 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ;
2683 else 2685 else
2684 mes = i18n("KO/Pi:Exported to %1").arg(fn ); 2686 mes = i18n("KO/Pi:Exported to %1").arg(fn );
2685 setCaption(mes); 2687 setCaption(mes);
2686 } 2688 }
2687 } 2689 }
2688 2690
2689} 2691}
2690void MainWindow::exportICalendar() 2692void MainWindow::exportICalendar()
2691{ 2693{
2692 exportCalendar( true ); 2694 exportCalendar( true );
2693} 2695}
2694void MainWindow::exportVCalendar() 2696void MainWindow::exportVCalendar()
2695{ 2697{
2696 exportCalendar( false ); 2698 exportCalendar( false );
2697} 2699}
2698QString MainWindow::sentSyncFile() 2700QString MainWindow::sentSyncFile()
2699{ 2701{
2700#ifdef DESKTOP_VERSION 2702#ifdef DESKTOP_VERSION
2701 return QDir::convertSeparators( locateLocal( "tmp", "copysynccal.ics" ) ); 2703 return QDir::convertSeparators( locateLocal( "tmp", "copysynccal.ics" ) );
2702#else 2704#else
2703 return QString( "/tmp/copysynccal.ics" ); 2705 return QString( "/tmp/copysynccal.ics" );
2704#endif 2706#endif
2705} 2707}
2706 2708
2707void MainWindow::syncFileRequest() 2709void MainWindow::syncFileRequest(const QString& resource)
2708{ 2710{
2709 while ( mSyncManager->blockSave() ) { 2711 while ( mSyncManager->blockSave() ) {
2710 qApp->processEvents(); 2712 qApp->processEvents();
2711 } 2713 }
2712 mSyncManager->setBlockSave(true); 2714 mSyncManager->setBlockSave(true);
2713 2715
2714 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 2716 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
2715 mSyncManager->slotSyncMenu( 999 ); 2717 mSyncManager->slotSyncMenu( 999 );
2716 } 2718 }
2717 2719
2718 setCaption(i18n("Saving Data to temp file ..." )); 2720 setCaption(i18n("Saving Data to temp file ..." ));
2719 mView->saveCalendar( sentSyncFile() ); 2721 mView->saveCalendarResource( sentSyncFile(), resource );
2720 setCaption(i18n("Data saved to temp file!" )); 2722 setCaption(i18n("Data saved to temp file!" ));
2721 mSyncManager->setBlockSave( false ); 2723 mSyncManager->setBlockSave( false );
2722 2724
2723} 2725}
2724void MainWindow::getFile( bool success ) 2726void MainWindow::getFile( bool success ,const QString& resource)
2725{ 2727{
2726 if ( ! success ) { 2728 if ( ! success ) {
2727 setCaption( i18n("Error receiving file. Nothing changed!") ); 2729 setCaption( i18n("Error receiving file. Nothing changed!") );
2728 return; 2730 return;
2729 } 2731 }
2730 mView->mergeFile( sentSyncFile() ); 2732 mView->mergeFileResource( sentSyncFile(), resource);
2731 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 2733 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
2732 mSyncManager->slotSyncMenu( 999 ); 2734 mSyncManager->slotSyncMenu( 999 );
2733 } 2735 }
2734 setCaption( i18n("Pi-Sync successful!") ); 2736 setCaption( i18n("Pi-Sync successful!") );
2735} 2737}
2736void MainWindow::printListView() 2738void MainWindow::printListView()
2737{ 2739{
2738 2740
2739 QString message = i18n("You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items."); 2741 QString message = i18n("You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.");
2740 2742
2741 KMessageBox::information( this, message); 2743 KMessageBox::information( this, message);
2742} 2744}
2743void MainWindow::printSel( ) 2745void MainWindow::printSel( )
2744{ 2746{
2745 mView->viewManager()->agendaView()->agenda()->printSelection(); 2747 mView->viewManager()->agendaView()->agenda()->printSelection();
2746} 2748}
2747 2749
2748void MainWindow::printCal() 2750void MainWindow::printCal()
2749{ 2751{
2750 mView->print();//mCp->showDialog(); 2752 mView->print();//mCp->showDialog();
2751} 2753}
2752 2754
2753 2755
2754#include "libkdepim/kdatepicker.h" 2756#include "libkdepim/kdatepicker.h"
2755#include <kdatetbl.h> 2757#include <kdatetbl.h>
2756 2758
2757void MainWindow::weekAction() 2759void MainWindow::weekAction()
2758{ 2760{
2759 int month; 2761 int month;
2760 KPopupFrame* popup = new KPopupFrame(this); 2762 KPopupFrame* popup = new KPopupFrame(this);
2761 KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); 2763 KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup);
2762 // ----- 2764 // -----
2763 picker->resize(picker->sizeHint()); 2765 picker->resize(picker->sizeHint());
2764 popup->setMainWidget(picker); 2766 popup->setMainWidget(picker);
2765 picker->setFocus(); 2767 picker->setFocus();
2766 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 2768 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
2767 int x = 0; 2769 int x = 0;
2768 int y = iconToolBar->height(); 2770 int y = iconToolBar->height();
2769 int dX = 0; 2771 int dX = 0;
2770 int dY = 0; 2772 int dY = 0;
2771 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 2773 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
2772 if ( iconToolBar->y() > height()/2 ) { 2774 if ( iconToolBar->y() > height()/2 ) {
2773 dY = picker->sizeHint().height()+8; 2775 dY = picker->sizeHint().height()+8;
2774 y = 0; 2776 y = 0;
2775 } 2777 }
2776 } else { 2778 } else {
2777 if ( iconToolBar->x() > width()/2 ) { // right side 2779 if ( iconToolBar->x() > width()/2 ) { // right side
2778 x=0; 2780 x=0;
2779 dX= picker->sizeHint().width()+8; 2781 dX= picker->sizeHint().width()+8;
2780 y = 0; 2782 y = 0;
2781 } else { 2783 } else {
2782 x= iconToolBar->width(); 2784 x= iconToolBar->width();
2783 y = 0; 2785 y = 0;
2784 } 2786 }
2785 } 2787 }
2786 //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); 2788 //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() );
2787 if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY)))) 2789 if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY))))
2788 { 2790 {
2789 month = picker->getResult(); 2791 month = picker->getResult();
2790 emit selectWeek ( month ); 2792 emit selectWeek ( month );
2791 //qDebug("weekSelected %d ", month); 2793 //qDebug("weekSelected %d ", month);
2792 } 2794 }
2793 delete popup; 2795 delete popup;
2794} 2796}
2795 2797
2796void MainWindow::hideEvent ( QHideEvent * ) 2798void MainWindow::hideEvent ( QHideEvent * )
2797{ 2799{
2798 QString message; 2800 QString message;
2799 QDateTime nextA = mCalendar->nextAlarmEventDateTime(); 2801 QDateTime nextA = mCalendar->nextAlarmEventDateTime();
2800 if ( nextA.isValid() ) { 2802 if ( nextA.isValid() ) {
2801 QString sum = mCalendar->nextSummary(); 2803 QString sum = mCalendar->nextSummary();
2802 2804
2803 message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false)); 2805 message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false));
2804 setCaption( message ); 2806 setCaption( message );
2805 } 2807 }
2806} 2808}
2807 2809
2808void MainWindow::resizeEvent( QResizeEvent* e) 2810void MainWindow::resizeEvent( QResizeEvent* e)
2809{ 2811{
2810#ifndef DESKTOP_VERSION 2812#ifndef DESKTOP_VERSION
2811 if ( filterToolBar ) { 2813 if ( filterToolBar ) {
2812 if ( !KOPrefs::instance()->mShowIconFilter && !KOPrefs::instance()->mShowIconOnetoolbar && QApplication::desktop()->width() > 320) { 2814 if ( !KOPrefs::instance()->mShowIconFilter && !KOPrefs::instance()->mShowIconOnetoolbar && QApplication::desktop()->width() > 320) {
2813 if (QApplication::desktop()->width() > QApplication::desktop()->height() ) 2815 if (QApplication::desktop()->width() > QApplication::desktop()->height() )
2814 filterToolBar->hide(); 2816 filterToolBar->hide();
2815 else 2817 else
2816 filterToolBar->show(); 2818 filterToolBar->show();
2817 } 2819 }
2818 } 2820 }
2819#endif 2821#endif
2820 QMainWindow::resizeEvent( e); 2822 QMainWindow::resizeEvent( e);
2821} 2823}
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h
index d8018b6..a533d8b 100644
--- a/korganizer/mainwindow.h
+++ b/korganizer/mainwindow.h
@@ -17,175 +17,175 @@
17#endif 17#endif
18class QAction; 18class QAction;
19class CalendarView; 19class CalendarView;
20class KSyncProfile; 20class KSyncProfile;
21#ifdef DESKTOP_VERSION 21#ifdef DESKTOP_VERSION
22 22
23#define QPEToolBar QToolBar 23#define QPEToolBar QToolBar
24#endif 24#endif
25class QPEToolBar; 25class QPEToolBar;
26 26
27 27
28namespace KCal { 28namespace KCal {
29class CalendarLocal; 29class CalendarLocal;
30} 30}
31 31
32using namespace KCal; 32using namespace KCal;
33 33
34class MainWindow : public QMainWindow 34class MainWindow : public QMainWindow
35{ 35{
36 Q_OBJECT 36 Q_OBJECT
37 public: 37 public:
38 MainWindow( QWidget *parent = 0, const char *name = 0 ); 38 MainWindow( QWidget *parent = 0, const char *name = 0 );
39 ~MainWindow(); 39 ~MainWindow();
40 bool beamReceiveEnabled(); 40 bool beamReceiveEnabled();
41 static QString defaultFileName(); 41 static QString defaultFileName();
42 static QString syncFileName(); 42 static QString syncFileName();
43 static QString resourcePath(); 43 static QString resourcePath();
44 public slots: 44 public slots:
45 void setUsesBigPixmaps ( bool ); 45 void setUsesBigPixmaps ( bool );
46 void setCaption ( const QString & ); 46 void setCaption ( const QString & );
47 void updateWeekNum(const KCal::DateList &); 47 void updateWeekNum(const KCal::DateList &);
48 void updateWeek(QDate); 48 void updateWeek(QDate);
49 void updateFilterToolbar(); 49 void updateFilterToolbar();
50 virtual void showMaximized (); 50 virtual void showMaximized ();
51 void configureAgenda( int ); 51 void configureAgenda( int );
52 void recieve( const QCString& msg, const QByteArray& data ); 52 void recieve( const QCString& msg, const QByteArray& data );
53 void receiveStart( const QCString& msg, const QByteArray& data ); 53 void receiveStart( const QCString& msg, const QByteArray& data );
54 protected slots: 54 protected slots:
55 void autoSaveWarning(); 55 void autoSaveWarning();
56 void loadDataAfterStart(); 56 void loadDataAfterStart();
57 void calHint(); 57 void calHint();
58 void startMultiSync(); 58 void startMultiSync();
59 void setCaptionToDates(); 59 void setCaptionToDates();
60 void weekAction(); 60 void weekAction();
61 void about(); 61 void about();
62 void licence(); 62 void licence();
63 void faq(); 63 void faq();
64 void usertrans(); 64 void usertrans();
65 void features(); 65 void features();
66 void synchowto(); 66 void synchowto();
67 void storagehowto(); 67 void storagehowto();
68 void timetrackinghowto(); 68 void timetrackinghowto();
69 void kdesynchowto(); 69 void kdesynchowto();
70 void multisynchowto(); 70 void multisynchowto();
71 void whatsNew(); 71 void whatsNew();
72 void keyBindings(); 72 void keyBindings();
73 void aboutAutoSaving();; 73 void aboutAutoSaving();;
74 void aboutKnownBugs(); 74 void aboutKnownBugs();
75 75
76 void processIncidenceSelection( Incidence * ); 76 void processIncidenceSelection( Incidence * );
77 77
78 void importQtopia(); 78 void importQtopia();
79 void importBday(); 79 void importBday();
80 void importOL(); 80 void importOL();
81 void importIcal(); 81 void importIcal();
82 void importFile( QString, bool ); 82 void importFile( QString, bool );
83 void quickImportIcal(); 83 void quickImportIcal();
84 84
85 void slotModifiedChanged( bool ); 85 void slotModifiedChanged( bool );
86 86
87 void save(); 87 void save();
88 void backupAllFiles(); 88 void backupAllFiles();
89 void saveStopTimer(); 89 void saveStopTimer();
90 void configureToolBar( int ); 90 void configureToolBar( int );
91 void printSel(); 91 void printSel();
92 void printCal(); 92 void printCal();
93 void printListView(); 93 void printListView();
94 void saveCalendar(); 94 void saveCalendar();
95 void loadCalendar(); 95 void loadCalendar();
96 void exportVCalendar(); 96 void exportVCalendar();
97 void exportICalendar(); 97 void exportICalendar();
98 void exportCalendar( bool ); 98 void exportCalendar( bool );
99 void fillFilterMenu(); 99 void fillFilterMenu();
100 void fillFilterMenuTB(); 100 void fillFilterMenuTB();
101 void selectFilter( int ); 101 void selectFilter( int );
102 void fillFilterMenuPopup(); 102 void fillFilterMenuPopup();
103 void selectFilterPopup( int ); 103 void selectFilterPopup( int );
104 void exportToPhone( int ); 104 void exportToPhone( int );
105 void toggleBeamReceive(); 105 void toggleBeamReceive();
106 void disableBR(bool); 106 void disableBR(bool);
107 signals: 107 signals:
108 void selectWeek ( int ); 108 void selectWeek ( int );
109 private slots: 109 private slots:
110 void slotResetFocus(); 110 void slotResetFocus();
111 void slotResetFocusLoop(); 111 void slotResetFocusLoop();
112 void showConfigureAgenda(); 112 void showConfigureAgenda();
113 void getFile( bool ); 113 void getFile( bool ,const QString &);
114 void syncFileRequest(); 114 void syncFileRequest(const QString &);
115 115
116 protected: 116 protected:
117 int mFocusLoop; 117 int mFocusLoop;
118 void hideEvent ( QHideEvent * ); 118 void hideEvent ( QHideEvent * );
119 QString sentSyncFile(); 119 QString sentSyncFile();
120 void displayText( QString, QString); 120 void displayText( QString, QString);
121 void enableIncidenceActions( bool ); 121 void enableIncidenceActions( bool );
122 bool askForQuitOnSaveError(); 122 bool askForQuitOnSaveError();
123 123
124 private: 124 private:
125 bool mAutoSaveDisabled; 125 bool mAutoSaveDisabled;
126 bool checkAutosave(); 126 bool checkAutosave();
127 QCString mCStringMess; 127 QCString mCStringMess;
128 QByteArray mByteData; 128 QByteArray mByteData;
129 129
130 //void setMenuBar( QMenuBar * ); 130 //void setMenuBar( QMenuBar * );
131 bool mBRdisabled; 131 bool mBRdisabled;
132#ifndef DESKTOP_VERSION 132#ifndef DESKTOP_VERSION
133 QCopChannel* infrared; 133 QCopChannel* infrared;
134#endif 134#endif
135 QAction* brAction; 135 QAction* brAction;
136 KSyncManager* mSyncManager; 136 KSyncManager* mSyncManager;
137 bool mClosed; 137 bool mClosed;
138 void saveOnClose(); 138 void saveOnClose();
139 bool mFlagKeyPressed; 139 bool mFlagKeyPressed;
140 bool mBlockAtStartup; 140 bool mBlockAtStartup;
141 KMenuBar *menuBar1; 141 KMenuBar *menuBar1;
142 QPEToolBar *iconToolBar; 142 QPEToolBar *iconToolBar;
143 QPEToolBar *viewToolBar; 143 QPEToolBar *viewToolBar;
144 QPEToolBar *navigatorToolBar; 144 QPEToolBar *navigatorToolBar;
145 QPEToolBar *filterToolBar; 145 QPEToolBar *filterToolBar;
146 KMenuBar *filterMenubar; 146 KMenuBar *filterMenubar;
147 QPopupMenu * filterPopupMenu; 147 QPopupMenu * filterPopupMenu;
148 QPopupMenu * mCurrentItemMenu; 148 QPopupMenu * mCurrentItemMenu;
149 void initActions(); 149 void initActions();
150 void setDefaultPreferences(); 150 void setDefaultPreferences();
151 void resizeEvent( QResizeEvent* e); 151 void resizeEvent( QResizeEvent* e);
152 void keyPressEvent ( QKeyEvent * ) ; 152 void keyPressEvent ( QKeyEvent * ) ;
153 void keyReleaseEvent ( QKeyEvent * ) ; 153 void keyReleaseEvent ( QKeyEvent * ) ;
154 QPopupMenu *configureToolBarMenu; 154 QPopupMenu *configureToolBarMenu;
155 QPopupMenu *selectFilterMenu; 155 QPopupMenu *selectFilterMenu;
156 QPopupMenu *selectFilterMenuTB; 156 QPopupMenu *selectFilterMenuTB;
157 QPopupMenu *configureAgendaMenu, *syncMenu; 157 QPopupMenu *configureAgendaMenu, *syncMenu;
158 CalendarLocal *mCalendar; 158 CalendarLocal *mCalendar;
159 CalendarView *mView; 159 CalendarView *mView;
160 QAction *mNewSubTodoAction; 160 QAction *mNewSubTodoAction;
161 QAction *mWeekAction; 161 QAction *mWeekAction;
162 QFont mWeekFont; 162 QFont mWeekFont;
163 QPixmap mWeekPixmap; 163 QPixmap mWeekPixmap;
164 QColor mWeekBgColor; 164 QColor mWeekBgColor;
165 165
166 QAction *mShowAction; 166 QAction *mShowAction;
167 QAction *mEditAction; 167 QAction *mEditAction;
168 QAction *mDeleteAction; 168 QAction *mDeleteAction;
169 QAction *mCloneAction; 169 QAction *mCloneAction;
170 QAction *mMoveAction; 170 QAction *mMoveAction;
171 QAction *mBeamAction; 171 QAction *mBeamAction;
172 QAction *mCancelAction; 172 QAction *mCancelAction;
173 QAction *mPrintSelAction; 173 QAction *mPrintSelAction;
174 174
175 QAction *mToggleNav; 175 QAction *mToggleNav;
176 QAction *mToggleFilter; 176 QAction *mToggleFilter;
177 QAction *mToggleAllday; 177 QAction *mToggleAllday;
178 QAction *actionFilterMenuTB; 178 QAction *actionFilterMenuTB;
179 179
180 void closeEvent( QCloseEvent* ce ); 180 void closeEvent( QCloseEvent* ce );
181 QTimer mSaveTimer; 181 QTimer mSaveTimer;
182 QDateTime mSaveTimerStart; 182 QDateTime mSaveTimerStart;
183 int mSaveDelay; 183 int mSaveDelay;
184 //bool mBlockSaveFlag; 184 //bool mBlockSaveFlag;
185 bool mCalendarModifiedFlag; 185 bool mCalendarModifiedFlag;
186 QPixmap loadPixmap( QString ); 186 QPixmap loadPixmap( QString );
187 QPixmap listviewPix, listviewPix0, listviewPix20, listviewPix40, listviewPix60, listviewPix80, journalPix; 187 QPixmap listviewPix, listviewPix0, listviewPix20, listviewPix40, listviewPix60, listviewPix80, journalPix;
188}; 188};
189 189
190 190
191#endif 191#endif
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 4b8b3ff..0a94914 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,177 +1,178 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0; 79 virtual bool mergeCalendarFile( QString name ) = 0;
80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0; 80 virtual Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ) = 0;
81 virtual void setSyncEventsReadOnly() = 0; 81 virtual void setSyncEventsReadOnly() = 0;
82 virtual void setSyncEventsEnabled() = 0;
82 virtual void stopAllTodos() = 0; 83 virtual void stopAllTodos() = 0;
83 virtual void clearUndo( Incidence * newUndo ); 84 virtual void clearUndo( Incidence * newUndo );
84 85
85 /** 86 /**
86 Sync changes in memory to persistant storage. 87 Sync changes in memory to persistant storage.
87 */ 88 */
88 virtual void save() = 0; 89 virtual void save() = 0;
89 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 90 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
90 virtual void removeSyncInfo( QString syncProfile) = 0; 91 virtual void removeSyncInfo( QString syncProfile) = 0;
91 virtual bool isSaving() { return false; } 92 virtual bool isSaving() { return false; }
92 93
93 /** 94 /**
94 Return the owner of the calendar's full name. 95 Return the owner of the calendar's full name.
95 */ 96 */
96 const QString &getOwner() const; 97 const QString &getOwner() const;
97 /** 98 /**
98 Set the owner of the calendar. Should be owner's full name. 99 Set the owner of the calendar. Should be owner's full name.
99 */ 100 */
100 void setOwner( const QString &os ); 101 void setOwner( const QString &os );
101 /** 102 /**
102 Return the email address of the calendar owner. 103 Return the email address of the calendar owner.
103 */ 104 */
104 const QString &getEmail(); 105 const QString &getEmail();
105 /** 106 /**
106 Set the email address of the calendar owner. 107 Set the email address of the calendar owner.
107 */ 108 */
108 void setEmail( const QString & ); 109 void setEmail( const QString & );
109 110
110 /** 111 /**
111 Set time zone from a timezone string (e.g. -2:00) 112 Set time zone from a timezone string (e.g. -2:00)
112 */ 113 */
113 void setTimeZone( const QString &tz ); 114 void setTimeZone( const QString &tz );
114 /** 115 /**
115 Set time zone from a minutes value (e.g. -60) 116 Set time zone from a minutes value (e.g. -60)
116 */ 117 */
117 void setTimeZone( int tz ); 118 void setTimeZone( int tz );
118 /** 119 /**
119 Return time zone as offest in minutes. 120 Return time zone as offest in minutes.
120 */ 121 */
121 int getTimeZone() const; 122 int getTimeZone() const;
122 /** 123 /**
123 Compute an ISO 8601 format string from the time zone. 124 Compute an ISO 8601 format string from the time zone.
124 */ 125 */
125 QString getTimeZoneStr() const; 126 QString getTimeZoneStr() const;
126 /** 127 /**
127 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 128 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
128 values). 129 values).
129 */ 130 */
130 void setTimeZoneId( const QString & ); 131 void setTimeZoneId( const QString & );
131 /** 132 /**
132 Return time zone id. 133 Return time zone id.
133 */ 134 */
134 QString timeZoneId() const; 135 QString timeZoneId() const;
135 /** 136 /**
136 Use local time, not UTC or a time zone. 137 Use local time, not UTC or a time zone.
137 */ 138 */
138 void setLocalTime(); 139 void setLocalTime();
139 /** 140 /**
140 Return whether local time is being used. 141 Return whether local time is being used.
141 */ 142 */
142 bool isLocalTime() const; 143 bool isLocalTime() const;
143 144
144 /** 145 /**
145 Add an incidence to calendar. 146 Add an incidence to calendar.
146 147
147 @return true on success, false on error. 148 @return true on success, false on error.
148 */ 149 */
149 virtual bool addIncidence( Incidence * ); 150 virtual bool addIncidence( Incidence * );
150 151
151 // Adds an incidence and all relatedto incidences to the cal 152 // Adds an incidence and all relatedto incidences to the cal
152 void addIncidenceBranch( Incidence * ); 153 void addIncidenceBranch( Incidence * );
153 /** 154 /**
154 Return filtered list of all incidences of this calendar. 155 Return filtered list of all incidences of this calendar.
155 */ 156 */
156 virtual QPtrList<Incidence> incidences(); 157 virtual QPtrList<Incidence> incidences();
157 158
158 /** 159 /**
159 Return unfiltered list of all incidences of this calendar. 160 Return unfiltered list of all incidences of this calendar.
160 */ 161 */
161 virtual QPtrList<Incidence> rawIncidences(); 162 virtual QPtrList<Incidence> rawIncidences();
162 163
163 /** 164 /**
164 Adds a Event to this calendar object. 165 Adds a Event to this calendar object.
165 @param anEvent a pointer to the event to add 166 @param anEvent a pointer to the event to add
166 167
167 @return true on success, false on error. 168 @return true on success, false on error.
168 */ 169 */
169 virtual bool addEventNoDup( Event *event ) = 0; 170 virtual bool addEventNoDup( Event *event ) = 0;
170 virtual bool addAnniversaryNoDup( Event *event ) = 0; 171 virtual bool addAnniversaryNoDup( Event *event ) = 0;
171 virtual bool addEvent( Event *anEvent ) = 0; 172 virtual bool addEvent( Event *anEvent ) = 0;
172 /** 173 /**
173 Delete event from calendar. 174 Delete event from calendar.
174 */ 175 */
175 virtual void deleteEvent( Event * ) = 0; 176 virtual void deleteEvent( Event * ) = 0;
176 /** 177 /**
177 Retrieves an event on the basis of the unique string ID. 178 Retrieves an event on the basis of the unique string ID.
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 0ddfeca..45e3128 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -80,199 +80,211 @@ bool CalendarLocal::mergeCalendarFile( QString name )
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::setSyncEventsReadOnly() 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->setReadOnly( true ); 182 ev->setCalEnabled( true );
183 ev = mEventList.next();
184 }
185}
186void CalendarLocal::setSyncEventsReadOnly()
187{
188 Event * ev;
189 ev = mEventList.first();
190 while ( ev ) {
191 if ( ev->uid().left(15) == QString("last-syncEvent-") ) {
192 ev->setReadOnly( true );
193 ev->setCalID( 1 );
194 }
183 ev = mEventList.next(); 195 ev = mEventList.next();
184 } 196 }
185} 197}
186void CalendarLocal::addCalendar( Calendar* cal ) 198void CalendarLocal::addCalendar( Calendar* cal )
187{ 199{
188 cal->setDontDeleteIncidencesOnClose(); 200 cal->setDontDeleteIncidencesOnClose();
189 { 201 {
190 QPtrList<Event> EventList = cal->rawEvents(); 202 QPtrList<Event> EventList = cal->rawEvents();
191 Event * ev = EventList.first(); 203 Event * ev = EventList.first();
192 while ( ev ) { 204 while ( ev ) {
193 ev->unRegisterObserver( cal ); 205 ev->unRegisterObserver( cal );
194 ev->registerObserver( this ); 206 ev->registerObserver( this );
195 mEventList.append( ev ); 207 mEventList.append( ev );
196 ev = EventList.next(); 208 ev = EventList.next();
197 } 209 }
198 } 210 }
199 { 211 {
200 212
201 QPtrList<Todo> TodoList = cal->rawTodos(); 213 QPtrList<Todo> TodoList = cal->rawTodos();
202 Todo * ev = TodoList.first(); 214 Todo * ev = TodoList.first();
203 while ( ev ) { 215 while ( ev ) {
204 QString rel = ev->relatedToUid(); 216 QString rel = ev->relatedToUid();
205 if ( !rel.isEmpty() ){ 217 if ( !rel.isEmpty() ){
206 ev->setRelatedTo ( 0 ); 218 ev->setRelatedTo ( 0 );
207 ev->setRelatedToUid( rel ); 219 ev->setRelatedToUid( rel );
208 } 220 }
209 ev = TodoList.next(); 221 ev = TodoList.next();
210 } 222 }
211 //TodoList = cal->rawTodos(); 223 //TodoList = cal->rawTodos();
212 ev = TodoList.first(); 224 ev = TodoList.first();
213 while ( ev ) { 225 while ( ev ) {
214 ev->unRegisterObserver( cal ); 226 ev->unRegisterObserver( cal );
215 ev->registerObserver( this ); 227 ev->registerObserver( this );
216 mTodoList.append( ev ); 228 mTodoList.append( ev );
217 setupRelations( ev ); 229 setupRelations( ev );
218 ev = TodoList.next(); 230 ev = TodoList.next();
219 } 231 }
220 } 232 }
221 { 233 {
222 QPtrList<Journal> JournalList = cal->journals(); 234 QPtrList<Journal> JournalList = cal->journals();
223 Journal * ev = JournalList.first(); 235 Journal * ev = JournalList.first();
224 while ( ev ) { 236 while ( ev ) {
225 ev->unRegisterObserver( cal ); 237 ev->unRegisterObserver( cal );
226 ev->registerObserver( this ); 238 ev->registerObserver( this );
227 mJournalList.append( ev ); 239 mJournalList.append( ev );
228 ev = JournalList.next(); 240 ev = JournalList.next();
229 } 241 }
230 } 242 }
231 setModified( true ); 243 setModified( true );
232} 244}
233bool CalendarLocal::load( const QString &fileName ) 245bool CalendarLocal::load( const QString &fileName )
234{ 246{
235 FileStorage storage( this, fileName ); 247 FileStorage storage( this, fileName );
236 return storage.load(); 248 return storage.load();
237} 249}
238 250
239bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 251bool CalendarLocal::save( const QString &fileName, CalFormat *format )
240{ 252{
241 FileStorage storage( this, fileName, format ); 253 FileStorage storage( this, fileName, format );
242 return storage.save(); 254 return storage.save();
243} 255}
244 256
245void CalendarLocal::stopAllTodos() 257void CalendarLocal::stopAllTodos()
246{ 258{
247 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 259 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
248 it->setRunning( false ); 260 it->setRunning( false );
249 261
250} 262}
251void CalendarLocal::close() 263void CalendarLocal::close()
252{ 264{
253 265
254 Todo * i; 266 Todo * i;
255 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 267 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
256 268
257 mEventList.setAutoDelete( true ); 269 mEventList.setAutoDelete( true );
258 mTodoList.setAutoDelete( true ); 270 mTodoList.setAutoDelete( true );
259 mJournalList.setAutoDelete( true ); 271 mJournalList.setAutoDelete( true );
260 272
261 mEventList.clear(); 273 mEventList.clear();
262 mTodoList.clear(); 274 mTodoList.clear();
263 mJournalList.clear(); 275 mJournalList.clear();
264 276
265 mEventList.setAutoDelete( false ); 277 mEventList.setAutoDelete( false );
266 mTodoList.setAutoDelete( false ); 278 mTodoList.setAutoDelete( false );
267 mJournalList.setAutoDelete( false ); 279 mJournalList.setAutoDelete( false );
268 280
269 setModified( false ); 281 setModified( false );
270} 282}
271 283
272bool CalendarLocal::addAnniversaryNoDup( Event *event ) 284bool CalendarLocal::addAnniversaryNoDup( Event *event )
273{ 285{
274 QString cat; 286 QString cat;
275 bool isBirthday = true; 287 bool isBirthday = true;
276 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 288 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
277 isBirthday = false; 289 isBirthday = false;
278 cat = i18n( "Anniversary" ); 290 cat = i18n( "Anniversary" );
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index ca0bd98..eb7bf34 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,147 +1,148 @@
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#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name ); 48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal ); 49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates ); 50 Incidence* incidenceForUid( const QString& uid, bool doNotCheckDuplicates );
51 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
52 void setSyncEventsEnabled();
52 void stopAllTodos(); 53 void stopAllTodos();
53 /** 54 /**
54 Loads a calendar on disk in vCalendar or iCalendar format into the current 55 Loads a calendar on disk in vCalendar or iCalendar format into the current
55 calendar. Any information already present is lost. 56 calendar. Any information already present is lost.
56 @return true, if successfull, false on error. 57 @return true, if successfull, false on error.
57 @param fileName the name of the calendar on disk. 58 @param fileName the name of the calendar on disk.
58 */ 59 */
59 bool load( const QString &fileName ); 60 bool load( const QString &fileName );
60 /** 61 /**
61 Writes out the calendar to disk in the specified \a format. 62 Writes out the calendar to disk in the specified \a format.
62 CalendarLocal takes ownership of the CalFormat object. 63 CalendarLocal takes ownership of the CalFormat object.
63 @return true, if successfull, false on error. 64 @return true, if successfull, false on error.
64 @param fileName the name of the file 65 @param fileName the name of the file
65 */ 66 */
66 bool save( const QString &fileName, CalFormat *format = 0 ); 67 bool save( const QString &fileName, CalFormat *format = 0 );
67 68
68 /** 69 /**
69 Clears out the current calendar, freeing all used memory etc. etc. 70 Clears out the current calendar, freeing all used memory etc. etc.
70 */ 71 */
71 void close(); 72 void close();
72 73
73 void save() {} 74 void save() {}
74 75
75 /** 76 /**
76 Add Event to calendar. 77 Add Event to calendar.
77 */ 78 */
78 void removeSyncInfo( QString syncProfile); 79 void removeSyncInfo( QString syncProfile);
79 bool addAnniversaryNoDup( Event *event ); 80 bool addAnniversaryNoDup( Event *event );
80 bool addEventNoDup( Event *event ); 81 bool addEventNoDup( Event *event );
81 bool addEvent( Event *event ); 82 bool addEvent( Event *event );
82 /** 83 /**
83 Deletes an event from this calendar. 84 Deletes an event from this calendar.
84 */ 85 */
85 void deleteEvent( Event *event ); 86 void deleteEvent( Event *event );
86 87
87 /** 88 /**
88 Retrieves an event on the basis of the unique string ID. 89 Retrieves an event on the basis of the unique string ID.
89 */ 90 */
90 Event *event( const QString &uid ); 91 Event *event( const QString &uid );
91 /** 92 /**
92 Return unfiltered list of all events in calendar. 93 Return unfiltered list of all events in calendar.
93 */ 94 */
94 QPtrList<Event> rawEvents(); 95 QPtrList<Event> rawEvents();
95 QPtrList<Event> getExternLastSyncEvents(); 96 QPtrList<Event> getExternLastSyncEvents();
96 /** 97 /**
97 Add a todo to the todolist. 98 Add a todo to the todolist.
98 */ 99 */
99 bool addTodo( Todo *todo ); 100 bool addTodo( Todo *todo );
100 bool addTodoNoDup( Todo *todo ); 101 bool addTodoNoDup( Todo *todo );
101 /** 102 /**
102 Remove a todo from the todolist. 103 Remove a todo from the todolist.
103 */ 104 */
104 void deleteTodo( Todo * ); 105 void deleteTodo( Todo * );
105 /** 106 /**
106 Searches todolist for an event with this unique string identifier, 107 Searches todolist for an event with this unique string identifier,
107 returns a pointer or null. 108 returns a pointer or null.
108 */ 109 */
109 Todo *todo( const QString &uid ); 110 Todo *todo( const QString &uid );
110 /** 111 /**
111 Return list of all todos. 112 Return list of all todos.
112 */ 113 */
113 QPtrList<Todo> rawTodos(); 114 QPtrList<Todo> rawTodos();
114 /** 115 /**
115 Returns list of todos due on the specified date. 116 Returns list of todos due on the specified date.
116 */ 117 */
117 QPtrList<Todo> todos( const QDate &date ); 118 QPtrList<Todo> todos( const QDate &date );
118 /** 119 /**
119 Return list of all todos. 120 Return list of all todos.
120 121
121 Workaround because compiler does not recognize function of base class. 122 Workaround because compiler does not recognize function of base class.
122 */ 123 */
123 QPtrList<Todo> todos() { return Calendar::todos(); } 124 QPtrList<Todo> todos() { return Calendar::todos(); }
124 125
125 /** 126 /**
126 Add a Journal entry to calendar. 127 Add a Journal entry to calendar.
127 */ 128 */
128 bool addJournal( Journal * ); 129 bool addJournal( Journal * );
129 /** 130 /**
130 Remove a Journal from the calendar. 131 Remove a Journal from the calendar.
131 */ 132 */
132 void deleteJournal( Journal * ); 133 void deleteJournal( Journal * );
133 /** 134 /**
134 Return Journal for given date. 135 Return Journal for given date.
135 */ 136 */
136 Journal *journal( const QDate & ); 137 Journal *journal( const QDate & );
137 QPtrList<Journal> journals4Date( const QDate & ); 138 QPtrList<Journal> journals4Date( const QDate & );
138 /** 139 /**
139 Return Journal with given UID. 140 Return Journal with given UID.
140 */ 141 */
141 Journal *journal( const QString &uid ); 142 Journal *journal( const QString &uid );
142 /** 143 /**
143 Return list of all Journals stored in calendar. 144 Return list of all Journals stored in calendar.
144 */ 145 */
145 QPtrList<Journal> journals(); 146 QPtrList<Journal> journals();
146 147
147 /** 148 /**
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index a64eb34..719d80b 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -103,193 +103,194 @@ void KSyncManager::fillSyncMenu()
103 mSyncMenu->insertSeparator(); 103 mSyncMenu->insertSeparator();
104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 104 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
105 mSyncMenu->insertSeparator(); 105 mSyncMenu->insertSeparator();
106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 106 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
107 config.setGroup("General"); 107 config.setGroup("General");
108 QStringList prof = config.readListEntry("SyncProfileNames"); 108 QStringList prof = config.readListEntry("SyncProfileNames");
109 mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 109 mLocalMachineName = config.readEntry("LocalMachineName","undefined");
110 if ( prof.count() < 2 ) { 110 if ( prof.count() < 2 ) {
111 prof.clear(); 111 prof.clear();
112 QString externalName; 112 QString externalName;
113#ifdef DESKTOP_VERSION 113#ifdef DESKTOP_VERSION
114#ifdef _WIN32_ 114#ifdef _WIN32_
115 externalName = "OutLook(not_implemented)"; 115 externalName = "OutLook(not_implemented)";
116#else 116#else
117 externalName = "KDE_Desktop"; 117 externalName = "KDE_Desktop";
118#endif 118#endif
119#else 119#else
120 externalName = "Sharp_DTM"; 120 externalName = "Sharp_DTM";
121#endif 121#endif
122 prof << externalName; 122 prof << externalName;
123 prof << i18n("Local_file"); 123 prof << i18n("Local_file");
124 prof << i18n("Last_file"); 124 prof << i18n("Last_file");
125 KSyncProfile* temp = new KSyncProfile (); 125 KSyncProfile* temp = new KSyncProfile ();
126 temp->setName( prof[0] ); 126 temp->setName( prof[0] );
127 temp->writeConfig(&config); 127 temp->writeConfig(&config);
128 temp->setName( prof[1] ); 128 temp->setName( prof[1] );
129 temp->writeConfig(&config); 129 temp->writeConfig(&config);
130 temp->setName( prof[2] ); 130 temp->setName( prof[2] );
131 temp->writeConfig(&config); 131 temp->writeConfig(&config);
132 config.setGroup("General"); 132 config.setGroup("General");
133 config.writeEntry("SyncProfileNames",prof); 133 config.writeEntry("SyncProfileNames",prof);
134 config.writeEntry("ExternSyncProfiles",externalName); 134 config.writeEntry("ExternSyncProfiles",externalName);
135 config.sync(); 135 config.sync();
136 delete temp; 136 delete temp;
137 } 137 }
138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 138 mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
139 mSyncProfileNames = prof; 139 mSyncProfileNames = prof;
140 unsigned int i; 140 unsigned int i;
141 for ( i = 0; i < prof.count(); ++i ) { 141 for ( i = 0; i < prof.count(); ++i ) {
142 QString insertText = prof[i]; 142 QString insertText = prof[i];
143 if ( i == 0 ) { 143 if ( i == 0 ) {
144#ifdef DESKTOP_VERSION 144#ifdef DESKTOP_VERSION
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 insertText = "OutLook(not_implemented)"; 146 insertText = "OutLook(not_implemented)";
147#else 147#else
148 insertText = "KDE_Desktop"; 148 insertText = "KDE_Desktop";
149#endif 149#endif
150#else 150#else
151 insertText = "Sharp_DTM"; 151 insertText = "Sharp_DTM";
152#endif 152#endif
153 } 153 }
154 mSyncMenu->insertItem( insertText, 1000+i ); 154 mSyncMenu->insertItem( insertText, 1000+i );
155 clearMenu->insertItem( insertText, 1000+i ); 155 clearMenu->insertItem( insertText, 1000+i );
156 if ( i == 2 ) 156 if ( i == 2 )
157 mSyncMenu->insertSeparator(); 157 mSyncMenu->insertSeparator();
158 } 158 }
159 QDir app_dir; 159 QDir app_dir;
160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available 160 //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
161 if ( mTargetApp == PWMPI) { 161 if ( mTargetApp == PWMPI) {
162 mSyncMenu->removeItem( 1000 ); 162 mSyncMenu->removeItem( 1000 );
163 clearMenu->removeItem( 1000 ); 163 clearMenu->removeItem( 1000 );
164 } 164 }
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 166 else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
167 mSyncMenu->removeItem( 1000 ); 167 mSyncMenu->removeItem( 1000 );
168 clearMenu->removeItem( 1000 ); 168 clearMenu->removeItem( 1000 );
169 } 169 }
170#endif 170#endif
171 mSyncMenu->removeItem( 1002 ); 171 mSyncMenu->removeItem( 1002 );
172 clearMenu->removeItem( 1002 ); 172 clearMenu->removeItem( 1002 );
173} 173}
174void KSyncManager::slotClearMenu( int action ) 174void KSyncManager::slotClearMenu( int action )
175{ 175{
176 QString syncDevice; 176 QString syncDevice;
177 if ( action > 999 ) { 177 if ( action > 999 ) {
178 syncDevice = mSyncProfileNames[action - 1000] ; 178 syncDevice = mSyncProfileNames[action - 1000] ;
179 } 179 }
180 180
181 181
182 182
183 int result = 0; 183 int result = 0;
184 QString sd; 184 QString sd;
185 if ( syncDevice.isEmpty() ) 185 if ( syncDevice.isEmpty() )
186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?"); 186 sd = i18n("Do you want to\nclear all sync info\nof all profiles?");
187 else 187 else
188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice ); 188 sd = i18n("Do you want to\nclear the sync\ninfo of profile\n%1?\n"). arg( syncDevice );
189 189
190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0, 190 result = QMessageBox::warning( mParent, i18n("Warning!"),sd,i18n("OK"), i18n("Cancel"), 0,
191 0, 1 ); 191 0, 1 );
192 if ( result ) 192 if ( result )
193 return; 193 return;
194 mImplementation->removeSyncInfo( syncDevice ); 194 mImplementation->removeSyncInfo( syncDevice );
195} 195}
196void KSyncManager::slotSyncMenu( int action ) 196void KSyncManager::slotSyncMenu( int action )
197{ 197{
198 qDebug("KSM::syncaction %d ", action); 198 qDebug("KSM::syncaction %d ", action);
199 mCurrentResourceLocal = ""; 199 mCurrentResourceLocal = "";
200 emit multiResourceSyncStart( false );
200 if ( action == 5000 ) 201 if ( action == 5000 )
201 return; 202 return;
202 mSyncWithDesktop = false; 203 mSyncWithDesktop = false;
203 if ( action == 0 ) { 204 if ( action == 0 ) {
204 205
205 // seems to be a Qt2 event handling bug 206 // seems to be a Qt2 event handling bug
206 // syncmenu.clear causes a segfault at first time 207 // syncmenu.clear causes a segfault at first time
207 // when we call it after the main event loop, it is ok 208 // when we call it after the main event loop, it is ok
208 // same behaviour when calling OM/Pi via QCOP for the first time 209 // same behaviour when calling OM/Pi via QCOP for the first time
209 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 210 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
210 //confSync(); 211 //confSync();
211 212
212 return; 213 return;
213 } 214 }
214 if ( action == 1 ) { 215 if ( action == 1 ) {
215 multiSync( true ); 216 multiSync( true );
216 return; 217 return;
217 } 218 }
218 if ( action == 2 ) { 219 if ( action == 2 ) {
219 enableQuick(); 220 enableQuick();
220 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 221 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
221 return; 222 return;
222 } 223 }
223 if ( action == 3 ) { 224 if ( action == 3 ) {
224 delete mServerSocket; 225 delete mServerSocket;
225 mServerSocket = 0; 226 mServerSocket = 0;
226 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) ); 227 QTimer::singleShot ( 1, this, SLOT ( fillSyncMenu() ) );
227 return; 228 return;
228 } 229 }
229 230
230 if (blockSave()) 231 if (blockSave())
231 return; 232 return;
232 233
233 setBlockSave(true); 234 setBlockSave(true);
234 bool silent = false; 235 bool silent = false;
235 if ( action == 999 ) { 236 if ( action == 999 ) {
236 //special mode for silent syncing 237 //special mode for silent syncing
237 action = 1000; 238 action = 1000;
238 silent = true; 239 silent = true;
239 } 240 }
240 241
241 mCurrentSyncProfile = action - 1000 ; 242 mCurrentSyncProfile = action - 1000 ;
242 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ; 243 mCurrentSyncDevice = mSyncProfileNames[mCurrentSyncProfile] ;
243 mCurrentSyncName = mLocalMachineName ; 244 mCurrentSyncName = mLocalMachineName ;
244 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 245 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
245 KSyncProfile* temp = new KSyncProfile (); 246 KSyncProfile* temp = new KSyncProfile ();
246 temp->setName(mSyncProfileNames[mCurrentSyncProfile]); 247 temp->setName(mSyncProfileNames[mCurrentSyncProfile]);
247 temp->readConfig(&config); 248 temp->readConfig(&config);
248 if (silent) { 249 if (silent) {
249 mAskForPreferences = false; 250 mAskForPreferences = false;
250 mShowSyncSummary = false; 251 mShowSyncSummary = false;
251 mWriteBackFile = true; 252 mWriteBackFile = true;
252 mSyncAlgoPrefs = 2;// take newest 253 mSyncAlgoPrefs = 2;// take newest
253 } 254 }
254 else { 255 else {
255 mAskForPreferences = temp->getAskForPreferences(); 256 mAskForPreferences = temp->getAskForPreferences();
256 mShowSyncSummary = temp->getShowSummaryAfterSync(); 257 mShowSyncSummary = temp->getShowSummaryAfterSync();
257 mWriteBackFile = temp->getWriteBackFile(); 258 mWriteBackFile = temp->getWriteBackFile();
258 mSyncAlgoPrefs = temp->getSyncPrefs(); 259 mSyncAlgoPrefs = temp->getSyncPrefs();
259 } 260 }
260 mWriteBackExistingOnly = temp->getWriteBackExisting(); 261 mWriteBackExistingOnly = temp->getWriteBackExisting();
261 mIsKapiFile = temp->getIsKapiFile(); 262 mIsKapiFile = temp->getIsKapiFile();
262 mWriteBackInFuture = 0; 263 mWriteBackInFuture = 0;
263 if ( temp->getWriteBackFuture() ) { 264 if ( temp->getWriteBackFuture() ) {
264 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 265 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
265 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 266 mWriteBackInPast = temp->getWriteBackPastWeeks( );
266 } 267 }
267 mFilterInCal = temp->getFilterInCal(); 268 mFilterInCal = temp->getFilterInCal();
268 mFilterOutCal = temp->getFilterOutCal(); 269 mFilterOutCal = temp->getFilterOutCal();
269 mFilterInAB = temp->getFilterInAB(); 270 mFilterInAB = temp->getFilterInAB();
270 mFilterOutAB = temp->getFilterOutAB(); 271 mFilterOutAB = temp->getFilterOutAB();
271 272
272 if ( action == 1000 ) { 273 if ( action == 1000 ) {
273 mIsKapiFile = false; 274 mIsKapiFile = false;
274#ifdef DESKTOP_VERSION 275#ifdef DESKTOP_VERSION
275 syncKDE(); 276 syncKDE();
276#else 277#else
277 syncSharp(); 278 syncSharp();
278#endif 279#endif
279 280
280 } else if ( action == 1001 ) { 281 } else if ( action == 1001 ) {
281 syncLocalFile(); 282 syncLocalFile();
282 283
283 } else if ( action == 1002 ) { 284 } else if ( action == 1002 ) {
284 mWriteBackFile = false; 285 mWriteBackFile = false;
285 mAskForPreferences = false; 286 mAskForPreferences = false;
286 mShowSyncSummary = false; 287 mShowSyncSummary = false;
287 mSyncAlgoPrefs = 3; 288 mSyncAlgoPrefs = 3;
288 quickSyncLocalFile(); 289 quickSyncLocalFile();
289 290
290 } else if ( action >= 1003 ) { 291 } else if ( action >= 1003 ) {
291 if ( temp->getIsLocalFileSync() ) { 292 if ( temp->getIsLocalFileSync() ) {
292 switch(mTargetApp) 293 switch(mTargetApp)
293 { 294 {
294 case (KAPI): 295 case (KAPI):
295 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 296 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
@@ -348,321 +349,323 @@ void KSyncManager::slotSyncMenu( int action )
348void KSyncManager::enableQuick( bool ask ) 349void KSyncManager::enableQuick( bool ask )
349{ 350{
350 bool autoStart; 351 bool autoStart;
351 bool changed = false; 352 bool changed = false;
352 if ( ask ) { 353 if ( ask ) {
353 QDialog dia ( 0, "input-dialog", true ); 354 QDialog dia ( 0, "input-dialog", true );
354 QLineEdit lab ( &dia ); 355 QLineEdit lab ( &dia );
355 QVBoxLayout lay( &dia ); 356 QVBoxLayout lay( &dia );
356 lab.setText( mPrefs->mPassiveSyncPort ); 357 lab.setText( mPrefs->mPassiveSyncPort );
357 lay.setMargin(7); 358 lay.setMargin(7);
358 lay.setSpacing(7); 359 lay.setSpacing(7);
359 int po = 9197+mTargetApp; 360 int po = 9197+mTargetApp;
360 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia ); 361 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
361 lay.addWidget( &label); 362 lay.addWidget( &label);
362 lay.addWidget( &lab); 363 lay.addWidget( &lab);
363 364
364 QLineEdit lepw ( &dia ); 365 QLineEdit lepw ( &dia );
365 lepw.setText( mPrefs->mPassiveSyncPw ); 366 lepw.setText( mPrefs->mPassiveSyncPw );
366 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 367 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
367 lay.addWidget( &label2); 368 lay.addWidget( &label2);
368 lay.addWidget( &lepw); 369 lay.addWidget( &lepw);
369 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 370 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
370 lay.addWidget( &autostart); 371 lay.addWidget( &autostart);
371 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 372 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
372#ifdef DESKTOP_VERSION 373#ifdef DESKTOP_VERSION
373#ifdef _WIN32_ 374#ifdef _WIN32_
374 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 375 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
375 syncdesktop.hide();// not implemented! 376 syncdesktop.hide();// not implemented!
376#else 377#else
377 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
378#endif 379#endif
379 lay.addWidget( &syncdesktop); 380 lay.addWidget( &syncdesktop);
380#else 381#else
381 mPrefs->mPassiveSyncWithDesktop = false; 382 mPrefs->mPassiveSyncWithDesktop = false;
382 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 383 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
383 syncdesktop.hide(); 384 syncdesktop.hide();
384#endif 385#endif
385 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 386 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
386 387
387 QPushButton pb ( "OK", &dia); 388 QPushButton pb ( "OK", &dia);
388 lay.addWidget( &pb ); 389 lay.addWidget( &pb );
389 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 390 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
390 dia.resize( 230,120 ); 391 dia.resize( 230,120 );
391 dia.setCaption( i18n("Enter port for Pi-Sync") ); 392 dia.setCaption( i18n("Enter port for Pi-Sync") );
392 dia.show(); 393 dia.show();
393#ifndef DESKTOP_VERSION 394#ifndef DESKTOP_VERSION
394 int dw = QApplication::desktop()->width(); 395 int dw = QApplication::desktop()->width();
395 int dh = QApplication::desktop()->height(); 396 int dh = QApplication::desktop()->height();
396 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 397 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
397#endif 398#endif
398 if ( ! dia.exec() ) 399 if ( ! dia.exec() )
399 return; 400 return;
400 dia.hide(); 401 dia.hide();
401 qApp->processEvents(); 402 qApp->processEvents();
402 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 403 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
403 changed = true; 404 changed = true;
404 mPrefs->mPassiveSyncPw = lepw.text(); 405 mPrefs->mPassiveSyncPw = lepw.text();
405 } 406 }
406 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 407 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
407 mPrefs->mPassiveSyncPort = lab.text(); 408 mPrefs->mPassiveSyncPort = lab.text();
408 changed = true; 409 changed = true;
409 } 410 }
410 autoStart = autostart.isChecked(); 411 autoStart = autostart.isChecked();
411 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 412 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
412 changed = true; 413 changed = true;
413 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 414 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
414 } 415 }
415 } 416 }
416 else 417 else
417 autoStart = mPrefs->mPassiveSyncAutoStart; 418 autoStart = mPrefs->mPassiveSyncAutoStart;
418 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 419 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
419 changed = true; 420 changed = true;
420 bool ok; 421 bool ok;
421 mPrefs->mPassiveSyncAutoStart = false; 422 mPrefs->mPassiveSyncAutoStart = false;
422 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok); 423 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
423 qDebug("%d ", port_t); 424 qDebug("%d ", port_t);
424 if ( ! ok || port_t > 65535 ) { 425 if ( ! ok || port_t > 65535 ) {
425 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error")); 426 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
426 return; 427 return;
427 } 428 }
428 Q_UINT16 port = port_t; 429 Q_UINT16 port = port_t;
429 //qDebug("port %d ", port); 430 //qDebug("port %d ", port);
430 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 431 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
431 mServerSocket->setFileName( defaultFileName() );//bbb 432 mServerSocket->setFileName( defaultFileName() );//bbb
432 if ( !mServerSocket->ok() ) { 433 if ( !mServerSocket->ok() ) {
433 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) ); 434 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
434 delete mServerSocket; 435 delete mServerSocket;
435 mServerSocket = 0; 436 mServerSocket = 0;
436 return; 437 return;
437 } 438 }
438 mPrefs->mPassiveSyncAutoStart = autoStart; 439 mPrefs->mPassiveSyncAutoStart = autoStart;
439 if ( changed ) { 440 if ( changed ) {
440 mPrefs->writeConfig(); 441 mPrefs->writeConfig();
441 } 442 }
442 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 443 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
443 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 444 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
445 connect( mServerSocket, SIGNAL ( request_file(const QString &) ),this, SIGNAL ( request_file(const QString &) ) );
446 connect( mServerSocket, SIGNAL ( file_received( bool ,const QString &) ), this, SIGNAL ( getFile( bool,const QString & ) ) );
444} 447}
445void KSyncManager::displayErrorPort() 448void KSyncManager::displayErrorPort()
446{ 449{
447 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error")); 450 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
448} 451}
449void KSyncManager::syncLocalFile() 452void KSyncManager::syncLocalFile()
450{ 453{
451 454
452 QString fn =mPrefs->mLastSyncedLocalFile; 455 QString fn =mPrefs->mLastSyncedLocalFile;
453 QString ext; 456 QString ext;
454 457
455 switch(mTargetApp) 458 switch(mTargetApp)
456 { 459 {
457 case (KAPI): 460 case (KAPI):
458 ext = "(*.vcf)"; 461 ext = "(*.vcf)";
459 break; 462 break;
460 case (KOPI): 463 case (KOPI):
461 ext = "(*.ics/*.vcs)"; 464 ext = "(*.ics/*.vcs)";
462 break; 465 break;
463 case (PWMPI): 466 case (PWMPI):
464 ext = "(*.pwm)"; 467 ext = "(*.pwm)";
465 break; 468 break;
466 default: 469 default:
467 qDebug("KSM::syncLocalFile: invalid apptype selected"); 470 qDebug("KSM::syncLocalFile: invalid apptype selected");
468 break; 471 break;
469 472
470 } 473 }
471 474
472 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 475 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
473 if ( fn == "" ) 476 if ( fn == "" )
474 return; 477 return;
475 if ( syncWithFile( fn, false ) ) { 478 if ( syncWithFile( fn, false ) ) {
476 qDebug("KSM::syncLocalFile() successful "); 479 qDebug("KSM::syncLocalFile() successful ");
477 } 480 }
478 481
479} 482}
480 483
481bool KSyncManager::syncWithFile( QString fn , bool quick ) 484bool KSyncManager::syncWithFile( QString fn , bool quick )
482{ 485{
483 bool ret = false; 486 bool ret = false;
484 QFileInfo info; 487 QFileInfo info;
485 info.setFile( fn ); 488 info.setFile( fn );
486 QString mess; 489 QString mess;
487 if ( !info. exists() ) { 490 if ( !info. exists() ) {
488 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 491 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
489 QMessageBox::warning( mParent, i18n("Warning!"), 492 QMessageBox::warning( mParent, i18n("Warning!"),
490 mess ); 493 mess );
491 return ret; 494 return ret;
492 } 495 }
493 int result = 0; 496 int result = 0;
494 if ( !quick ) { 497 if ( !quick ) {
495 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 498 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
496 result = QMessageBox::warning( mParent, i18n("Warning!"), 499 result = QMessageBox::warning( mParent, i18n("Warning!"),
497 mess, 500 mess,
498 i18n("Sync"), i18n("Cancel"), 0, 501 i18n("Sync"), i18n("Cancel"), 0,
499 0, 1 ); 502 0, 1 );
500 if ( result ) 503 if ( result )
501 return false; 504 return false;
502 } 505 }
503 if ( mAskForPreferences ) 506 if ( mAskForPreferences )
504 if ( !edit_sync_options()) { 507 if ( !edit_sync_options()) {
505 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 508 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
506 return false; 509 return false;
507 } 510 }
508 if ( result == 0 ) { 511 if ( result == 0 ) {
509 //qDebug("Now sycing ... "); 512 //qDebug("Now sycing ... ");
510 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) ) 513 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) )
511 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 514 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
512 else 515 else
513 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 516 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
514 if ( ! quick ) 517 if ( ! quick )
515 mPrefs->mLastSyncedLocalFile = fn; 518 mPrefs->mLastSyncedLocalFile = fn;
516 } 519 }
517 return ret; 520 return ret;
518} 521}
519 522
520void KSyncManager::quickSyncLocalFile() 523void KSyncManager::quickSyncLocalFile()
521{ 524{
522 525
523 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 526 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
524 qDebug("KSM::quick syncLocalFile() successful "); 527 qDebug("KSM::quick syncLocalFile() successful ");
525 528
526 } 529 }
527} 530}
528 531
529void KSyncManager::multiSync( bool askforPrefs ) 532void KSyncManager::multiSync( bool askforPrefs )
530{ 533{
531 if (blockSave()) 534 if (blockSave())
532 return; 535 return;
533 setBlockSave(true); 536 setBlockSave(true);
534 mCurrentResourceLocal = ""; 537 mCurrentResourceLocal = "";
535 if ( askforPrefs ) { 538 if ( askforPrefs ) {
536 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 539 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
537 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 540 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
538 question, 541 question,
539 i18n("Yes"), i18n("No"), 542 i18n("Yes"), i18n("No"),
540 0, 0 ) != 0 ) { 543 0, 0 ) != 0 ) {
541 setBlockSave(false); 544 setBlockSave(false);
542 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 545 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
543 return; 546 return;
544 } 547 }
545 } 548 }
546 mCurrentSyncDevice = i18n("Multiple profiles") ; 549 mCurrentSyncDevice = i18n("Multiple profiles") ;
547 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs; 550 mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
548 if ( askforPrefs ) { 551 if ( askforPrefs ) {
549 if ( !edit_sync_options()) { 552 if ( !edit_sync_options()) {
550 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") ); 553 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted.") );
551 return; 554 return;
552 } 555 }
553 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs; 556 mPrefs->mRingSyncAlgoPrefs = mSyncAlgoPrefs;
554 } 557 }
555 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") ); 558 mParent->topLevelWidget()->setCaption(i18n("Multiple sync started.") );
556 qApp->processEvents(); 559 qApp->processEvents();
557 int num = ringSync() ; 560 int num = ringSync() ;
558 if ( num > 1 ) 561 if ( num > 1 )
559 ringSync(); 562 ringSync();
560 setBlockSave(false); 563 setBlockSave(false);
561 if ( num ) 564 if ( num )
562 emit save(); 565 emit save();
563 if ( num ) 566 if ( num )
564 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) ); 567 mParent->topLevelWidget()->setCaption(i18n("%1 profiles synced. Multiple sync complete!").arg(num) );
565 else 568 else
566 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 569 mParent->topLevelWidget()->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
567 return; 570 return;
568} 571}
569 572
570int KSyncManager::ringSync() 573int KSyncManager::ringSync()
571{ 574{
572 575 emit multiResourceSyncStart( false );
573 int syncedProfiles = 0; 576 int syncedProfiles = 0;
574 unsigned int i; 577 unsigned int i;
575 QTime timer; 578 QTime timer;
576 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 579 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
577 QStringList syncProfileNames = mSyncProfileNames; 580 QStringList syncProfileNames = mSyncProfileNames;
578 KSyncProfile* temp = new KSyncProfile (); 581 KSyncProfile* temp = new KSyncProfile ();
579 mAskForPreferences = false; 582 mAskForPreferences = false;
580 mCurrentResourceLocal = ""; 583 mCurrentResourceLocal = "";
581 for ( i = 0; i < syncProfileNames.count(); ++i ) { 584 for ( i = 0; i < syncProfileNames.count(); ++i ) {
582 mCurrentSyncProfile = i; 585 mCurrentSyncProfile = i;
583 temp->setName(syncProfileNames[mCurrentSyncProfile]); 586 temp->setName(syncProfileNames[mCurrentSyncProfile]);
584 temp->readConfig(&config); 587 temp->readConfig(&config);
585 588
586 bool includeInRingSync = false; 589 bool includeInRingSync = false;
587 switch(mTargetApp) 590 switch(mTargetApp)
588 { 591 {
589 case (KAPI): 592 case (KAPI):
590 includeInRingSync = temp->getIncludeInRingSyncAB(); 593 includeInRingSync = temp->getIncludeInRingSyncAB();
591 break; 594 break;
592 case (KOPI): 595 case (KOPI):
593 includeInRingSync = temp->getIncludeInRingSync(); 596 includeInRingSync = temp->getIncludeInRingSync();
594 break; 597 break;
595 case (PWMPI): 598 case (PWMPI):
596 includeInRingSync = temp->getIncludeInRingSyncPWM(); 599 includeInRingSync = temp->getIncludeInRingSyncPWM();
597 break; 600 break;
598 default: 601 default:
599 qDebug("KSM::ringSync: invalid apptype selected"); 602 qDebug("KSM::ringSync: invalid apptype selected");
600 break; 603 break;
601 604
602 } 605 }
603 606
604 607
605 if ( includeInRingSync && ( i < 1 || i > 2 )) { 608 if ( includeInRingSync && ( i < 1 || i > 2 )) {
606 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 609 mParent->topLevelWidget()->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
607 ++syncedProfiles; 610 ++syncedProfiles;
608 mSyncWithDesktop = false; 611 mSyncWithDesktop = false;
609 // mAskForPreferences = temp->getAskForPreferences(); 612 // mAskForPreferences = temp->getAskForPreferences();
610 mWriteBackFile = temp->getWriteBackFile(); 613 mWriteBackFile = temp->getWriteBackFile();
611 mWriteBackExistingOnly = temp->getWriteBackExisting(); 614 mWriteBackExistingOnly = temp->getWriteBackExisting();
612 mIsKapiFile = temp->getIsKapiFile(); 615 mIsKapiFile = temp->getIsKapiFile();
613 mWriteBackInFuture = 0; 616 mWriteBackInFuture = 0;
614 if ( temp->getWriteBackFuture() ) { 617 if ( temp->getWriteBackFuture() ) {
615 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 618 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
616 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 619 mWriteBackInPast = temp->getWriteBackPastWeeks( );
617 } 620 }
618 mFilterInCal = temp->getFilterInCal(); 621 mFilterInCal = temp->getFilterInCal();
619 mFilterOutCal = temp->getFilterOutCal(); 622 mFilterOutCal = temp->getFilterOutCal();
620 mFilterInAB = temp->getFilterInAB(); 623 mFilterInAB = temp->getFilterInAB();
621 mFilterOutAB = temp->getFilterOutAB(); 624 mFilterOutAB = temp->getFilterOutAB();
622 mShowSyncSummary = false; 625 mShowSyncSummary = false;
623 mCurrentSyncDevice = syncProfileNames[i] ; 626 mCurrentSyncDevice = syncProfileNames[i] ;
624 mCurrentSyncName = mLocalMachineName; 627 mCurrentSyncName = mLocalMachineName;
625 if ( i == 0 ) { 628 if ( i == 0 ) {
626 mIsKapiFile = false; 629 mIsKapiFile = false;
627#ifdef DESKTOP_VERSION 630#ifdef DESKTOP_VERSION
628 syncKDE(); 631 syncKDE();
629#else 632#else
630 syncSharp(); 633 syncSharp();
631#endif 634#endif
632 } else { 635 } else {
633 if ( temp->getIsLocalFileSync() ) { 636 if ( temp->getIsLocalFileSync() ) {
634 switch(mTargetApp) 637 switch(mTargetApp)
635 { 638 {
636 case (KAPI): 639 case (KAPI):
637 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 640 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
638 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 641 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
639 break; 642 break;
640 case (KOPI): 643 case (KOPI):
641 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 644 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
642 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 645 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
643 break; 646 break;
644 case (PWMPI): 647 case (PWMPI):
645 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 648 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
646 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 649 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
647 break; 650 break;
648 default: 651 default:
649 qDebug("KSM: invalid apptype selected"); 652 qDebug("KSM: invalid apptype selected");
650 break; 653 break;
651 } 654 }
652 } else { 655 } else {
653 if ( temp->getIsPhoneSync() ) { 656 if ( temp->getIsPhoneSync() ) {
654 mPhoneDevice = temp->getPhoneDevice( ) ; 657 mPhoneDevice = temp->getPhoneDevice( ) ;
655 mPhoneConnection = temp->getPhoneConnection( ); 658 mPhoneConnection = temp->getPhoneConnection( );
656 mPhoneModel = temp->getPhoneModel( ); 659 mPhoneModel = temp->getPhoneModel( );
657 syncPhone(); 660 syncPhone();
658 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) { 661 } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) {
659 mSpecificResources.clear(); 662 mSpecificResources.clear();
660 if ( mTargetApp == KAPI ) { 663 if ( mTargetApp == KAPI ) {
661 mPassWordPiSync = temp->getRemotePwAB(); 664 mPassWordPiSync = temp->getRemotePwAB();
662 mActiveSyncPort = temp->getRemotePortAB(); 665 mActiveSyncPort = temp->getRemotePortAB();
663 mActiveSyncIP = temp->getRemoteIPAB(); 666 mActiveSyncIP = temp->getRemoteIPAB();
664 } else if ( mTargetApp == KOPI ) { 667 } else if ( mTargetApp == KOPI ) {
665 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi() ); 668 mSpecificResources = QStringList::split( ":", temp->getResSpecKopi() );
666 mPassWordPiSync = temp->getRemotePw(); 669 mPassWordPiSync = temp->getRemotePw();
667 mActiveSyncPort = temp->getRemotePort(); 670 mActiveSyncPort = temp->getRemotePort();
668 mActiveSyncIP = temp->getRemoteIP(); 671 mActiveSyncIP = temp->getRemoteIP();
@@ -1047,649 +1050,658 @@ bool KSyncManager::syncExternalApplication(QString resource)
1047 } 1050 }
1048 1051
1049 qDebug("KSM::Sync extern %s", resource.latin1()); 1052 qDebug("KSM::Sync extern %s", resource.latin1());
1050 1053
1051 bool syncOK = mImplementation->syncExternal(this, resource); 1054 bool syncOK = mImplementation->syncExternal(this, resource);
1052 1055
1053 return syncOK; 1056 return syncOK;
1054 1057
1055} 1058}
1056 1059
1057void KSyncManager::syncPhone() 1060void KSyncManager::syncPhone()
1058{ 1061{
1059 1062
1060 syncExternalApplication("phone"); 1063 syncExternalApplication("phone");
1061 1064
1062} 1065}
1063 1066
1064void KSyncManager::showProgressBar(int percentage, QString caption, int total) 1067void KSyncManager::showProgressBar(int percentage, QString caption, int total)
1065{ 1068{
1066 if (!bar->isVisible()) 1069 if (!bar->isVisible())
1067 { 1070 {
1068 int w = 300; 1071 int w = 300;
1069 if ( QApplication::desktop()->width() < 320 ) 1072 if ( QApplication::desktop()->width() < 320 )
1070 w = 220; 1073 w = 220;
1071 int h = bar->sizeHint().height() ; 1074 int h = bar->sizeHint().height() ;
1072 int dw = QApplication::desktop()->width(); 1075 int dw = QApplication::desktop()->width();
1073 int dh = QApplication::desktop()->height(); 1076 int dh = QApplication::desktop()->height();
1074 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1077 bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1075 bar->setCaption (caption); 1078 bar->setCaption (caption);
1076 bar->setTotalSteps ( total ) ; 1079 bar->setTotalSteps ( total ) ;
1077 bar->show(); 1080 bar->show();
1078 } 1081 }
1079 bar->raise(); 1082 bar->raise();
1080 bar->setProgress( percentage ); 1083 bar->setProgress( percentage );
1081 qApp->processEvents(); 1084 qApp->processEvents();
1082} 1085}
1083 1086
1084void KSyncManager::hideProgressBar() 1087void KSyncManager::hideProgressBar()
1085{ 1088{
1086 bar->hide(); 1089 bar->hide();
1087 qApp->processEvents(); 1090 qApp->processEvents();
1088} 1091}
1089 1092
1090bool KSyncManager::isProgressBarCanceled() 1093bool KSyncManager::isProgressBarCanceled()
1091{ 1094{
1092 return !bar->isVisible(); 1095 return !bar->isVisible();
1093} 1096}
1094 1097
1095QString KSyncManager::syncFileName() 1098QString KSyncManager::syncFileName()
1096{ 1099{
1097 1100
1098 QString fn = "tempfile"; 1101 QString fn = "tempfile";
1099 switch(mTargetApp) 1102 switch(mTargetApp)
1100 { 1103 {
1101 case (KAPI): 1104 case (KAPI):
1102 fn = "tempsyncab.vcf"; 1105 fn = "tempsyncab.vcf";
1103 break; 1106 break;
1104 case (KOPI): 1107 case (KOPI):
1105 fn = "tempsynccal.ics"; 1108 fn = "tempsynccal.ics";
1106 break; 1109 break;
1107 case (PWMPI): 1110 case (PWMPI):
1108 fn = "tempsyncpw.pwm"; 1111 fn = "tempsyncpw.pwm";
1109 break; 1112 break;
1110 default: 1113 default:
1111 break; 1114 break;
1112 } 1115 }
1113#ifdef DESKTOP_VERSION 1116#ifdef DESKTOP_VERSION
1114 return locateLocal( "tmp", fn ); 1117 return locateLocal( "tmp", fn );
1115#else 1118#else
1116 return (QString( "/tmp/" )+ fn ); 1119 return (QString( "/tmp/" )+ fn );
1117#endif 1120#endif
1118} 1121}
1119 1122
1120void KSyncManager::syncPi() 1123void KSyncManager::syncPi()
1121{ 1124{
1122 mIsKapiFile = true; 1125 mIsKapiFile = true;
1123 mPisyncFinished = false; 1126 mPisyncFinished = false;
1124 qApp->processEvents(); 1127 qApp->processEvents();
1125 if ( mAskForPreferences ) 1128 if ( mAskForPreferences )
1126 if ( !edit_pisync_options()) { 1129 if ( !edit_pisync_options()) {
1127 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1130 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1128 mPisyncFinished = true; 1131 mPisyncFinished = true;
1129 return; 1132 return;
1130 } 1133 }
1131 bool ok; 1134 bool ok;
1132 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1135 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1133 if ( ! ok ) { 1136 if ( ! ok ) {
1134 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1137 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1135 mPisyncFinished = true; 1138 mPisyncFinished = true;
1136 return; 1139 return;
1137 } 1140 }
1138 mCurrentResourceLocal = ""; 1141 mCurrentResourceLocal = "";
1139 mCurrentResourceRemote = ""; 1142 mCurrentResourceRemote = "";
1140 if ( mSpecificResources.count() ) { 1143 if ( mSpecificResources.count() ) {
1141 int startLocal = 0; 1144 int startLocal = 0;
1142 int startRemote = mSpecificResources.count()/2; 1145 int startRemote = mSpecificResources.count()/2;
1146 emit multiResourceSyncStart( true );
1143 while ( startLocal < mSpecificResources.count()/2 ) { 1147 while ( startLocal < mSpecificResources.count()/2 ) {
1148 if ( startLocal+1 >= mSpecificResources.count()/2 )
1149 emit multiResourceSyncStart( false );
1144 mPisyncFinished = false; 1150 mPisyncFinished = false;
1145 mCurrentResourceLocal = mSpecificResources[ startLocal ]; 1151 mCurrentResourceLocal = mSpecificResources[ startLocal ];
1146 mCurrentResourceRemote = mSpecificResources[ startRemote ]; 1152 mCurrentResourceRemote = mSpecificResources[ startRemote ];
1147 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1153 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1148 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1154 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1149 commandSocket->readFile( syncFileName() ); 1155 commandSocket->readFile( syncFileName() );
1150 while ( !mPisyncFinished ) { 1156 while ( !mPisyncFinished ) {
1151 //qDebug("waiting "); 1157 //qDebug("waiting ");
1152 qApp->processEvents(); 1158 qApp->processEvents();
1153 } 1159 }
1154 ++startLocal; 1160 ++startLocal;
1155 } 1161 }
1156 } else { 1162 } else {
1157 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1163 KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1158 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1164 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1159 commandSocket->readFile( syncFileName() ); 1165 commandSocket->readFile( syncFileName() );
1160 } 1166 }
1161} 1167}
1162 1168
1163void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1169void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1164{ 1170{
1165 //enum { success, errorW, errorR, quiet }; 1171 //enum { success, errorW, errorR, quiet };
1166 1172
1167 1173
1168 1174
1169 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1175 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1170 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1176 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1171 if ( state == KCommandSocket::errorPW ) 1177 if ( state == KCommandSocket::errorPW )
1172 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1178 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1173 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1179 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1174 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1180 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1175 else if ( state == KCommandSocket::errorCA ) 1181 else if ( state == KCommandSocket::errorCA )
1176 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1182 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1177 else if ( state == KCommandSocket::errorFI ) 1183 else if ( state == KCommandSocket::errorFI )
1178 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1184 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1179 else if ( state == KCommandSocket::errorED ) 1185 else if ( state == KCommandSocket::errorED )
1180 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1186 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1181 else if ( state == KCommandSocket::errorUN ) 1187 else if ( state == KCommandSocket::errorUN )
1182 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1188 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1183 delete s; 1189 delete s;
1184 if ( state == KCommandSocket::errorR ) { 1190 if ( state == KCommandSocket::errorR ) {
1185 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1191 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1186 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1192 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1187 commandSocket->sendStop(); 1193 commandSocket->sendStop();
1188 } 1194 }
1189 mPisyncFinished = true; 1195 mPisyncFinished = true;
1190 return; 1196 return;
1191 1197
1192 } else if ( state == KCommandSocket::errorW ) { 1198 } else if ( state == KCommandSocket::errorW ) {
1193 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1199 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1194 mPisyncFinished = true; 1200 mPisyncFinished = true;
1195 1201
1196 } else if ( state == KCommandSocket::successR ) { 1202 } else if ( state == KCommandSocket::successR ) {
1197 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1203 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1198 1204
1199 } else if ( state == KCommandSocket::successW ) { 1205 } else if ( state == KCommandSocket::successW ) {
1200 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1206 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1201 mPisyncFinished = true; 1207 mPisyncFinished = true;
1202 } else if ( state == KCommandSocket::quiet ){ 1208 } else if ( state == KCommandSocket::quiet ){
1203 qDebug("KSS: quiet "); 1209 qDebug("KSS: quiet ");
1204 mPisyncFinished = true; 1210 mPisyncFinished = true;
1205 } else { 1211 } else {
1206 qDebug("KSS: Error: unknown state: %d ", state); 1212 qDebug("KSS: Error: unknown state: %d ", state);
1207 mPisyncFinished = true; 1213 mPisyncFinished = true;
1208 } 1214 }
1209 1215
1210 delete s; 1216 delete s;
1211} 1217}
1212 1218
1213void KSyncManager::readFileFromSocket() 1219void KSyncManager::readFileFromSocket()
1214{ 1220{
1215 QString fileName = syncFileName(); 1221 QString fileName = syncFileName();
1216 bool syncOK = true; 1222 bool syncOK = true;
1217 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1223 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1218 if ( ! syncWithFile( fileName , true ) ) { 1224 if ( ! syncWithFile( fileName , true ) ) {
1219 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1225 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1220 syncOK = false; 1226 syncOK = false;
1221 } 1227 }
1222 KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1228 KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote,mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1223 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1229 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1224 if ( mWriteBackFile && syncOK ) { 1230 if ( mWriteBackFile && syncOK ) {
1225 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); 1231 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1226 commandSocket->writeFile( fileName ); 1232 commandSocket->writeFile( fileName );
1227 } 1233 }
1228 else { 1234 else {
1229 commandSocket->sendStop(); 1235 commandSocket->sendStop();
1230 if ( syncOK ) 1236 if ( syncOK )
1231 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1237 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1232 mPisyncFinished = true; 1238 mPisyncFinished = true;
1233 } 1239 }
1234} 1240}
1235 1241
1236KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1242KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1237{ 1243{
1238 mPassWord = pw; 1244 mPassWord = pw;
1239 mSocket = 0; 1245 mSocket = 0;
1240 mSyncActionDialog = 0; 1246 mSyncActionDialog = 0;
1241 blockRC = false; 1247 blockRC = false;
1242 mErrorMessage = 0; 1248 mErrorMessage = 0;
1243} 1249}
1244 1250
1245void KServerSocket::newConnection ( int socket ) 1251void KServerSocket::newConnection ( int socket )
1246{ 1252{
1247 // qDebug("KServerSocket:New connection %d ", socket); 1253 // qDebug("KServerSocket:New connection %d ", socket);
1248 if ( mSocket ) { 1254 if ( mSocket ) {
1249 qDebug("KSS::newConnection Socket deleted! "); 1255 qDebug("KSS::newConnection Socket deleted! ");
1250 delete mSocket; 1256 delete mSocket;
1251 mSocket = 0; 1257 mSocket = 0;
1252 } 1258 }
1253 mSocket = new QSocket( this ); 1259 mSocket = new QSocket( this );
1254 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1260 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1255 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1261 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1256 mSocket->setSocket( socket ); 1262 mSocket->setSocket( socket );
1257} 1263}
1258 1264
1259void KServerSocket::discardClient() 1265void KServerSocket::discardClient()
1260{ 1266{
1261 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1267 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1262} 1268}
1263void KServerSocket::deleteSocket() 1269void KServerSocket::deleteSocket()
1264{ 1270{
1265 qDebug("KSS::deleteSocket"); 1271 qDebug("KSS::deleteSocket");
1266 if ( mSocket ) { 1272 if ( mSocket ) {
1267 delete mSocket; 1273 delete mSocket;
1268 mSocket = 0; 1274 mSocket = 0;
1269 } 1275 }
1270 if ( mErrorMessage ) 1276 if ( mErrorMessage )
1271 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1277 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1272} 1278}
1273void KServerSocket::readClient() 1279void KServerSocket::readClient()
1274{ 1280{
1275 if ( blockRC ) 1281 if ( blockRC )
1276 return; 1282 return;
1277 if ( mSocket == 0 ) { 1283 if ( mSocket == 0 ) {
1278 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1284 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1279 return; 1285 return;
1280 } 1286 }
1281 if ( mErrorMessage ) { 1287 if ( mErrorMessage ) {
1282 mErrorMessage = 999; 1288 mErrorMessage = 999;
1283 error_connect("ERROR_ED\r\n\r\n"); 1289 error_connect("ERROR_ED\r\n\r\n");
1284 return; 1290 return;
1285 } 1291 }
1292 mResource = "";
1286 mErrorMessage = 0; 1293 mErrorMessage = 0;
1287 //qDebug("KServerSocket::readClient()"); 1294 //qDebug("KServerSocket::readClient()");
1288 if ( mSocket->canReadLine() ) { 1295 if ( mSocket->canReadLine() ) {
1289 QString line = mSocket->readLine(); 1296 QString line = mSocket->readLine();
1290 //qDebug("KServerSocket readline: %s ", line.latin1()); 1297 //qDebug("KServerSocket readline: %s ", line.latin1());
1291 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1298 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1292 if ( tokens[0] == "GET" ) { 1299 if ( tokens[0] == "GET" ) {
1293 if ( tokens[1] == mPassWord ) { 1300 if ( tokens[1] == mPassWord ) {
1294 //emit sendFile( mSocket ); 1301 //emit sendFile( mSocket );
1295 bool ok = false; 1302 bool ok = false;
1296 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1303 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1297 if ( ok ) { 1304 if ( ok ) {
1298 KSyncManager::mRequestedSyncEvent = dt; 1305 KSyncManager::mRequestedSyncEvent = dt;
1299 } 1306 }
1300 else 1307 else
1301 KSyncManager::mRequestedSyncEvent = QDateTime(); 1308 KSyncManager::mRequestedSyncEvent = QDateTime();
1309 mResource =tokens[3];
1302 send_file(); 1310 send_file();
1303 } 1311 }
1304 else { 1312 else {
1305 mErrorMessage = 1; 1313 mErrorMessage = 1;
1306 error_connect("ERROR_PW\r\n\r\n"); 1314 error_connect("ERROR_PW\r\n\r\n");
1307 } 1315 }
1308 } 1316 }
1309 if ( tokens[0] == "PUT" ) { 1317 if ( tokens[0] == "PUT" ) {
1310 if ( tokens[1] == mPassWord ) { 1318 if ( tokens[1] == mPassWord ) {
1311 //emit getFile( mSocket ); 1319 //emit getFile( mSocket );
1312 blockRC = true; 1320 blockRC = true;
1321 mResource =tokens[2];
1313 get_file(); 1322 get_file();
1314 } 1323 }
1315 else { 1324 else {
1316 mErrorMessage = 2; 1325 mErrorMessage = 2;
1317 error_connect("ERROR_PW\r\n\r\n"); 1326 error_connect("ERROR_PW\r\n\r\n");
1318 end_connect(); 1327 end_connect();
1319 } 1328 }
1320 } 1329 }
1321 if ( tokens[0] == "STOP" ) { 1330 if ( tokens[0] == "STOP" ) {
1322 //emit endConnect(); 1331 //emit endConnect();
1323 end_connect(); 1332 end_connect();
1324 } 1333 }
1325 } 1334 }
1326} 1335}
1327void KServerSocket::displayErrorMessage() 1336void KServerSocket::displayErrorMessage()
1328{ 1337{
1329 if ( mErrorMessage == 1 ) { 1338 if ( mErrorMessage == 1 ) {
1330 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error")); 1339 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1331 mErrorMessage = 0; 1340 mErrorMessage = 0;
1332 } 1341 }
1333 else if ( mErrorMessage == 2 ) { 1342 else if ( mErrorMessage == 2 ) {
1334 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error")); 1343 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1335 mErrorMessage = 0; 1344 mErrorMessage = 0;
1336 } 1345 }
1337} 1346}
1338void KServerSocket::error_connect( QString errmess ) 1347void KServerSocket::error_connect( QString errmess )
1339{ 1348{
1340 QTextStream os( mSocket ); 1349 QTextStream os( mSocket );
1341 os.setEncoding( QTextStream::Latin1 ); 1350 os.setEncoding( QTextStream::Latin1 );
1342 os << errmess ; 1351 os << errmess ;
1343 mSocket->close(); 1352 mSocket->close();
1344 if ( mSocket->state() == QSocket::Idle ) { 1353 if ( mSocket->state() == QSocket::Idle ) {
1345 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1354 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1346 } 1355 }
1347} 1356}
1348void KServerSocket::end_connect() 1357void KServerSocket::end_connect()
1349{ 1358{
1350 delete mSyncActionDialog; 1359 delete mSyncActionDialog;
1351 mSyncActionDialog = 0; 1360 mSyncActionDialog = 0;
1352} 1361}
1353void KServerSocket::send_file() 1362void KServerSocket::send_file()
1354{ 1363{
1355 //qDebug("MainWindow::sendFile(QSocket* s) "); 1364 //qDebug("MainWindow::sendFile(QSocket* s) ");
1356 if ( mSyncActionDialog ) 1365 if ( mSyncActionDialog )
1357 delete mSyncActionDialog; 1366 delete mSyncActionDialog;
1358 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1367 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1359 mSyncActionDialog->setCaption(i18n("Received sync request")); 1368 mSyncActionDialog->setCaption(i18n("Received sync request"));
1360 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1369 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1361 label->setAlignment ( Qt::AlignHCenter ); 1370 label->setAlignment ( Qt::AlignHCenter );
1362 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1371 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1363 lay->addWidget( label); 1372 lay->addWidget( label);
1364 lay->setMargin(7); 1373 lay->setMargin(7);
1365 lay->setSpacing(7); 1374 lay->setSpacing(7);
1366 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1375 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1367 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1376 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1368 //secs = 333; 1377 //secs = 333;
1369 if ( secs < 0 ) 1378 if ( secs < 0 )
1370 secs = secs * (-1); 1379 secs = secs * (-1);
1371 if ( secs > 30 ) 1380 if ( secs > 30 )
1372 //if ( true ) 1381 //if ( true )
1373 { 1382 {
1374 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1383 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1375 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1384 QLabel* label = new QLabel( warning, mSyncActionDialog );
1376 label->setAlignment ( Qt::AlignHCenter ); 1385 label->setAlignment ( Qt::AlignHCenter );
1377 lay->addWidget( label); 1386 lay->addWidget( label);
1378 if ( secs > 180 ) 1387 if ( secs > 180 )
1379 { 1388 {
1380 if ( secs > 300 ) { 1389 if ( secs > 300 ) {
1381 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!"))) { 1390 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!"))) {
1382 qDebug("KSS::Sync cancelled ,cs"); 1391 qDebug("KSS::Sync cancelled ,cs");
1383 mErrorMessage = 0; 1392 mErrorMessage = 0;
1384 end_connect(); 1393 end_connect();
1385 error_connect("ERROR_CA\r\n\r\n"); 1394 error_connect("ERROR_CA\r\n\r\n");
1386 return ; 1395 return ;
1387 } 1396 }
1388 } 1397 }
1389 QFont f = label->font(); 1398 QFont f = label->font();
1390 f.setPointSize ( f.pointSize() *2 ); 1399 f.setPointSize ( f.pointSize() *2 );
1391 f. setBold (true ); 1400 f. setBold (true );
1392 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1401 QLabel* label = new QLabel( warning, mSyncActionDialog );
1393 label->setFont( f ); 1402 label->setFont( f );
1394 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1403 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1395 label->setText( warning ); 1404 label->setText( warning );
1396 label->setAlignment ( Qt::AlignHCenter ); 1405 label->setAlignment ( Qt::AlignHCenter );
1397 lay->addWidget( label); 1406 lay->addWidget( label);
1398 mSyncActionDialog->setFixedSize( 230, 300); 1407 mSyncActionDialog->setFixedSize( 230, 300);
1399 } else { 1408 } else {
1400 mSyncActionDialog->setFixedSize( 230, 200); 1409 mSyncActionDialog->setFixedSize( 230, 200);
1401 } 1410 }
1402 } else { 1411 } else {
1403 mSyncActionDialog->setFixedSize( 230, 120); 1412 mSyncActionDialog->setFixedSize( 230, 120);
1404 } 1413 }
1405 } else 1414 } else
1406 mSyncActionDialog->setFixedSize( 230, 120); 1415 mSyncActionDialog->setFixedSize( 230, 120);
1407 mSyncActionDialog->show(); 1416 mSyncActionDialog->show();
1408 mSyncActionDialog->raise(); 1417 mSyncActionDialog->raise();
1418 emit request_file(mResource);
1409 emit request_file(); 1419 emit request_file();
1410 qApp->processEvents(); 1420 qApp->processEvents();
1411 QString fileName = mFileName; 1421 QString fileName = mFileName;
1412 QFile file( fileName ); 1422 QFile file( fileName );
1413 if (!file.open( IO_ReadOnly ) ) { 1423 if (!file.open( IO_ReadOnly ) ) {
1414 mErrorMessage = 0; 1424 mErrorMessage = 0;
1415 end_connect(); 1425 end_connect();
1416 error_connect("ERROR_FI\r\n\r\n"); 1426 error_connect("ERROR_FI\r\n\r\n");
1417 return ; 1427 return ;
1418 } 1428 }
1419 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1429 mSyncActionDialog->setCaption( i18n("Sending file...") );
1420 QTextStream ts( &file ); 1430 QTextStream ts( &file );
1421 ts.setEncoding( QTextStream::Latin1 ); 1431 ts.setEncoding( QTextStream::Latin1 );
1422 1432
1423 QTextStream os( mSocket ); 1433 QTextStream os( mSocket );
1424 os.setEncoding( QTextStream::Latin1 ); 1434 os.setEncoding( QTextStream::Latin1 );
1425 while ( ! ts.atEnd() ) { 1435 while ( ! ts.atEnd() ) {
1426 os << ts.readLine() << "\r\n"; 1436 os << ts.readLine() << "\r\n";
1427 } 1437 }
1428 os << "\r\n"; 1438 os << "\r\n";
1429 //os << ts.read(); 1439 //os << ts.read();
1430 file.close(); 1440 file.close();
1431 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1441 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1432 mSocket->close(); 1442 mSocket->close();
1433 if ( mSocket->state() == QSocket::Idle ) 1443 if ( mSocket->state() == QSocket::Idle )
1434 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1444 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1435} 1445}
1436void KServerSocket::get_file() 1446void KServerSocket::get_file()
1437{ 1447{
1438 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1448 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1439 1449
1440 piTime.start(); 1450 piTime.start();
1441 piFileString = ""; 1451 piFileString = "";
1442 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1452 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1443} 1453}
1444 1454
1445 1455
1446void KServerSocket::readBackFileFromSocket() 1456void KServerSocket::readBackFileFromSocket()
1447{ 1457{
1448 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1458 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1449 while ( mSocket->canReadLine () ) { 1459 while ( mSocket->canReadLine () ) {
1450 piTime.restart(); 1460 piTime.restart();
1451 QString line = mSocket->readLine (); 1461 QString line = mSocket->readLine ();
1452 piFileString += line; 1462 piFileString += line;
1453 //qDebug("readline: %s ", line.latin1()); 1463 //qDebug("readline: %s ", line.latin1());
1454 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1464 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1455 1465
1456 } 1466 }
1457 if ( piTime.elapsed () < 3000 ) { 1467 if ( piTime.elapsed () < 3000 ) {
1458 // wait for more 1468 // wait for more
1459 //qDebug("waitformore "); 1469 //qDebug("waitformore ");
1460 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1470 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1461 return; 1471 return;
1462 } 1472 }
1463 QString fileName = mFileName; 1473 QString fileName = mFileName;
1464 QFile file ( fileName ); 1474 QFile file ( fileName );
1465 if (!file.open( IO_WriteOnly ) ) { 1475 if (!file.open( IO_WriteOnly ) ) {
1466 delete mSyncActionDialog; 1476 delete mSyncActionDialog;
1467 mSyncActionDialog = 0; 1477 mSyncActionDialog = 0;
1468 qDebug("KSS:Error open read back file "); 1478 qDebug("KSS:Error open read back file ");
1469 piFileString = ""; 1479 piFileString = "";
1470 emit file_received( false ); 1480 emit file_received( false, mResource);
1481 emit file_received( false);
1471 blockRC = false; 1482 blockRC = false;
1472 return ; 1483 return ;
1473 1484
1474 } 1485 }
1475 1486
1476 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1487 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1477 QTextStream ts ( &file ); 1488 QTextStream ts ( &file );
1478 ts.setEncoding( QTextStream::Latin1 ); 1489 ts.setEncoding( QTextStream::Latin1 );
1479 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1490 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1480 ts << piFileString; 1491 ts << piFileString;
1481 mSocket->close(); 1492 mSocket->close();
1482 if ( mSocket->state() == QSocket::Idle ) 1493 if ( mSocket->state() == QSocket::Idle )
1483 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1494 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1484 file.close(); 1495 file.close();
1485 piFileString = ""; 1496 piFileString = "";
1486 emit file_received( true ); 1497 emit file_received( true, mResource );
1498 emit file_received( true);
1487 delete mSyncActionDialog; 1499 delete mSyncActionDialog;
1488 mSyncActionDialog = 0; 1500 mSyncActionDialog = 0;
1489 blockRC = false; 1501 blockRC = false;
1490 1502
1491} 1503}
1492 1504
1493KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1505KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1494{ 1506{
1495 mRemoteResource = remres; 1507 mRemoteResource = remres;
1496 if ( mRemoteResource.isEmpty() ) 1508 if ( mRemoteResource.isEmpty() )
1497 mRemoteResource = "ALL"; 1509 mRemoteResource = "ALL";
1498 mPassWord = password; 1510 mPassWord = password;
1499 mSocket = 0; 1511 mSocket = 0;
1500 mFirst = false; 1512 mFirst = false;
1501 mFirstLine = true; 1513 mFirstLine = true;
1502 mPort = port; 1514 mPort = port;
1503 mHost = host; 1515 mHost = host;
1504 tlw = cap; 1516 tlw = cap;
1505 mRetVal = quiet; 1517 mRetVal = quiet;
1506 mTimerSocket = new QTimer ( this ); 1518 mTimerSocket = new QTimer ( this );
1507 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) ); 1519 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1508 mConnectProgress.setCaption( i18n("Pi-Sync") ); 1520 mConnectProgress.setCaption( i18n("Pi-Sync") );
1509 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) ); 1521 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1510 mConnectCount = -1; 1522 mConnectCount = -1;
1511} 1523}
1512void KCommandSocket::sendFileRequest() 1524void KCommandSocket::sendFileRequest()
1513{ 1525{
1514 if ( tlw ) 1526 if ( tlw )
1515 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1527 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1516 mConnectProgress.hide(); 1528 mConnectProgress.hide();
1517 mConnectCount = 300;mConnectMax = 300; 1529 mConnectCount = 300;mConnectMax = 300;
1518 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") ); 1530 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1519 mTimerSocket->start( 100, true ); 1531 mTimerSocket->start( 100, true );
1520 QTextStream os( mSocket ); 1532 QTextStream os( mSocket );
1521 os.setEncoding( QTextStream::Latin1 ); 1533 os.setEncoding( QTextStream::Latin1 );
1522 1534
1523 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1535 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1524 os << "GET " << mPassWord << curDt << mRemoteResource << "\r\n\r\n"; 1536 os << "GET " << mPassWord << curDt << mRemoteResource << "\r\n\r\n";
1525} 1537}
1526 1538
1527void KCommandSocket::readFile( QString fn ) 1539void KCommandSocket::readFile( QString fn )
1528{ 1540{
1529 if ( !mSocket ) { 1541 if ( !mSocket ) {
1530 mSocket = new QSocket( this ); 1542 mSocket = new QSocket( this );
1531 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1543 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1532 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1544 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1533 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1545 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1534 } 1546 }
1535 mFileString = ""; 1547 mFileString = "";
1536 mFileName = fn; 1548 mFileName = fn;
1537 mFirst = true; 1549 mFirst = true;
1538 if ( tlw ) 1550 if ( tlw )
1539 tlw->setCaption( i18n("Trying to connect to remote...") ); 1551 tlw->setCaption( i18n("Trying to connect to remote...") );
1540 mConnectCount = 30;mConnectMax = 30; 1552 mConnectCount = 30;mConnectMax = 30;
1541 mTimerSocket->start( 1000, true ); 1553 mTimerSocket->start( 1000, true );
1542 mSocket->connectToHost( mHost, mPort ); 1554 mSocket->connectToHost( mHost, mPort );
1543 qDebug("KSS: Waiting for connection"); 1555 qDebug("KSS: Waiting for connection");
1544} 1556}
1545void KCommandSocket::updateConnectDialog() 1557void KCommandSocket::updateConnectDialog()
1546{ 1558{
1547 1559
1548 if ( mConnectCount == mConnectMax ) { 1560 if ( mConnectCount == mConnectMax ) {
1549 //qDebug("MAXX %d", mConnectMax); 1561 //qDebug("MAXX %d", mConnectMax);
1550 mConnectProgress.setTotalSteps ( 30 ); 1562 mConnectProgress.setTotalSteps ( 30 );
1551 mConnectProgress.show(); 1563 mConnectProgress.show();
1552 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") ); 1564 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1553 } 1565 }
1554 //qDebug("updateConnectDialog() %d", mConnectCount); 1566 //qDebug("updateConnectDialog() %d", mConnectCount);
1555 mConnectProgress.raise(); 1567 mConnectProgress.raise();
1556 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 ); 1568 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1557 --mConnectCount; 1569 --mConnectCount;
1558 if ( mConnectCount > 0 ) 1570 if ( mConnectCount > 0 )
1559 mTimerSocket->start( 1000, true ); 1571 mTimerSocket->start( 1000, true );
1560 else 1572 else
1561 deleteSocket(); 1573 deleteSocket();
1562 1574
1563} 1575}
1564void KCommandSocket::writeFile( QString fileName ) 1576void KCommandSocket::writeFile( QString fileName )
1565{ 1577{
1566 if ( !mSocket ) { 1578 if ( !mSocket ) {
1567 mSocket = new QSocket( this ); 1579 mSocket = new QSocket( this );
1568 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1580 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1569 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1581 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1570 } 1582 }
1571 mFileName = fileName ; 1583 mFileName = fileName ;
1572 mConnectCount = 30;mConnectMax = 30; 1584 mConnectCount = 30;mConnectMax = 30;
1573 mTimerSocket->start( 1000, true ); 1585 mTimerSocket->start( 1000, true );
1574 mSocket->connectToHost( mHost, mPort ); 1586 mSocket->connectToHost( mHost, mPort );
1575} 1587}
1576void KCommandSocket::writeFileToSocket() 1588void KCommandSocket::writeFileToSocket()
1577{ 1589{
1578 mTimerSocket->stop(); 1590 mTimerSocket->stop();
1579 QFile file2( mFileName ); 1591 QFile file2( mFileName );
1580 if (!file2.open( IO_ReadOnly ) ) { 1592 if (!file2.open( IO_ReadOnly ) ) {
1581 mConnectProgress.hide(); 1593 mConnectProgress.hide();
1582 mConnectCount = -1; 1594 mConnectCount = -1;
1583 mRetVal= errorW; 1595 mRetVal= errorW;
1584 mSocket->close(); 1596 mSocket->close();
1585 if ( mSocket->state() == QSocket::Idle ) 1597 if ( mSocket->state() == QSocket::Idle )
1586 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1598 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1587 return ; 1599 return ;
1588 } 1600 }
1589 mConnectProgress.setTotalSteps ( file2.size() ); 1601 mConnectProgress.setTotalSteps ( file2.size() );
1590 mConnectProgress.show(); 1602 mConnectProgress.show();
1591 int count = 0; 1603 int count = 0;
1592 mConnectProgress.setLabelText( i18n("Sending back synced file...") ); 1604 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1593 mConnectProgress.setProgress( count ); 1605 mConnectProgress.setProgress( count );
1594 mConnectProgress.blockSignals( true ); 1606 mConnectProgress.blockSignals( true );
1595 QTextStream ts2( &file2 ); 1607 QTextStream ts2( &file2 );
1596 ts2.setEncoding( QTextStream::Latin1 ); 1608 ts2.setEncoding( QTextStream::Latin1 );
1597 QTextStream os2( mSocket ); 1609 QTextStream os2( mSocket );
1598 os2.setEncoding( QTextStream::Latin1 ); 1610 os2.setEncoding( QTextStream::Latin1 );
1599 os2 << "PUT " << mPassWord << "\r\n\r\n";; 1611 os2 << "PUT " << mPassWord << mRemoteResource << "\r\n\r\n";;
1600 int byteCount = 0; 1612 int byteCount = 0;
1601 int byteMax = file2.size()/53; 1613 int byteMax = file2.size()/53;
1602 while ( ! ts2.atEnd() ) { 1614 while ( ! ts2.atEnd() ) {
1603 qApp->processEvents(); 1615 qApp->processEvents();
1604 if ( byteCount > byteMax ) { 1616 if ( byteCount > byteMax ) {
1605 byteCount = 0; 1617 byteCount = 0;
1606 mConnectProgress.setProgress( count ); 1618 mConnectProgress.setProgress( count );
1607 } 1619 }
1608 QString temp = ts2.readLine(); 1620 QString temp = ts2.readLine();
1609 count += temp.length(); 1621 count += temp.length();
1610 byteCount += temp.length(); 1622 byteCount += temp.length();
1611 os2 << temp << "\r\n"; 1623 os2 << temp << "\r\n";
1612 } 1624 }
1613 file2.close(); 1625 file2.close();
1614 mConnectProgress.hide(); 1626 mConnectProgress.hide();
1615 mConnectCount = -1; 1627 mConnectCount = -1;
1616 os2 << "\r\n"; 1628 os2 << "\r\n";
1617 mRetVal= successW; 1629 mRetVal= successW;
1618 mSocket->close(); 1630 mSocket->close();
1619 if ( mSocket->state() == QSocket::Idle ) 1631 if ( mSocket->state() == QSocket::Idle )
1620 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1632 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1621 mConnectProgress.blockSignals( false ); 1633 mConnectProgress.blockSignals( false );
1622} 1634}
1623void KCommandSocket::sendStop() 1635void KCommandSocket::sendStop()
1624{ 1636{
1625 if ( !mSocket ) { 1637 if ( !mSocket ) {
1626 mSocket = new QSocket( this ); 1638 mSocket = new QSocket( this );
1627 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1639 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1628 } 1640 }
1629 mSocket->connectToHost( mHost, mPort ); 1641 mSocket->connectToHost( mHost, mPort );
1630 QTextStream os2( mSocket ); 1642 QTextStream os2( mSocket );
1631 os2.setEncoding( QTextStream::Latin1 ); 1643 os2.setEncoding( QTextStream::Latin1 );
1632 os2 << "STOP\r\n\r\n"; 1644 os2 << "STOP\r\n\r\n";
1633 mSocket->close(); 1645 mSocket->close();
1634 if ( mSocket->state() == QSocket::Idle ) 1646 if ( mSocket->state() == QSocket::Idle )
1635 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1647 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1636} 1648}
1637 1649
1638void KCommandSocket::startReadFileFromSocket() 1650void KCommandSocket::startReadFileFromSocket()
1639{ 1651{
1640 if ( ! mFirst ) 1652 if ( ! mFirst )
1641 return; 1653 return;
1642 mConnectProgress.setLabelText( i18n("Receiving file from remote...") ); 1654 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1643 mFirst = false; 1655 mFirst = false;
1644 mFileString = ""; 1656 mFileString = "";
1645 mTime.start(); 1657 mTime.start();
1646 mFirstLine = true; 1658 mFirstLine = true;
1647 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1659 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1648 1660
1649} 1661}
1650void KCommandSocket::readFileFromSocket() 1662void KCommandSocket::readFileFromSocket()
1651{ 1663{
1652 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1664 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1653 while ( mSocket->canReadLine () ) { 1665 while ( mSocket->canReadLine () ) {
1654 mTime.restart(); 1666 mTime.restart();
1655 QString line = mSocket->readLine (); 1667 QString line = mSocket->readLine ();
1656 if ( mFirstLine ) { 1668 if ( mFirstLine ) {
1657 mFirstLine = false; 1669 mFirstLine = false;
1658 if ( line.left( 6 ) == "ERROR_" ) { 1670 if ( line.left( 6 ) == "ERROR_" ) {
1659 mTimerSocket->stop(); 1671 mTimerSocket->stop();
1660 mConnectCount = -1; 1672 mConnectCount = -1;
1661 if ( line.left( 8 ) == "ERROR_PW" ) { 1673 if ( line.left( 8 ) == "ERROR_PW" ) {
1662 mRetVal = errorPW; 1674 mRetVal = errorPW;
1663 deleteSocket(); 1675 deleteSocket();
1664 return ; 1676 return ;
1665 } 1677 }
1666 if ( line.left( 8 ) == "ERROR_CA" ) { 1678 if ( line.left( 8 ) == "ERROR_CA" ) {
1667 mRetVal = errorCA; 1679 mRetVal = errorCA;
1668 deleteSocket(); 1680 deleteSocket();
1669 return ; 1681 return ;
1670 } 1682 }
1671 if ( line.left( 8 ) == "ERROR_FI" ) { 1683 if ( line.left( 8 ) == "ERROR_FI" ) {
1672 mRetVal = errorFI; 1684 mRetVal = errorFI;
1673 deleteSocket(); 1685 deleteSocket();
1674 return ; 1686 return ;
1675 } 1687 }
1676 if ( line.left( 8 ) == "ERROR_ED" ) { 1688 if ( line.left( 8 ) == "ERROR_ED" ) {
1677 mRetVal = errorED; 1689 mRetVal = errorED;
1678 deleteSocket(); 1690 deleteSocket();
1679 return ; 1691 return ;
1680 } 1692 }
1681 mRetVal = errorUN; 1693 mRetVal = errorUN;
1682 deleteSocket(); 1694 deleteSocket();
1683 return ; 1695 return ;
1684 } 1696 }
1685 } 1697 }
1686 mFileString += line; 1698 mFileString += line;
1687 //qDebug("readline: %s ", line.latin1()); 1699 //qDebug("readline: %s ", line.latin1());
1688 } 1700 }
1689 if ( mTime.elapsed () < 3000 ) { 1701 if ( mTime.elapsed () < 3000 ) {
1690 // wait for more 1702 // wait for more
1691 //qDebug("waitformore "); 1703 //qDebug("waitformore ");
1692 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1704 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1693 return; 1705 return;
1694 } 1706 }
1695 mTimerSocket->stop(); 1707 mTimerSocket->stop();
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index f4654ce..53c611d 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -1,241 +1,247 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20 $Id$ 20 $Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qsocket.h> 27#include <qsocket.h>
28#include <qdatetime.h> 28#include <qdatetime.h>
29#include <qserversocket.h> 29#include <qserversocket.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qprogressdialog.h> 32#include <qprogressdialog.h>
33#include <kdialog.h> 33#include <kdialog.h>
34 34
35class QPopupMenu; 35class QPopupMenu;
36class KSyncProfile; 36class KSyncProfile;
37class KPimPrefs; 37class KPimPrefs;
38class QWidget; 38class QWidget;
39class KSyncManager; 39class KSyncManager;
40class KSyncInterface; 40class KSyncInterface;
41class QProgressBar; 41class QProgressBar;
42 42
43 43
44class KServerSocket : public QServerSocket 44class KServerSocket : public QServerSocket
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47 47
48 public: 48 public:
49 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); 49 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
50 50
51 void newConnection ( int socket ) ; 51 void newConnection ( int socket ) ;
52 void setFileName( QString fn ) {mFileName = fn;}; 52 void setFileName( QString fn ) {mFileName = fn;};
53 signals: 53 signals:
54 void file_received( bool ); 54 void file_received( bool );
55 void request_file(); 55 void request_file();
56 void file_received( bool, const QString &);
57 void request_file(const QString &);
56 void saveFile(); 58 void saveFile();
57 void endConnect(); 59 void endConnect();
58 private slots: 60 private slots:
59 void discardClient(); 61 void discardClient();
60 void deleteSocket(); 62 void deleteSocket();
61 void readClient(); 63 void readClient();
62 void displayErrorMessage(); 64 void displayErrorMessage();
63 void readBackFileFromSocket(); 65 void readBackFileFromSocket();
64 private : 66 private :
67 QString mResource;
65 int mErrorMessage; 68 int mErrorMessage;
66 bool blockRC; 69 bool blockRC;
67 void send_file(); 70 void send_file();
68 void get_file(); 71 void get_file();
69 void end_connect(); 72 void end_connect();
70 void error_connect( QString ); 73 void error_connect( QString );
71 QDialog* mSyncActionDialog; 74 QDialog* mSyncActionDialog;
72 QSocket* mSocket; 75 QSocket* mSocket;
73 QString mPassWord; 76 QString mPassWord;
74 QString mFileName; 77 QString mFileName;
75 QTime piTime; 78 QTime piTime;
76 QString piFileString; 79 QString piFileString;
77}; 80};
78 81
79class KCommandSocket : public QObject 82class KCommandSocket : public QObject
80{ 83{
81 Q_OBJECT 84 Q_OBJECT
82 public: 85 public:
83 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet }; 86 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet };
84 KCommandSocket (QString remoteResource, QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); 87 KCommandSocket (QString remoteResource, QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 );
85 void readFile( QString ); 88 void readFile( QString );
86 void writeFile( QString ); 89 void writeFile( QString );
87 void sendStop(); 90 void sendStop();
88 91
89 private slots : 92 private slots :
90 void sendFileRequest(); 93 void sendFileRequest();
91 void updateConnectDialog(); 94 void updateConnectDialog();
92 95
93 signals: 96 signals:
94 void commandFinished( KCommandSocket*, int ); 97 void commandFinished( KCommandSocket*, int );
95 private slots: 98 private slots:
96 void startReadFileFromSocket(); 99 void startReadFileFromSocket();
97 void readFileFromSocket(); 100 void readFileFromSocket();
98 void deleteSocket(); 101 void deleteSocket();
99 void writeFileToSocket(); 102 void writeFileToSocket();
100 private : 103 private :
101 QString mRemoteResource; 104 QString mRemoteResource;
102 int mConnectCount; 105 int mConnectCount;
103 int mConnectMax; 106 int mConnectMax;
104 KProgressDialog mConnectProgress; 107 KProgressDialog mConnectProgress;
105 QWidget* tlw; 108 QWidget* tlw;
106 QSocket* mSocket; 109 QSocket* mSocket;
107 QString mPassWord; 110 QString mPassWord;
108 Q_UINT16 mPort; 111 Q_UINT16 mPort;
109 QString mHost; 112 QString mHost;
110 QString mFileName; 113 QString mFileName;
111 QTimer* mTimerSocket; 114 QTimer* mTimerSocket;
112 int mRetVal; 115 int mRetVal;
113 QTime mTime; 116 QTime mTime;
114 QString mFileString; 117 QString mFileString;
115 bool mFirst; 118 bool mFirst;
116 bool mFirstLine; 119 bool mFirstLine;
117}; 120};
118 121
119 122
120class KSyncManager : public QObject 123class KSyncManager : public QObject
121{ 124{
122 Q_OBJECT 125 Q_OBJECT
123 126
124 public: 127 public:
125 enum TargetApp { 128 enum TargetApp {
126 KOPI = 0, 129 KOPI = 0,
127 KAPI = 1, 130 KAPI = 1,
128 PWMPI = 2 }; 131 PWMPI = 2 };
129 132
130 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 133 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
131 ~KSyncManager() ; 134 ~KSyncManager() ;
132 135
133 void multiSync( bool askforPrefs ); 136 void multiSync( bool askforPrefs );
134 bool blockSave() { return mBlockSaveFlag; } 137 bool blockSave() { return mBlockSaveFlag; }
135 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 138 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
136 void setDefaultFileName( QString s) ; 139 void setDefaultFileName( QString s) ;
137 QString defaultFileName() { return mDefFileName ;} 140 QString defaultFileName() { return mDefFileName ;}
138 QString syncFileName(); 141 QString syncFileName();
139 void enableQuick( bool ask = true); 142 void enableQuick( bool ask = true);
140 143
141 bool syncWithDesktop () { return mSyncWithDesktop;} 144 bool syncWithDesktop () { return mSyncWithDesktop;}
142 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 145 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
143 QString getCurrentSyncName() { return mCurrentSyncName; } 146 QString getCurrentSyncName() { return mCurrentSyncName; }
144 147
145 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 148 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
146 void hideProgressBar(); 149 void hideProgressBar();
147 bool isProgressBarCanceled(); 150 bool isProgressBarCanceled();
148 151
149 // sync stuff 152 // sync stuff
150 QString mLocalMachineName; 153 QString mLocalMachineName;
151 QStringList mExternSyncProfiles; 154 QStringList mExternSyncProfiles;
152 QStringList mSyncProfileNames; 155 QStringList mSyncProfileNames;
153 bool mAskForPreferences; 156 bool mAskForPreferences;
154 bool mShowSyncSummary; 157 bool mShowSyncSummary;
155 bool mIsKapiFile; 158 bool mIsKapiFile;
156 bool mWriteBackExistingOnly; 159 bool mWriteBackExistingOnly;
157 int mSyncAlgoPrefs; 160 int mSyncAlgoPrefs;
158 bool mWriteBackFile; 161 bool mWriteBackFile;
159 int mWriteBackInFuture; 162 int mWriteBackInFuture;
160 int mWriteBackInPast; 163 int mWriteBackInPast;
161 QString mPhoneDevice; 164 QString mPhoneDevice;
162 QString mPhoneConnection; 165 QString mPhoneConnection;
163 QString mPhoneModel; 166 QString mPhoneModel;
164 QString mPassWordPiSync; 167 QString mPassWordPiSync;
165 QString mActiveSyncPort; 168 QString mActiveSyncPort;
166 QString mActiveSyncIP ; 169 QString mActiveSyncIP ;
167 QString mFilterInCal; 170 QString mFilterInCal;
168 QString mFilterOutCal; 171 QString mFilterOutCal;
169 QString mFilterInAB; 172 QString mFilterInAB;
170 QString mFilterOutAB; 173 QString mFilterOutAB;
171 static QDateTime mRequestedSyncEvent; 174 static QDateTime mRequestedSyncEvent;
172 175
173 signals: 176 signals:
174 void save(); 177 void save();
175 void request_file(); 178 void request_file();
176 void getFile( bool ); 179 void getFile( bool );
180 void getFile( bool, const QString &);
181 void request_file(const QString &);
182 void multiResourceSyncStart( bool );
177 183
178 public slots: 184 public slots:
179 void slotSyncMenu( int ); 185 void slotSyncMenu( int );
180 void slotClearMenu( int action ); 186 void slotClearMenu( int action );
181 void deleteCommandSocket(KCommandSocket*s, int state); 187 void deleteCommandSocket(KCommandSocket*s, int state);
182 void readFileFromSocket(); 188 void readFileFromSocket();
183 void fillSyncMenu(); 189 void fillSyncMenu();
184 190
185 private: 191 private:
186 void syncPi(); 192 void syncPi();
187 KServerSocket * mServerSocket; 193 KServerSocket * mServerSocket;
188 KPimPrefs* mPrefs; 194 KPimPrefs* mPrefs;
189 QString mDefFileName; 195 QString mDefFileName;
190 QString mCurrentSyncDevice; 196 QString mCurrentSyncDevice;
191 QString mCurrentSyncName; 197 QString mCurrentSyncName;
192 void quickSyncLocalFile(); 198 void quickSyncLocalFile();
193 bool syncWithFile( QString fn , bool quick ); 199 bool syncWithFile( QString fn , bool quick );
194 void syncLocalFile(); 200 void syncLocalFile();
195 void syncPhone(); 201 void syncPhone();
196 void syncSharp(); 202 void syncSharp();
197 void syncKDE(); 203 void syncKDE();
198 bool syncExternalApplication(QString); 204 bool syncExternalApplication(QString);
199 int mCurrentSyncProfile ; 205 int mCurrentSyncProfile ;
200 void syncRemote( KSyncProfile* prof, bool ask = true); 206 void syncRemote( KSyncProfile* prof, bool ask = true);
201 bool edit_sync_options(); 207 bool edit_sync_options();
202 bool edit_pisync_options(); 208 bool edit_pisync_options();
203 int ringSync(); 209 int ringSync();
204 QString getPassword( ); 210 QString getPassword( );
205 bool mPisyncFinished; 211 bool mPisyncFinished;
206 QStringList mSpecificResources; 212 QStringList mSpecificResources;
207 QString mCurrentResourceLocal; 213 QString mCurrentResourceLocal;
208 QString mCurrentResourceRemote; 214 QString mCurrentResourceRemote;
209 bool mBlockSaveFlag; 215 bool mBlockSaveFlag;
210 QWidget* mParent; 216 QWidget* mParent;
211 KSyncInterface* mImplementation; 217 KSyncInterface* mImplementation;
212 TargetApp mTargetApp; 218 TargetApp mTargetApp;
213 QPopupMenu* mSyncMenu; 219 QPopupMenu* mSyncMenu;
214 QProgressBar* bar; 220 QProgressBar* bar;
215 bool mSyncWithDesktop; 221 bool mSyncWithDesktop;
216 222
217private slots: 223private slots:
218 void displayErrorPort(); 224 void displayErrorPort();
219 void confSync(); 225 void confSync();
220 226
221 227
222}; 228};
223 229
224 230
225class KSyncInterface 231class KSyncInterface
226{ 232{
227 public : 233 public :
228 virtual void removeSyncInfo( QString syncProfile) = 0; 234 virtual void removeSyncInfo( QString syncProfile) = 0;
229 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource) = 0; 235 virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource) = 0;
230 virtual bool syncExternal(KSyncManager* manager, QString resource) 236 virtual bool syncExternal(KSyncManager* manager, QString resource)
231 { 237 {
232 // empty implementation, because some syncable applications do not 238 // empty implementation, because some syncable applications do not
233 // have an external(sharpdtm) syncmode, like pwmanager. 239 // have an external(sharpdtm) syncmode, like pwmanager.
234 return false; 240 return false;
235 } 241 }
236 242
237 243
238}; 244};
239 245
240 246
241#endif 247#endif