-rw-r--r-- | korganizer/calendarview.cpp | 73 | ||||
-rw-r--r-- | korganizer/calendarview.h | 4 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 14 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 4 | ||||
-rw-r--r-- | libkcal/calendar.h | 1 | ||||
-rw-r--r-- | libkcal/calendarlocal.cpp | 16 | ||||
-rw-r--r-- | libkcal/calendarlocal.h | 1 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.cpp | 24 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.h | 6 |
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 | |||
@@ -305,128 +305,129 @@ class KOBeamPrefs : public QDialog | |||
305 | private: | 305 | private: |
306 | QRadioButton* vcal, *ical, *local, *tz; | 306 | QRadioButton* vcal, *ical, *local, *tz; |
307 | }; | 307 | }; |
308 | class KOCatPrefs : public QDialog | 308 | class 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(); } |
336 | private: | 336 | private: |
337 | QRadioButton* addCatBut; | 337 | QRadioButton* addCatBut; |
338 | }; | 338 | }; |
339 | 339 | ||
340 | 340 | ||
341 | 341 | ||
342 | CalendarView::CalendarView( CalendarResources *calendar, | 342 | CalendarView::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 | ||
355 | CalendarView::CalendarView( Calendar *calendar, | 355 | CalendarView::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 | ||
367 | void CalendarView::init() | 367 | void 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; |
@@ -1491,128 +1492,129 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b | |||
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 | } |
1539 | Event* CalendarView::getLastSyncEvent() | 1540 | Event* 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 |
1564 | void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) | 1566 | void 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 | } |
1592 | void CalendarView::checkExternalId( Incidence * inc ) | 1594 | void 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 | } |
1598 | bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) | 1600 | bool 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; |
@@ -1841,138 +1843,143 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int | |||
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 | ||
1940 | void CalendarView::setSyncDevice( QString s ) | 1947 | void CalendarView::setSyncDevice( QString s ) |
1941 | { | 1948 | { |
1942 | mCurrentSyncDevice= s; | 1949 | mCurrentSyncDevice= s; |
1943 | } | 1950 | } |
1944 | void CalendarView::setSyncName( QString s ) | 1951 | void CalendarView::setSyncName( QString s ) |
1945 | { | 1952 | { |
1946 | mCurrentSyncName= s; | 1953 | mCurrentSyncName= s; |
1947 | } | 1954 | } |
1948 | bool CalendarView::syncCalendar(QString filename, int mode) | 1955 | bool 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 | ||
1978 | void CalendarView::syncExternal( int mode ) | 1985 | void CalendarView::syncExternal( int mode ) |
@@ -2374,251 +2381,295 @@ bool CalendarView::openCalendar(QString filename, bool merge) | |||
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 | } |
2429 | void CalendarView::mergeFile( QString fn ) | 2436 | void 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 | } |
2445 | void 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 | } | ||
2438 | void CalendarView::showOpenError() | 2471 | void 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 | } |
2442 | void CalendarView::setLoadedFileVersion(QDateTime dt) | 2475 | void CalendarView::setLoadedFileVersion(QDateTime dt) |
2443 | { | 2476 | { |
2444 | loadedFileVersion = dt; | 2477 | loadedFileVersion = dt; |
2445 | } | 2478 | } |
2446 | bool CalendarView::checkFileChanged(QString fn) | 2479 | bool 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 | } |
2457 | void CalendarView::watchSavedFile() | 2490 | void 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 | } |
2470 | bool CalendarView::checkAllFileVersions() | 2503 | bool 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 | } |
2500 | bool CalendarView::checkFileVersion(QString fn) | 2533 | bool 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 | } |
2531 | bool CalendarView::saveCalendars() | 2565 | bool 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 | } |
2595 | bool 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 | } | ||
2561 | bool CalendarView::saveCalendar( QString filename ) | 2612 | bool 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 | ||
2585 | void CalendarView::closeCalendar() | 2636 | void 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 | ||
2597 | void CalendarView::archiveCalendar() | 2648 | void CalendarView::archiveCalendar() |
2598 | { | 2649 | { |
2599 | mDialogManager->showArchiveDialog(); | 2650 | mDialogManager->showArchiveDialog(); |
2600 | } | 2651 | } |
2601 | 2652 | ||
2602 | 2653 | ||
2603 | void CalendarView::readSettings() | 2654 | void 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 ) || |
@@ -4971,129 +5022,133 @@ void CalendarView::lookForOutgoingMessages() | |||
4971 | 5022 | ||
4972 | void CalendarView::lookForIncomingMessages() | 5023 | void CalendarView::lookForIncomingMessages() |
4973 | { | 5024 | { |
4974 | IncomingDialog *icd = mDialogManager->incomingDialog(); | 5025 | IncomingDialog *icd = mDialogManager->incomingDialog(); |
4975 | icd->retrieve(); | 5026 | icd->retrieve(); |
4976 | } | 5027 | } |
4977 | 5028 | ||
4978 | bool CalendarView::removeCompletedSubTodos( Todo* t ) | 5029 | bool 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 | } |
5000 | void CalendarView::purgeCompleted() | 5051 | void 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 | ||
5024 | void CalendarView::slotCalendarChanged() | 5075 | void CalendarView::slotCalendarChanged() |
5025 | { | 5076 | { |
5026 | ; | 5077 | ; |
5027 | } | 5078 | } |
5028 | 5079 | ||
5029 | void CalendarView::keyPressEvent ( QKeyEvent *e) | 5080 | void CalendarView::keyPressEvent ( QKeyEvent *e) |
5030 | { | 5081 | { |
5031 | //qDebug("CalendarView::keyPressEvent "); | 5082 | //qDebug("CalendarView::keyPressEvent "); |
5032 | e->ignore(); | 5083 | e->ignore(); |
5033 | } | 5084 | } |
5034 | 5085 | ||
5086 | void CalendarView::multiResourceSyncStart( bool start ) | ||
5087 | { | ||
5088 | mMultiResourceSync = start; | ||
5035 | 5089 | ||
5090 | } | ||
5036 | bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource) | 5091 | bool 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 | } |
5062 | bool CalendarView::syncExternal(KSyncManager* manager, QString resource) | 5117 | bool 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 | } |
5076 | void CalendarView::setSyncManager(KSyncManager* manager) | 5131 | void CalendarView::setSyncManager(KSyncManager* manager) |
5077 | { | 5132 | { |
5078 | mSyncManager = manager; | 5133 | mSyncManager = manager; |
5079 | } | 5134 | } |
5080 | 5135 | ||
5081 | void CalendarView::removeSyncInfo( QString syncProfile) | 5136 | void 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 | ||
5088 | void CalendarView::undo_delete() | 5143 | void 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"))) { |
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index f85b6a3..60b1276 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h | |||
@@ -78,235 +78,238 @@ using namespace KCal; | |||
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 | ||
90 | class MissedAlarmTextBrowser : public QTextBrowser { | 90 | class 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 | ||
105 | class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface | 105 | class 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 ¬i ); | 220 | void addAlarm(const QDateTime &qdt, const QString ¬i ); |
219 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); | 221 | void addSuspendAlarm(const QDateTime &qdt, const QString ¬i ); |
220 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); | 222 | void removeAlarm(const QDateTime &qdt, const QString ¬i ); |
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 */ |
@@ -478,128 +481,129 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser | |||
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; |
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 66bb19b..69ccde1 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -313,130 +313,132 @@ MainWindow::MainWindow( QWidget *parent, const char *name ) : | |||
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 | } |
409 | MainWindow::~MainWindow() | 411 | MainWindow::~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 | ||
423 | void MainWindow::loadDataAfterStart() | 425 | void 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& ))); |
@@ -2643,152 +2645,152 @@ void MainWindow::importIcal() | |||
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 | } |
2650 | void MainWindow::exportCalendar( bool iCalFormat ) | 2652 | void 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 | } |
2690 | void MainWindow::exportICalendar() | 2692 | void MainWindow::exportICalendar() |
2691 | { | 2693 | { |
2692 | exportCalendar( true ); | 2694 | exportCalendar( true ); |
2693 | } | 2695 | } |
2694 | void MainWindow::exportVCalendar() | 2696 | void MainWindow::exportVCalendar() |
2695 | { | 2697 | { |
2696 | exportCalendar( false ); | 2698 | exportCalendar( false ); |
2697 | } | 2699 | } |
2698 | QString MainWindow::sentSyncFile() | 2700 | QString 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 | ||
2707 | void MainWindow::syncFileRequest() | 2709 | void 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 | } |
2724 | void MainWindow::getFile( bool success ) | 2726 | void 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 | } |
2736 | void MainWindow::printListView() | 2738 | void 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 | } |
2743 | void MainWindow::printSel( ) | 2745 | void MainWindow::printSel( ) |
2744 | { | 2746 | { |
2745 | mView->viewManager()->agendaView()->agenda()->printSelection(); | 2747 | mView->viewManager()->agendaView()->agenda()->printSelection(); |
2746 | } | 2748 | } |
2747 | 2749 | ||
2748 | void MainWindow::printCal() | 2750 | void 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 | ||
2757 | void MainWindow::weekAction() | 2759 | void 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 | } |
diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index d8018b6..a533d8b 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h | |||
@@ -49,130 +49,130 @@ class MainWindow : public QMainWindow | |||
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; |
diff --git a/libkcal/calendar.h b/libkcal/calendar.h index 4b8b3ff..0a94914 100644 --- a/libkcal/calendar.h +++ b/libkcal/calendar.h | |||
@@ -18,128 +18,129 @@ | |||
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 | ||
39 | class KConfig; | 39 | class KConfig; |
40 | 40 | ||
41 | namespace KCal { | 41 | namespace 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 | */ |
60 | class Calendar : public QObject, public CustomProperties, | 60 | class Calendar : public QObject, public CustomProperties, |
61 | public IncidenceBase::Observer | 61 | public IncidenceBase::Observer |
62 | { | 62 | { |
63 | Q_OBJECT | 63 | Q_OBJECT |
64 | public: | 64 | public: |
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. |
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp index 0ddfeca..45e3128 100644 --- a/libkcal/calendarlocal.cpp +++ b/libkcal/calendarlocal.cpp | |||
@@ -112,135 +112,147 @@ Incidence* CalendarLocal::incidenceForUid( const QString& uid , bool doNotCheckD | |||
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 | ||
128 | bool CalendarLocal::mergeCalendar( Calendar* remote ) | 128 | bool 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 | ||
166 | bool CalendarLocal::addCalendarFile( QString name, int id ) | 166 | bool 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 | } |
176 | void CalendarLocal::setSyncEventsReadOnly() | 176 | void 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 | } | ||
186 | void 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 | } |
186 | void CalendarLocal::addCalendar( Calendar* cal ) | 198 | void 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 | } |
233 | bool CalendarLocal::load( const QString &fileName ) | 245 | bool 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 | ||
239 | bool CalendarLocal::save( const QString &fileName, CalFormat *format ) | 251 | bool 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 | ||
245 | void CalendarLocal::stopAllTodos() | 257 | void CalendarLocal::stopAllTodos() |
246 | { | 258 | { |
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h index ca0bd98..eb7bf34 100644 --- a/libkcal/calendarlocal.h +++ b/libkcal/calendarlocal.h | |||
@@ -1,115 +1,116 @@ | |||
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 | ||
27 | namespace KCal { | 27 | namespace KCal { |
28 | 28 | ||
29 | class CalFormat; | 29 | class 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 | */ |
34 | class CalendarLocal : public Calendar | 34 | class 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. |
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp index a64eb34..719d80b 100644 --- a/libkdepim/ksyncmanager.cpp +++ b/libkdepim/ksyncmanager.cpp | |||
@@ -135,129 +135,130 @@ void KSyncManager::fillSyncMenu() | |||
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 | } |
174 | void KSyncManager::slotClearMenu( int action ) | 174 | void 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 | } |
196 | void KSyncManager::slotSyncMenu( int action ) | 196 | void 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() ) { |
@@ -380,257 +381,259 @@ void KSyncManager::enableQuick( bool ask ) | |||
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 | } |
445 | void KSyncManager::displayErrorPort() | 448 | void 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 | } |
449 | void KSyncManager::syncLocalFile() | 452 | void 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 | ||
481 | bool KSyncManager::syncWithFile( QString fn , bool quick ) | 484 | bool 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 | ||
520 | void KSyncManager::quickSyncLocalFile() | 523 | void 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 | ||
529 | void KSyncManager::multiSync( bool askforPrefs ) | 532 | void 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 | ||
570 | int KSyncManager::ringSync() | 573 | int 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): |
@@ -1079,585 +1082,594 @@ void KSyncManager::showProgressBar(int percentage, QString caption, int total) | |||
1079 | bar->raise(); | 1082 | bar->raise(); |
1080 | bar->setProgress( percentage ); | 1083 | bar->setProgress( percentage ); |
1081 | qApp->processEvents(); | 1084 | qApp->processEvents(); |
1082 | } | 1085 | } |
1083 | 1086 | ||
1084 | void KSyncManager::hideProgressBar() | 1087 | void KSyncManager::hideProgressBar() |
1085 | { | 1088 | { |
1086 | bar->hide(); | 1089 | bar->hide(); |
1087 | qApp->processEvents(); | 1090 | qApp->processEvents(); |
1088 | } | 1091 | } |
1089 | 1092 | ||
1090 | bool KSyncManager::isProgressBarCanceled() | 1093 | bool KSyncManager::isProgressBarCanceled() |
1091 | { | 1094 | { |
1092 | return !bar->isVisible(); | 1095 | return !bar->isVisible(); |
1093 | } | 1096 | } |
1094 | 1097 | ||
1095 | QString KSyncManager::syncFileName() | 1098 | QString 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 | ||
1120 | void KSyncManager::syncPi() | 1123 | void 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 | ||
1163 | void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) | 1169 | void 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 | ||
1213 | void KSyncManager::readFileFromSocket() | 1219 | void 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 | ||
1236 | KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) | 1242 | KServerSocket:: 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 | ||
1245 | void KServerSocket::newConnection ( int socket ) | 1251 | void 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 | ||
1259 | void KServerSocket::discardClient() | 1265 | void KServerSocket::discardClient() |
1260 | { | 1266 | { |
1261 | QTimer::singleShot( 10, this , SLOT ( deleteSocket())); | 1267 | QTimer::singleShot( 10, this , SLOT ( deleteSocket())); |
1262 | } | 1268 | } |
1263 | void KServerSocket::deleteSocket() | 1269 | void 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 | } |
1273 | void KServerSocket::readClient() | 1279 | void 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 | } |
1327 | void KServerSocket::displayErrorMessage() | 1336 | void 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 | } |
1338 | void KServerSocket::error_connect( QString errmess ) | 1347 | void 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 | } |
1348 | void KServerSocket::end_connect() | 1357 | void KServerSocket::end_connect() |
1349 | { | 1358 | { |
1350 | delete mSyncActionDialog; | 1359 | delete mSyncActionDialog; |
1351 | mSyncActionDialog = 0; | 1360 | mSyncActionDialog = 0; |
1352 | } | 1361 | } |
1353 | void KServerSocket::send_file() | 1362 | void 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 | } |
1436 | void KServerSocket::get_file() | 1446 | void 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 | ||
1446 | void KServerSocket::readBackFileFromSocket() | 1456 | void 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 | ||
1493 | KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) | 1505 | KCommandSocket::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 | } |
1512 | void KCommandSocket::sendFileRequest() | 1524 | void 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 | ||
1527 | void KCommandSocket::readFile( QString fn ) | 1539 | void 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 | } |
1545 | void KCommandSocket::updateConnectDialog() | 1557 | void 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 | } |
1564 | void KCommandSocket::writeFile( QString fileName ) | 1576 | void 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 | } |
1576 | void KCommandSocket::writeFileToSocket() | 1588 | void 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 | } |
1623 | void KCommandSocket::sendStop() | 1635 | void 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 | ||
1638 | void KCommandSocket::startReadFileFromSocket() | 1650 | void 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 | } |
1650 | void KCommandSocket::readFileFromSocket() | 1662 | void 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(); |
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h index f4654ce..53c611d 100644 --- a/libkdepim/ksyncmanager.h +++ b/libkdepim/ksyncmanager.h | |||
@@ -1,240 +1,246 @@ | |||
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 | ||
35 | class QPopupMenu; | 35 | class QPopupMenu; |
36 | class KSyncProfile; | 36 | class KSyncProfile; |
37 | class KPimPrefs; | 37 | class KPimPrefs; |
38 | class QWidget; | 38 | class QWidget; |
39 | class KSyncManager; | 39 | class KSyncManager; |
40 | class KSyncInterface; | 40 | class KSyncInterface; |
41 | class QProgressBar; | 41 | class QProgressBar; |
42 | 42 | ||
43 | 43 | ||
44 | class KServerSocket : public QServerSocket | 44 | class 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 | ||
79 | class KCommandSocket : public QObject | 82 | class 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 | ||
120 | class KSyncManager : public QObject | 123 | class 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 | ||
217 | private slots: | 223 | private slots: |
218 | void displayErrorPort(); | 224 | void displayErrorPort(); |
219 | void confSync(); | 225 | void confSync(); |
220 | 226 | ||
221 | 227 | ||
222 | }; | 228 | }; |
223 | 229 | ||
224 | 230 | ||
225 | class KSyncInterface | 231 | class 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 | ||