-rw-r--r-- | korganizer/calendarview.cpp | 3 | ||||
-rw-r--r-- | libkcal/vcalformat.cpp | 2 |
2 files changed, 3 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 687943e..b1da144 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -1469,149 +1469,150 @@ bool CalendarView::importQtopia( const QString &categories, | |||
1469 | 1469 | ||
1470 | #endif | 1470 | #endif |
1471 | 1471 | ||
1472 | } | 1472 | } |
1473 | 1473 | ||
1474 | void CalendarView::setSyncEventsReadOnly() | 1474 | void CalendarView::setSyncEventsReadOnly() |
1475 | { | 1475 | { |
1476 | Event * ev; | 1476 | Event * ev; |
1477 | QPtrList<Event> eL = mCalendar->rawEvents(); | 1477 | QPtrList<Event> eL = mCalendar->rawEvents(); |
1478 | ev = eL.first(); | 1478 | ev = eL.first(); |
1479 | while ( ev ) { | 1479 | while ( ev ) { |
1480 | if ( ev->uid().left(15) == QString("last-syncEvent-") ) | 1480 | if ( ev->uid().left(15) == QString("last-syncEvent-") ) |
1481 | ev->setReadOnly( true ); | 1481 | ev->setReadOnly( true ); |
1482 | ev = eL.next(); | 1482 | ev = eL.next(); |
1483 | } | 1483 | } |
1484 | } | 1484 | } |
1485 | bool CalendarView::openCalendar(QString filename, bool merge) | 1485 | bool CalendarView::openCalendar(QString filename, bool merge) |
1486 | { | 1486 | { |
1487 | 1487 | ||
1488 | if (filename.isEmpty()) { | 1488 | if (filename.isEmpty()) { |
1489 | return false; | 1489 | return false; |
1490 | } | 1490 | } |
1491 | 1491 | ||
1492 | if (!QFile::exists(filename)) { | 1492 | if (!QFile::exists(filename)) { |
1493 | KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); | 1493 | KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); |
1494 | return false; | 1494 | return false; |
1495 | } | 1495 | } |
1496 | 1496 | ||
1497 | globalFlagBlockAgenda = 1; | 1497 | globalFlagBlockAgenda = 1; |
1498 | if (!merge) mCalendar->close(); | 1498 | if (!merge) mCalendar->close(); |
1499 | 1499 | ||
1500 | mStorage->setFileName( filename ); | 1500 | mStorage->setFileName( filename ); |
1501 | 1501 | ||
1502 | if ( mStorage->load() ) { | 1502 | if ( mStorage->load() ) { |
1503 | if ( merge ) ;//setModified( true ); | 1503 | if ( merge ) ;//setModified( true ); |
1504 | else { | 1504 | else { |
1505 | //setModified( true ); | 1505 | //setModified( true ); |
1506 | mViewManager->setDocumentId( filename ); | 1506 | mViewManager->setDocumentId( filename ); |
1507 | mDialogManager->setDocumentId( filename ); | 1507 | mDialogManager->setDocumentId( filename ); |
1508 | mTodoList->setDocumentId( filename ); | 1508 | mTodoList->setDocumentId( filename ); |
1509 | } | 1509 | } |
1510 | globalFlagBlockAgenda = 2; | 1510 | globalFlagBlockAgenda = 2; |
1511 | // if ( getLastSyncEvent() ) | 1511 | // if ( getLastSyncEvent() ) |
1512 | // getLastSyncEvent()->setReadOnly( true ); | 1512 | // getLastSyncEvent()->setReadOnly( true ); |
1513 | mCalendar->reInitAlarmSettings(); | 1513 | mCalendar->reInitAlarmSettings(); |
1514 | setSyncEventsReadOnly(); | 1514 | setSyncEventsReadOnly(); |
1515 | updateUnmanagedViews(); | 1515 | updateUnmanagedViews(); |
1516 | updateView(); | 1516 | updateView(); |
1517 | loadedFileVersion = QDateTime::currentDateTime(); | 1517 | setLoadedFileVersion( QDateTime::currentDateTime().addSecs( -1 )); |
1518 | if ( filename != MainWindow::defaultFileName() ) { | 1518 | if ( filename != MainWindow::defaultFileName() ) { |
1519 | saveCalendar( MainWindow::defaultFileName() ); | 1519 | saveCalendar( MainWindow::defaultFileName() ); |
1520 | watchSavedFile(); | 1520 | watchSavedFile(); |
1521 | } | 1521 | } |
1522 | return true; | 1522 | return true; |
1523 | } else { | 1523 | } else { |
1524 | // while failing to load, the calendar object could | 1524 | // while failing to load, the calendar object could |
1525 | // have become partially populated. Clear it out. | 1525 | // have become partially populated. Clear it out. |
1526 | if ( !merge ) { | 1526 | if ( !merge ) { |
1527 | mCalendar->close(); | 1527 | mCalendar->close(); |
1528 | mViewManager->setDocumentId( filename ); | 1528 | mViewManager->setDocumentId( filename ); |
1529 | mDialogManager->setDocumentId( filename ); | 1529 | mDialogManager->setDocumentId( filename ); |
1530 | mTodoList->setDocumentId( filename ); | 1530 | mTodoList->setDocumentId( filename ); |
1531 | } | 1531 | } |
1532 | 1532 | ||
1533 | //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); | 1533 | //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); |
1534 | 1534 | ||
1535 | QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); | 1535 | QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); |
1536 | globalFlagBlockAgenda = 2; | 1536 | globalFlagBlockAgenda = 2; |
1537 | mCalendar->reInitAlarmSettings(); | 1537 | mCalendar->reInitAlarmSettings(); |
1538 | setSyncEventsReadOnly(); | 1538 | setSyncEventsReadOnly(); |
1539 | updateUnmanagedViews(); | 1539 | updateUnmanagedViews(); |
1540 | updateView(); | 1540 | updateView(); |
1541 | } | 1541 | } |
1542 | return false; | 1542 | return false; |
1543 | } | 1543 | } |
1544 | void CalendarView::showOpenError() | 1544 | void CalendarView::showOpenError() |
1545 | { | 1545 | { |
1546 | KMessageBox::error(this,i18n("Couldn't load calendar\n.")); | 1546 | KMessageBox::error(this,i18n("Couldn't load calendar\n.")); |
1547 | } | 1547 | } |
1548 | void CalendarView::setLoadedFileVersion(QDateTime dt) | 1548 | void CalendarView::setLoadedFileVersion(QDateTime dt) |
1549 | { | 1549 | { |
1550 | loadedFileVersion = dt; | 1550 | loadedFileVersion = dt; |
1551 | } | 1551 | } |
1552 | bool CalendarView::checkFileChanged(QString fn) | 1552 | bool CalendarView::checkFileChanged(QString fn) |
1553 | { | 1553 | { |
1554 | QFileInfo finf ( fn ); | 1554 | QFileInfo finf ( fn ); |
1555 | if ( !finf.exists() ) | 1555 | if ( !finf.exists() ) |
1556 | return true; | 1556 | return true; |
1557 | QDateTime dt = finf.lastModified (); | 1557 | QDateTime dt = finf.lastModified (); |
1558 | if ( dt <= loadedFileVersion ) | 1558 | if ( dt <= loadedFileVersion ) |
1559 | return false; | 1559 | return false; |
1560 | return true; | 1560 | return true; |
1561 | 1561 | ||
1562 | } | 1562 | } |
1563 | void CalendarView::watchSavedFile() | 1563 | void CalendarView::watchSavedFile() |
1564 | { | 1564 | { |
1565 | QFileInfo finf ( MainWindow::defaultFileName()); | 1565 | QFileInfo finf ( MainWindow::defaultFileName()); |
1566 | if ( !finf.exists() ) | 1566 | if ( !finf.exists() ) |
1567 | return; | 1567 | return; |
1568 | QDateTime dt = finf.lastModified (); | 1568 | QDateTime dt = finf.lastModified (); |
1569 | if ( dt < loadedFileVersion ) { | 1569 | if ( dt < loadedFileVersion ) { |
1570 | //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); | ||
1570 | QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); | 1571 | QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); |
1571 | return; | 1572 | return; |
1572 | } | 1573 | } |
1573 | loadedFileVersion = dt; | 1574 | loadedFileVersion = dt; |
1574 | } | 1575 | } |
1575 | 1576 | ||
1576 | bool CalendarView::checkFileVersion(QString fn) | 1577 | bool CalendarView::checkFileVersion(QString fn) |
1577 | { | 1578 | { |
1578 | QFileInfo finf ( fn ); | 1579 | QFileInfo finf ( fn ); |
1579 | if ( !finf.exists() ) | 1580 | if ( !finf.exists() ) |
1580 | return true; | 1581 | return true; |
1581 | QDateTime dt = finf.lastModified (); | 1582 | QDateTime dt = finf.lastModified (); |
1582 | //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); | 1583 | //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); |
1583 | //qDebug("file on disk version %s",dt.toString().latin1()); | 1584 | //qDebug("file on disk version %s",dt.toString().latin1()); |
1584 | if ( dt <= loadedFileVersion ) | 1585 | if ( dt <= loadedFileVersion ) |
1585 | return true; | 1586 | return true; |
1586 | int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , | 1587 | int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , |
1587 | i18n("KO/Pi Warning"),i18n("Overwrite"), | 1588 | i18n("KO/Pi Warning"),i18n("Overwrite"), |
1588 | i18n("Sync+save")); | 1589 | i18n("Sync+save")); |
1589 | 1590 | ||
1590 | if ( km == KMessageBox::Cancel ) | 1591 | if ( km == KMessageBox::Cancel ) |
1591 | return false; | 1592 | return false; |
1592 | if ( km == KMessageBox::Yes ) | 1593 | if ( km == KMessageBox::Yes ) |
1593 | return true; | 1594 | return true; |
1594 | 1595 | ||
1595 | setSyncDevice("deleteaftersync" ); | 1596 | setSyncDevice("deleteaftersync" ); |
1596 | KOPrefs::instance()->mAskForPreferences = true; | 1597 | KOPrefs::instance()->mAskForPreferences = true; |
1597 | KOPrefs::instance()->mSyncAlgoPrefs = 3; | 1598 | KOPrefs::instance()->mSyncAlgoPrefs = 3; |
1598 | KOPrefs::instance()->mWriteBackFile = false; | 1599 | KOPrefs::instance()->mWriteBackFile = false; |
1599 | KOPrefs::instance()->mWriteBackExistingOnly = false; | 1600 | KOPrefs::instance()->mWriteBackExistingOnly = false; |
1600 | KOPrefs::instance()->mShowSyncSummary = false; | 1601 | KOPrefs::instance()->mShowSyncSummary = false; |
1601 | syncCalendar( fn, 3 ); | 1602 | syncCalendar( fn, 3 ); |
1602 | Event * e = getLastSyncEvent(); | 1603 | Event * e = getLastSyncEvent(); |
1603 | mCalendar->deleteEvent ( e ); | 1604 | mCalendar->deleteEvent ( e ); |
1604 | updateView(); | 1605 | updateView(); |
1605 | return true; | 1606 | return true; |
1606 | } | 1607 | } |
1607 | 1608 | ||
1608 | bool CalendarView::saveCalendar( QString filename ) | 1609 | bool CalendarView::saveCalendar( QString filename ) |
1609 | { | 1610 | { |
1610 | 1611 | ||
1611 | // Store back all unsaved data into calendar object | 1612 | // Store back all unsaved data into calendar object |
1612 | // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); | 1613 | // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); |
1613 | if ( mViewManager->currentView() ) | 1614 | if ( mViewManager->currentView() ) |
1614 | mViewManager->currentView()->flushView(); | 1615 | mViewManager->currentView()->flushView(); |
1615 | 1616 | ||
1616 | //mStorage->setFileName( filename ); | 1617 | //mStorage->setFileName( filename ); |
1617 | 1618 | ||
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp index 4727a7a..309c699 100644 --- a/libkcal/vcalformat.cpp +++ b/libkcal/vcalformat.cpp | |||
@@ -1439,97 +1439,97 @@ QString VCalFormat::qDateToISO(const QDate &qd) | |||
1439 | qd.year(), qd.month(), qd.day()); | 1439 | qd.year(), qd.month(), qd.day()); |
1440 | return tmpStr; | 1440 | return tmpStr; |
1441 | 1441 | ||
1442 | } | 1442 | } |
1443 | 1443 | ||
1444 | QString VCalFormat::qDateTimeToISO(const QDateTime &qdt, bool zulu) | 1444 | QString VCalFormat::qDateTimeToISO(const QDateTime &qdt, bool zulu) |
1445 | { | 1445 | { |
1446 | QString tmpStr; | 1446 | QString tmpStr; |
1447 | 1447 | ||
1448 | ASSERT(qdt.date().isValid()); | 1448 | ASSERT(qdt.date().isValid()); |
1449 | ASSERT(qdt.time().isValid()); | 1449 | ASSERT(qdt.time().isValid()); |
1450 | if (zulu && !useLocalTime ) { | 1450 | if (zulu && !useLocalTime ) { |
1451 | QDateTime tmpDT = qdt.addSecs ( -KGlobal::locale()->localTimeOffset( qdt )*60); | 1451 | QDateTime tmpDT = qdt.addSecs ( -KGlobal::locale()->localTimeOffset( qdt )*60); |
1452 | tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2dZ", | 1452 | tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2dZ", |
1453 | tmpDT.date().year(), tmpDT.date().month(), | 1453 | tmpDT.date().year(), tmpDT.date().month(), |
1454 | tmpDT.date().day(), tmpDT.time().hour(), | 1454 | tmpDT.date().day(), tmpDT.time().hour(), |
1455 | tmpDT.time().minute(), tmpDT.time().second()); | 1455 | tmpDT.time().minute(), tmpDT.time().second()); |
1456 | } else { | 1456 | } else { |
1457 | tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2d", | 1457 | tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2d", |
1458 | qdt.date().year(), qdt.date().month(), | 1458 | qdt.date().year(), qdt.date().month(), |
1459 | qdt.date().day(), qdt.time().hour(), | 1459 | qdt.date().day(), qdt.time().hour(), |
1460 | qdt.time().minute(), qdt.time().second()); | 1460 | qdt.time().minute(), qdt.time().second()); |
1461 | } | 1461 | } |
1462 | return tmpStr; | 1462 | return tmpStr; |
1463 | } | 1463 | } |
1464 | 1464 | ||
1465 | QDateTime VCalFormat::ISOToQDateTime(const QString & dtStr) | 1465 | QDateTime VCalFormat::ISOToQDateTime(const QString & dtStr) |
1466 | { | 1466 | { |
1467 | QDate tmpDate; | 1467 | QDate tmpDate; |
1468 | QTime tmpTime; | 1468 | QTime tmpTime; |
1469 | QString tmpStr; | 1469 | QString tmpStr; |
1470 | int year, month, day, hour, minute, second; | 1470 | int year, month, day, hour, minute, second; |
1471 | 1471 | ||
1472 | tmpStr = dtStr; | 1472 | tmpStr = dtStr; |
1473 | year = tmpStr.left(4).toInt(); | 1473 | year = tmpStr.left(4).toInt(); |
1474 | month = tmpStr.mid(4,2).toInt(); | 1474 | month = tmpStr.mid(4,2).toInt(); |
1475 | day = tmpStr.mid(6,2).toInt(); | 1475 | day = tmpStr.mid(6,2).toInt(); |
1476 | hour = tmpStr.mid(9,2).toInt(); | 1476 | hour = tmpStr.mid(9,2).toInt(); |
1477 | minute = tmpStr.mid(11,2).toInt(); | 1477 | minute = tmpStr.mid(11,2).toInt(); |
1478 | second = tmpStr.mid(13,2).toInt(); | 1478 | second = tmpStr.mid(13,2).toInt(); |
1479 | tmpDate.setYMD(year, month, day); | 1479 | tmpDate.setYMD(year, month, day); |
1480 | tmpTime.setHMS(hour, minute, second); | 1480 | tmpTime.setHMS(hour, minute, second); |
1481 | 1481 | ||
1482 | ASSERT(tmpDate.isValid()); | 1482 | ASSERT(tmpDate.isValid()); |
1483 | ASSERT(tmpTime.isValid()); | 1483 | ASSERT(tmpTime.isValid()); |
1484 | QDateTime tmpDT(tmpDate, tmpTime); | 1484 | QDateTime tmpDT(tmpDate, tmpTime); |
1485 | // correct for GMT if string is in Zulu format | 1485 | // correct for GMT if string is in Zulu format |
1486 | if (dtStr.at(dtStr.length()-1) == 'Z') | 1486 | if (dtStr.at(dtStr.length()-1) == 'Z') |
1487 | tmpDT = tmpDT.addSecs(60*mCalendar->getTimeZone()); | 1487 | tmpDT = tmpDT.addSecs (KGlobal::locale()->localTimeOffset( tmpDT )*60); |
1488 | return tmpDT; | 1488 | return tmpDT; |
1489 | } | 1489 | } |
1490 | 1490 | ||
1491 | QDate VCalFormat::ISOToQDate(const QString &dateStr) | 1491 | QDate VCalFormat::ISOToQDate(const QString &dateStr) |
1492 | { | 1492 | { |
1493 | int year, month, day; | 1493 | int year, month, day; |
1494 | 1494 | ||
1495 | year = dateStr.left(4).toInt(); | 1495 | year = dateStr.left(4).toInt(); |
1496 | month = dateStr.mid(4,2).toInt(); | 1496 | month = dateStr.mid(4,2).toInt(); |
1497 | day = dateStr.mid(6,2).toInt(); | 1497 | day = dateStr.mid(6,2).toInt(); |
1498 | 1498 | ||
1499 | return(QDate(year, month, day)); | 1499 | return(QDate(year, month, day)); |
1500 | } | 1500 | } |
1501 | 1501 | ||
1502 | // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. | 1502 | // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. |
1503 | // and break it down from it's tree-like format into the dictionary format | 1503 | // and break it down from it's tree-like format into the dictionary format |
1504 | // that is used internally in the VCalFormat. | 1504 | // that is used internally in the VCalFormat. |
1505 | void VCalFormat::populate(VObject *vcal) | 1505 | void VCalFormat::populate(VObject *vcal) |
1506 | { | 1506 | { |
1507 | // this function will populate the caldict dictionary and other event | 1507 | // this function will populate the caldict dictionary and other event |
1508 | // lists. It turns vevents into Events and then inserts them. | 1508 | // lists. It turns vevents into Events and then inserts them. |
1509 | 1509 | ||
1510 | VObjectIterator i; | 1510 | VObjectIterator i; |
1511 | VObject *curVO, *curVOProp; | 1511 | VObject *curVO, *curVOProp; |
1512 | Event *anEvent; | 1512 | Event *anEvent; |
1513 | 1513 | ||
1514 | if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != 0) { | 1514 | if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != 0) { |
1515 | char *methodType = 0; | 1515 | char *methodType = 0; |
1516 | methodType = fakeCString(vObjectUStringZValue(curVO)); | 1516 | methodType = fakeCString(vObjectUStringZValue(curVO)); |
1517 | kdDebug() << "This calendar is an iTIP transaction of type '" | 1517 | kdDebug() << "This calendar is an iTIP transaction of type '" |
1518 | << methodType << "'" << endl; | 1518 | << methodType << "'" << endl; |
1519 | delete methodType; | 1519 | delete methodType; |
1520 | } | 1520 | } |
1521 | 1521 | ||
1522 | // warn the user that we might have trouble reading non-known calendar. | 1522 | // warn the user that we might have trouble reading non-known calendar. |
1523 | if ((curVO = isAPropertyOf(vcal, VCProdIdProp)) != 0) { | 1523 | if ((curVO = isAPropertyOf(vcal, VCProdIdProp)) != 0) { |
1524 | char *s = fakeCString(vObjectUStringZValue(curVO)); | 1524 | char *s = fakeCString(vObjectUStringZValue(curVO)); |
1525 | if (strcmp(productId().local8Bit(), s) != 0) | 1525 | if (strcmp(productId().local8Bit(), s) != 0) |
1526 | kdDebug() << "This vCalendar file was not created by KOrganizer " | 1526 | kdDebug() << "This vCalendar file was not created by KOrganizer " |
1527 | "or any other product we support. Loading anyway..." << endl; | 1527 | "or any other product we support. Loading anyway..." << endl; |
1528 | mLoadedProductId = s; | 1528 | mLoadedProductId = s; |
1529 | deleteStr(s); | 1529 | deleteStr(s); |
1530 | } | 1530 | } |
1531 | 1531 | ||
1532 | // warn the user we might have trouble reading this unknown version. | 1532 | // warn the user we might have trouble reading this unknown version. |
1533 | if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != 0) { | 1533 | if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != 0) { |
1534 | char *s = fakeCString(vObjectUStringZValue(curVO)); | 1534 | char *s = fakeCString(vObjectUStringZValue(curVO)); |
1535 | if (strcmp(_VCAL_VERSION, s) != 0) | 1535 | if (strcmp(_VCAL_VERSION, s) != 0) |