-rw-r--r-- | bin/kdepim/WhatsNew.txt | 6 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 34 |
2 files changed, 23 insertions, 17 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index 8fab725..2ce78c7 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt @@ -14,12 +14,16 @@ Fixed pi-sync problems with the new multi calendar feature. Now pi-sync behaviour should be: 1) Local sends file request ( as usual ) 2) Remote sends file which contains data of all enabled ( the calendar where the "eye" column is checked ) calendars. 3) Local syncs with data, adds new entries to default calendar and sends file back ( as usual ). + If the data which local receives contains entries which are on disabled calendars on local this entries are updated and not added as duplicates to the default calendar. 4) Remote updates the data and adds new entries to default calendar. Readonly entries are not changed on remote. If the data which remote receives contains entries which are on disabled calendars on remote this entries are updated and not added as duplicates to the default calendar. -Summary: If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour. +Summary: +No new item ( new created after the last sync ) in a disabled calendar is propagated to the sync partner. Readonly items are synced and added/changed on the sync partner if it is not readonly on the sync partner. +If you have different calendars on remote and local and some of them disabled you may get some "strange" bahaviour. +Well, the syncing has become quite complicated ... you should have no problems if you enable all calendars. ********** VERSION 2.1.13 ************ Fixed a problem in KA/Pi search. diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index a350c3b..7044e90 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -1440,9 +1440,9 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int skipIncidence = true; QString idS; qApp->processEvents(); if ( !skipIncidence ) { - inL = local->incidence( uid ); + inL = local->incidenceForUid( uid , false ); if ( inL ) { // maybe conflict - same uid in both calendars if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { //qDebug("take %d %s ", take, inL->summary().latin1()); if ( take == 3 ) @@ -1463,23 +1463,25 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int if ( mSyncManager->syncWithDesktop() ) inR->setPilotId( 2 ); ++changedRemote; } else {// take remote ********************** - idS = inL->IDStr(); - int pid = inL->pilotId(); - int calID = inL->calID(); - local->deleteIncidence( inL ); - inL = inR->clone(); - inL->setCalID( calID ); - if ( mSyncManager->syncWithDesktop() ) - inL->setPilotId( pid ); - inL->setIDStr( idS ); - if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { - inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); - inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); + if ( !inL->isReadOnly() ) { + idS = inL->IDStr(); + int pid = inL->pilotId(); + int calID = inL->calID(); + local->deleteIncidence( inL ); + inL = inR->clone(); + inL->setCalID( calID ); + if ( mSyncManager->syncWithDesktop() ) + inL->setPilotId( pid ); + inL->setIDStr( idS ); + if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { + inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); + inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); + } + local->addIncidence( inL ); + ++changedLocal; } - local->addIncidence( inL ); - ++changedLocal; } } } else { // no conflict ********** add or delete remote if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ @@ -1548,9 +1550,9 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int skipIncidence = true; if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) skipIncidence = true; if ( !skipIncidence ) { - inR = remote->incidence( uid ); + inR = remote->incidenceForUid( uid , true ); if ( ! inR ) { if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ // no conflict ********** add or delete local if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { |