summaryrefslogtreecommitdiffabout
path: root/korganizer/calendarview.cpp
Unidiff
Diffstat (limited to 'korganizer/calendarview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 940ea91..ccacc52 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1430,99 +1430,106 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
1430 while ( inR ) { 1430 while ( inR ) {
1431 if ( ! bar.isVisible() ) 1431 if ( ! bar.isVisible() )
1432 return false; 1432 return false;
1433 if ( incCounter % modulo == 0 ) 1433 if ( incCounter % modulo == 0 )
1434 bar.setProgress( incCounter ); 1434 bar.setProgress( incCounter );
1435 ++incCounter; 1435 ++incCounter;
1436 uid = inR->uid(); 1436 uid = inR->uid();
1437 bool skipIncidence = false; 1437 bool skipIncidence = false;
1438 if ( uid.left(15) == QString("last-syncEvent-") ) 1438 if ( uid.left(15) == QString("last-syncEvent-") )
1439 skipIncidence = true; 1439 skipIncidence = true;
1440 QString idS; 1440 QString idS;
1441 qApp->processEvents(); 1441 qApp->processEvents();
1442 if ( !skipIncidence ) { 1442 if ( !skipIncidence ) {
1443 inL = local->incidence( uid ); 1443 inL = local->incidence( uid );
1444 if ( inL ) { // maybe conflict - same uid in both calendars 1444 if ( inL ) { // maybe conflict - same uid in both calendars
1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1446 //qDebug("take %d %s ", take, inL->summary().latin1()); 1446 //qDebug("take %d %s ", take, inL->summary().latin1());
1447 if ( take == 3 ) 1447 if ( take == 3 )
1448 return false; 1448 return false;
1449 if ( take == 1 ) {// take local ********************** 1449 if ( take == 1 ) {// take local **********************
1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1452 else 1452 else
1453 idS = inR->IDStr(); 1453 idS = inR->IDStr();
1454 int calID = inR->calID();
1454 remote->deleteIncidence( inR ); 1455 remote->deleteIncidence( inR );
1455 inR = inL->clone(); 1456 inR = inL->clone();
1457 inR->setCalID( calID );
1456 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1458 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1457 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1459 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1458 inR->setIDStr( idS ); 1460 inR->setIDStr( idS );
1459 remote->addIncidence( inR ); 1461 remote->addIncidence( inR );
1460 if ( mSyncManager->syncWithDesktop() ) 1462 if ( mSyncManager->syncWithDesktop() )
1461 inR->setPilotId( 2 ); 1463 inR->setPilotId( 2 );
1462 ++changedRemote; 1464 ++changedRemote;
1463 } else {// take remote ********************** 1465 } else {// take remote **********************
1464 idS = inL->IDStr(); 1466 idS = inL->IDStr();
1465 int pid = inL->pilotId(); 1467 int pid = inL->pilotId();
1468 int calID = inL->calID();
1466 local->deleteIncidence( inL ); 1469 local->deleteIncidence( inL );
1467 inL = inR->clone(); 1470 inL = inR->clone();
1471 inL->setCalID( calID );
1468 if ( mSyncManager->syncWithDesktop() ) 1472 if ( mSyncManager->syncWithDesktop() )
1469 inL->setPilotId( pid ); 1473 inL->setPilotId( pid );
1470 inL->setIDStr( idS ); 1474 inL->setIDStr( idS );
1471 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1475 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1472 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1476 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1473 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1477 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1474 } 1478 }
1475 local->addIncidence( inL ); 1479 local->addIncidence( inL );
1476 ++changedLocal; 1480 ++changedLocal;
1477 } 1481 }
1478 } 1482 }
1479 } else { // no conflict ********** add or delete remote 1483 } else { // no conflict ********** add or delete remote
1480 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1484 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1481 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1485 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1482 QString des = eventLSync->description(); 1486 QString des = eventLSync->description();
1483 QString pref = "e"; 1487 QString pref = "e";
1484 if ( inR->typeID() == todoID ) 1488 if ( inR->typeID() == todoID )
1485 pref = "t"; 1489 pref = "t";
1486 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1490 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1487 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1491 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1488 //remote->deleteIncidence( inR ); 1492 //remote->deleteIncidence( inR );
1489 ++deletedEventR; 1493 ++deletedEventR;
1490 } else { 1494 } else {
1491 inR->setLastModified( modifiedCalendar ); 1495 inR->setLastModified( modifiedCalendar );
1492 inL = inR->clone(); 1496 inL = inR->clone();
1493 inL->setIDStr( ":" ); 1497 inL->setIDStr( ":" );
1494 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1498 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1495 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1499 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1500
1501 inL->setCalID( 0 );// add to default cal
1496 local->addIncidence( inL ); 1502 local->addIncidence( inL );
1497 ++addedEvent; 1503 ++addedEvent;
1498 1504
1499 } 1505 }
1500 } else { 1506 } else {
1501 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1507 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1502 inR->setLastModified( modifiedCalendar ); 1508 inR->setLastModified( modifiedCalendar );
1503 inL = inR->clone(); 1509 inL = inR->clone();
1504 inL->setIDStr( ":" ); 1510 inL->setIDStr( ":" );
1511 inL->setCalID( 0 );// add to default cal
1505 local->addIncidence( inL ); 1512 local->addIncidence( inL );
1506 ++addedEvent; 1513 ++addedEvent;
1507 1514
1508 } else { 1515 } else {
1509 checkExternSyncEvent(eventRSyncSharp, inR); 1516 checkExternSyncEvent(eventRSyncSharp, inR);
1510 remote->deleteIncidence( inR ); 1517 remote->deleteIncidence( inR );
1511 ++deletedEventR; 1518 ++deletedEventR;
1512 } 1519 }
1513 } 1520 }
1514 } else { 1521 } else {
1515 ++filteredIN; 1522 ++filteredIN;
1516 } 1523 }
1517 } 1524 }
1518 } 1525 }
1519 inR = er.next(); 1526 inR = er.next();
1520 } 1527 }
1521 QPtrList<Incidence> el = local->rawIncidences(); 1528 QPtrList<Incidence> el = local->rawIncidences();
1522 inL = el.first(); 1529 inL = el.first();
1523 modulo = (el.count()/10)+1; 1530 modulo = (el.count()/10)+1;
1524 bar.setCaption (i18n("Add / remove events") ); 1531 bar.setCaption (i18n("Add / remove events") );
1525 bar.setTotalSteps ( el.count() ) ; 1532 bar.setTotalSteps ( el.count() ) ;
1526 bar.show(); 1533 bar.show();
1527 incCounter = 0; 1534 incCounter = 0;
1528 1535
@@ -1538,62 +1545,64 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int
1538 bool skipIncidence = false; 1545 bool skipIncidence = false;
1539 if ( uid.left(15) == QString("last-syncEvent-") ) 1546 if ( uid.left(15) == QString("last-syncEvent-") )
1540 skipIncidence = true; 1547 skipIncidence = true;
1541 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1542 skipIncidence = true; 1549 skipIncidence = true;
1543 if ( !skipIncidence ) { 1550 if ( !skipIncidence ) {
1544 inR = remote->incidence( uid ); 1551 inR = remote->incidence( uid );
1545 if ( ! inR ) { 1552 if ( ! inR ) {
1546 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1553 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1547 // no conflict ********** add or delete local 1554 // no conflict ********** add or delete local
1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1555 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1549 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1556 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1550 checkExternSyncEvent(eventLSyncSharp, inL); 1557 checkExternSyncEvent(eventLSyncSharp, inL);
1551 local->deleteIncidence( inL ); 1558 local->deleteIncidence( inL );
1552 ++deletedEventL; 1559 ++deletedEventL;
1553 } else { 1560 } else {
1554 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1561 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1555 inL->removeID(mCurrentSyncDevice ); 1562 inL->removeID(mCurrentSyncDevice );
1556 ++addedEventR; 1563 ++addedEventR;
1557 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1564 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1558 inL->setLastModified( modifiedCalendar ); 1565 inL->setLastModified( modifiedCalendar );
1559 inR = inL->clone(); 1566 inR = inL->clone();
1560 inR->setIDStr( ":" ); 1567 inR->setIDStr( ":" );
1561 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1568 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1569 inR->setCalID( 0 );// add to default cal
1562 remote->addIncidence( inR ); 1570 remote->addIncidence( inR );
1563 } 1571 }
1564 } 1572 }
1565 } else { 1573 } else {
1566 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1574 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1567 checkExternSyncEvent(eventLSyncSharp, inL); 1575 checkExternSyncEvent(eventLSyncSharp, inL);
1568 local->deleteIncidence( inL ); 1576 local->deleteIncidence( inL );
1569 ++deletedEventL; 1577 ++deletedEventL;
1570 } else { 1578 } else {
1571 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1579 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1572 ++addedEventR; 1580 ++addedEventR;
1573 inL->setLastModified( modifiedCalendar ); 1581 inL->setLastModified( modifiedCalendar );
1574 inR = inL->clone(); 1582 inR = inL->clone();
1575 inR->setIDStr( ":" ); 1583 inR->setIDStr( ":" );
1584 inR->setCalID( 0 );// add to default cal
1576 remote->addIncidence( inR ); 1585 remote->addIncidence( inR );
1577 } 1586 }
1578 } 1587 }
1579 } 1588 }
1580 } else { 1589 } else {
1581 ++filteredOUT; 1590 ++filteredOUT;
1582 } 1591 }
1583 } 1592 }
1584 } 1593 }
1585 inL = el.next(); 1594 inL = el.next();
1586 } 1595 }
1587 int delFut = 0; 1596 int delFut = 0;
1588 int remRem = 0; 1597 int remRem = 0;
1589 if ( mSyncManager->mWriteBackInFuture ) { 1598 if ( mSyncManager->mWriteBackInFuture ) {
1590 er = remote->rawIncidences(); 1599 er = remote->rawIncidences();
1591 remRem = er.count(); 1600 remRem = er.count();
1592 inR = er.first(); 1601 inR = er.first();
1593 QDateTime dt; 1602 QDateTime dt;
1594 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1603 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1595 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1604 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1596 while ( inR ) { 1605 while ( inR ) {
1597 if ( inR->typeID() == todoID ) { 1606 if ( inR->typeID() == todoID ) {
1598 Todo * t = (Todo*)inR; 1607 Todo * t = (Todo*)inR;
1599 if ( t->hasDueDate() ) 1608 if ( t->hasDueDate() )
@@ -2122,48 +2131,57 @@ bool CalendarView::openCalendar(QString filename, bool merge)
2122 } 2131 }
2123 } 2132 }
2124 return true; 2133 return true;
2125 } else { 2134 } else {
2126 // while failing to load, the calendar object could 2135 // while failing to load, the calendar object could
2127 // have become partially populated. Clear it out. 2136 // have become partially populated. Clear it out.
2128 if ( !merge ) { 2137 if ( !merge ) {
2129 mCalendar->close(); 2138 mCalendar->close();
2130 mViewManager->setDocumentId( filename ); 2139 mViewManager->setDocumentId( filename );
2131 mDialogManager->setDocumentId( filename ); 2140 mDialogManager->setDocumentId( filename );
2132 mTodoList->setDocumentId( filename ); 2141 mTodoList->setDocumentId( filename );
2133 } 2142 }
2134 2143
2135 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2144 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2136 2145
2137 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2146 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2138 globalFlagBlockAgenda = 2; 2147 globalFlagBlockAgenda = 2;
2139 mCalendar->reInitAlarmSettings(); 2148 mCalendar->reInitAlarmSettings();
2140 setSyncEventsReadOnly(); 2149 setSyncEventsReadOnly();
2141 updateUnmanagedViews(); 2150 updateUnmanagedViews();
2142 updateView(); 2151 updateView();
2143 } 2152 }
2144 return false; 2153 return false;
2145} 2154}
2155void CalendarView::mergeFile( QString fn )
2156{
2157 clearAllViews();
2158 mCalendar->mergeCalendarFile( fn );
2159 mCalendar->reInitAlarmSettings();
2160 setSyncEventsReadOnly();
2161 updateUnmanagedViews();
2162 updateView();
2163}
2146void CalendarView::showOpenError() 2164void CalendarView::showOpenError()
2147{ 2165{
2148 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2166 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2149} 2167}
2150void CalendarView::setLoadedFileVersion(QDateTime dt) 2168void CalendarView::setLoadedFileVersion(QDateTime dt)
2151{ 2169{
2152 loadedFileVersion = dt; 2170 loadedFileVersion = dt;
2153} 2171}
2154bool CalendarView::checkFileChanged(QString fn) 2172bool CalendarView::checkFileChanged(QString fn)
2155{ 2173{
2156 QFileInfo finf ( fn ); 2174 QFileInfo finf ( fn );
2157 if ( !finf.exists() ) 2175 if ( !finf.exists() )
2158 return true; 2176 return true;
2159 QDateTime dt = finf.lastModified (); 2177 QDateTime dt = finf.lastModified ();
2160 if ( dt <= loadedFileVersion ) 2178 if ( dt <= loadedFileVersion )
2161 return false; 2179 return false;
2162 return true; 2180 return true;
2163 2181
2164} 2182}
2165void CalendarView::watchSavedFile() 2183void CalendarView::watchSavedFile()
2166{ 2184{
2167 QFileInfo finf ( MainWindow::defaultFileName()); 2185 QFileInfo finf ( MainWindow::defaultFileName());
2168 if ( !finf.exists() ) 2186 if ( !finf.exists() )
2169 return; 2187 return;
@@ -3337,54 +3355,56 @@ void CalendarView::cloneIncidence(Incidence * orgInc )
3337 } 3355 }
3338 } if ( newInc->typeID() == journalID ) { 3356 } if ( newInc->typeID() == journalID ) {
3339 mCalendar->addJournal( (Journal*) newInc ); 3357 mCalendar->addJournal( (Journal*) newInc );
3340 editJournal( (Journal*) newInc ); 3358 editJournal( (Journal*) newInc );
3341 } 3359 }
3342 setActiveWindow(); 3360 setActiveWindow();
3343} 3361}
3344 3362
3345void CalendarView::newEvent() 3363void CalendarView::newEvent()
3346{ 3364{
3347 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3365 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3348 KOAgendaView *aView = mViewManager->agendaView(); 3366 KOAgendaView *aView = mViewManager->agendaView();
3349 if (aView) { 3367 if (aView) {
3350 if (aView->selectionStart().isValid()) { 3368 if (aView->selectionStart().isValid()) {
3351 if (aView->selectedIsAllDay()) { 3369 if (aView->selectedIsAllDay()) {
3352 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3370 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3353 } else { 3371 } else {
3354 newEvent(aView->selectionStart(),aView->selectionEnd()); 3372 newEvent(aView->selectionStart(),aView->selectionEnd());
3355 } 3373 }
3356 return; 3374 return;
3357 } 3375 }
3358 } 3376 }
3359 3377
3360 QDate date = mNavigator->selectedDates().first(); 3378 QDate date = mNavigator->selectedDates().first();
3379#if 0
3361 QDateTime current = QDateTime::currentDateTime(); 3380 QDateTime current = QDateTime::currentDateTime();
3362 if ( date <= current.date() ) { 3381 if ( date <= current.date() ) {
3363 int hour = current.time().hour() +1; 3382 int hour = current.time().hour() +1;
3364 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3383 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3365 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3384 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3366 } else 3385 } else
3386#endif
3367 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3387 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3368 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3388 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3369 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3389 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3370} 3390}
3371 3391
3372void CalendarView::newEvent(QDateTime fh) 3392void CalendarView::newEvent(QDateTime fh)
3373{ 3393{
3374 newEvent(fh, 3394 newEvent(fh,
3375 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3395 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3376} 3396}
3377 3397
3378void CalendarView::newEvent(QDate dt) 3398void CalendarView::newEvent(QDate dt)
3379{ 3399{
3380 newEvent(QDateTime(dt, QTime(0,0,0)), 3400 newEvent(QDateTime(dt, QTime(0,0,0)),
3381 QDateTime(dt, QTime(0,0,0)), true); 3401 QDateTime(dt, QTime(0,0,0)), true);
3382} 3402}
3383void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3403void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3384{ 3404{
3385 newEvent(fromHint, toHint, false); 3405 newEvent(fromHint, toHint, false);
3386} 3406}
3387void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3407void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3388{ 3408{
3389 3409
3390 showEventEditor(); 3410 showEventEditor();