summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-05 13:34:33 (UTC)
committer zautrix <zautrix>2004-10-05 13:34:33 (UTC)
commit191ced43b27c047b0a39f0acdc8ba1f8a58817df (patch) (unidiff)
treed164ae32c16259d9a8d5c9fdfa74f975d1f10075
parenta946c09db6f71f595d8bdcb6b34ba3160c5497dc (diff)
downloadkdepimpi-191ced43b27c047b0a39f0acdc8ba1f8a58817df.zip
kdepimpi-191ced43b27c047b0a39f0acdc8ba1f8a58817df.tar.gz
kdepimpi-191ced43b27c047b0a39f0acdc8ba1f8a58817df.tar.bz2
fix for filewatch and vcal timezone
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp3
-rw-r--r--libkcal/vcalformat.cpp2
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
@@ -1325,437 +1325,438 @@ void CalendarView::syncExternal( int mode )
1325 } 1325 }
1326 delete calendar; 1326 delete calendar;
1327 updateView(); 1327 updateView();
1328 return ;//syncOK; 1328 return ;//syncOK;
1329 1329
1330} 1330}
1331void CalendarView::syncSharp() 1331void CalendarView::syncSharp()
1332{ 1332{
1333 syncExternal( 0 ); 1333 syncExternal( 0 );
1334 1334
1335} 1335}
1336 1336
1337 1337
1338//#include <kabc/stdaddressbook.h> 1338//#include <kabc/stdaddressbook.h>
1339bool CalendarView::importBday() 1339bool CalendarView::importBday()
1340{ 1340{
1341#if 0 1341#if 0
1342 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1342 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1343 KABC::AddressBook::Iterator it; 1343 KABC::AddressBook::Iterator it;
1344 int count = 0; 1344 int count = 0;
1345 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1345 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1346 ++count; 1346 ++count;
1347 } 1347 }
1348 QProgressBar bar(count,0 ); 1348 QProgressBar bar(count,0 );
1349 int w = 300; 1349 int w = 300;
1350 if ( QApplication::desktop()->width() < 320 ) 1350 if ( QApplication::desktop()->width() < 320 )
1351 w = 220; 1351 w = 220;
1352 int h = bar.sizeHint().height() ; 1352 int h = bar.sizeHint().height() ;
1353 int dw = QApplication::desktop()->width(); 1353 int dw = QApplication::desktop()->width();
1354 int dh = QApplication::desktop()->height(); 1354 int dh = QApplication::desktop()->height();
1355 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1355 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1356 bar.show(); 1356 bar.show();
1357 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1357 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1358 qApp->processEvents(); 1358 qApp->processEvents();
1359 count = 0; 1359 count = 0;
1360 int addCount = 0; 1360 int addCount = 0;
1361 KCal::Attendee* a = 0; 1361 KCal::Attendee* a = 0;
1362 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1362 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1363 if ( ! bar.isVisible() ) 1363 if ( ! bar.isVisible() )
1364 return false; 1364 return false;
1365 bar.setProgress( count++ ); 1365 bar.setProgress( count++ );
1366 qApp->processEvents(); 1366 qApp->processEvents();
1367 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1367 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1368 if ( (*it).birthday().date().isValid() ){ 1368 if ( (*it).birthday().date().isValid() ){
1369 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1369 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1370 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1370 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1371 ++addCount; 1371 ++addCount;
1372 } 1372 }
1373 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1373 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1374 if ( anni.isValid() ){ 1374 if ( anni.isValid() ){
1375 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1375 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1376 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1376 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1377 ++addCount; 1377 ++addCount;
1378 } 1378 }
1379 } 1379 }
1380 updateView(); 1380 updateView();
1381 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1381 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1382#endif 1382#endif
1383 return true; 1383 return true;
1384} 1384}
1385 1385
1386bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1386bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1387{ 1387{
1388 //qDebug("addAnni "); 1388 //qDebug("addAnni ");
1389 Event * ev = new Event(); 1389 Event * ev = new Event();
1390 if ( a ) { 1390 if ( a ) {
1391 ev->addAttendee( a ); 1391 ev->addAttendee( a );
1392 } 1392 }
1393 QString kind; 1393 QString kind;
1394 if ( birthday ) 1394 if ( birthday )
1395 kind = i18n( "Birthday" ); 1395 kind = i18n( "Birthday" );
1396 else 1396 else
1397 kind = i18n( "Anniversary" ); 1397 kind = i18n( "Anniversary" );
1398 ev->setSummary( name + " - " + kind ); 1398 ev->setSummary( name + " - " + kind );
1399 ev->setOrganizer( "nobody@nowhere" ); 1399 ev->setOrganizer( "nobody@nowhere" );
1400 ev->setCategories( kind ); 1400 ev->setCategories( kind );
1401 ev->setDtStart( QDateTime(date) ); 1401 ev->setDtStart( QDateTime(date) );
1402 ev->setDtEnd( QDateTime(date) ); 1402 ev->setDtEnd( QDateTime(date) );
1403 ev->setFloats( true ); 1403 ev->setFloats( true );
1404 Recurrence * rec = ev->recurrence(); 1404 Recurrence * rec = ev->recurrence();
1405 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1405 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1406 rec->addYearlyNum( date.month() ); 1406 rec->addYearlyNum( date.month() );
1407 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1407 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1408 delete ev; 1408 delete ev;
1409 return false; 1409 return false;
1410 } 1410 }
1411 return true; 1411 return true;
1412 1412
1413} 1413}
1414bool CalendarView::importQtopia( const QString &categories, 1414bool CalendarView::importQtopia( const QString &categories,
1415 const QString &datebook, 1415 const QString &datebook,
1416 const QString &todolist ) 1416 const QString &todolist )
1417{ 1417{
1418 1418
1419 QtopiaFormat qtopiaFormat; 1419 QtopiaFormat qtopiaFormat;
1420 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1420 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1421 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1421 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1422 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1422 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1423 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1423 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1424 1424
1425 updateView(); 1425 updateView();
1426 return true; 1426 return true;
1427 1427
1428#if 0 1428#if 0
1429 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1429 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1430 mCurrentSyncDevice = "qtopia-XML"; 1430 mCurrentSyncDevice = "qtopia-XML";
1431 if ( KOPrefs::instance()->mAskForPreferences ) 1431 if ( KOPrefs::instance()->mAskForPreferences )
1432 edit_sync_options(); 1432 edit_sync_options();
1433 qApp->processEvents(); 1433 qApp->processEvents();
1434 CalendarLocal* calendar = new CalendarLocal(); 1434 CalendarLocal* calendar = new CalendarLocal();
1435 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1435 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1436 bool syncOK = false; 1436 bool syncOK = false;
1437 QtopiaFormat qtopiaFormat; 1437 QtopiaFormat qtopiaFormat;
1438 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1438 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1439 bool loadOk = true; 1439 bool loadOk = true;
1440 if ( !categories.isEmpty() ) 1440 if ( !categories.isEmpty() )
1441 loadOk = qtopiaFormat.load( calendar, categories ); 1441 loadOk = qtopiaFormat.load( calendar, categories );
1442 if ( loadOk && !datebook.isEmpty() ) 1442 if ( loadOk && !datebook.isEmpty() )
1443 loadOk = qtopiaFormat.load( calendar, datebook ); 1443 loadOk = qtopiaFormat.load( calendar, datebook );
1444 if ( loadOk && !todolist.isEmpty() ) 1444 if ( loadOk && !todolist.isEmpty() )
1445 loadOk = qtopiaFormat.load( calendar, todolist ); 1445 loadOk = qtopiaFormat.load( calendar, todolist );
1446 1446
1447 if ( loadOk ) { 1447 if ( loadOk ) {
1448 getEventViewerDialog()->setSyncMode( true ); 1448 getEventViewerDialog()->setSyncMode( true );
1449 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1449 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1450 getEventViewerDialog()->setSyncMode( false ); 1450 getEventViewerDialog()->setSyncMode( false );
1451 qApp->processEvents(); 1451 qApp->processEvents();
1452 if ( syncOK ) { 1452 if ( syncOK ) {
1453 if ( KOPrefs::instance()->mWriteBackFile ) 1453 if ( KOPrefs::instance()->mWriteBackFile )
1454 { 1454 {
1455 // write back XML file 1455 // write back XML file
1456 1456
1457 } 1457 }
1458 setModified( true ); 1458 setModified( true );
1459 } 1459 }
1460 } else { 1460 } else {
1461 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1461 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1462 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1462 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1463 question, i18n("Ok")) ; 1463 question, i18n("Ok")) ;
1464 } 1464 }
1465 delete calendar; 1465 delete calendar;
1466 updateView(); 1466 updateView();
1467 return syncOK; 1467 return syncOK;
1468 1468
1469 1469
1470#endif 1470#endif
1471 1471
1472} 1472}
1473 1473
1474void CalendarView::setSyncEventsReadOnly() 1474void 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}
1485bool CalendarView::openCalendar(QString filename, bool merge) 1485bool 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}
1544void CalendarView::showOpenError() 1544void 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}
1548void CalendarView::setLoadedFileVersion(QDateTime dt) 1548void CalendarView::setLoadedFileVersion(QDateTime dt)
1549{ 1549{
1550 loadedFileVersion = dt; 1550 loadedFileVersion = dt;
1551} 1551}
1552bool CalendarView::checkFileChanged(QString fn) 1552bool 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}
1563void CalendarView::watchSavedFile() 1563void 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
1576bool CalendarView::checkFileVersion(QString fn) 1577bool 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
1608bool CalendarView::saveCalendar( QString filename ) 1609bool 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
1618 mStorage->setSaveFormat( new ICalFormat() ); 1619 mStorage->setSaveFormat( new ICalFormat() );
1619 mStorage->setFileName( filename ); 1620 mStorage->setFileName( filename );
1620 bool success; 1621 bool success;
1621 success = mStorage->save(); 1622 success = mStorage->save();
1622 if ( !success ) { 1623 if ( !success ) {
1623 return false; 1624 return false;
1624 } 1625 }
1625 1626
1626 return true; 1627 return true;
1627} 1628}
1628 1629
1629void CalendarView::closeCalendar() 1630void CalendarView::closeCalendar()
1630{ 1631{
1631 1632
1632 // child windows no longer valid 1633 // child windows no longer valid
1633 emit closingDown(); 1634 emit closingDown();
1634 1635
1635 mCalendar->close(); 1636 mCalendar->close();
1636 setModified(false); 1637 setModified(false);
1637 updateView(); 1638 updateView();
1638} 1639}
1639 1640
1640void CalendarView::archiveCalendar() 1641void CalendarView::archiveCalendar()
1641{ 1642{
1642 mDialogManager->showArchiveDialog(); 1643 mDialogManager->showArchiveDialog();
1643} 1644}
1644 1645
1645 1646
1646void CalendarView::readSettings() 1647void CalendarView::readSettings()
1647{ 1648{
1648 1649
1649 1650
1650 // mViewManager->showAgendaView(); 1651 // mViewManager->showAgendaView();
1651 QString str; 1652 QString str;
1652 //qDebug("CalendarView::readSettings() "); 1653 //qDebug("CalendarView::readSettings() ");
1653 // read settings from the KConfig, supplying reasonable 1654 // read settings from the KConfig, supplying reasonable
1654 // defaults where none are to be found 1655 // defaults where none are to be found
1655 KConfig *config = KOGlobals::config(); 1656 KConfig *config = KOGlobals::config();
1656#ifndef KORG_NOSPLITTER 1657#ifndef KORG_NOSPLITTER
1657 config->setGroup("KOrganizer Geometry"); 1658 config->setGroup("KOrganizer Geometry");
1658 1659
1659 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1660 QValueList<int> sizes = config->readIntListEntry("Separator1");
1660 if (sizes.count() != 2) { 1661 if (sizes.count() != 2) {
1661 sizes << mDateNavigator->minimumSizeHint().width(); 1662 sizes << mDateNavigator->minimumSizeHint().width();
1662 sizes << 300; 1663 sizes << 300;
1663 } 1664 }
1664 mPanner->setSizes(sizes); 1665 mPanner->setSizes(sizes);
1665 1666
1666 sizes = config->readIntListEntry("Separator2"); 1667 sizes = config->readIntListEntry("Separator2");
1667 if ( ( mResourceView && sizes.count() == 4 ) || 1668 if ( ( mResourceView && sizes.count() == 4 ) ||
1668 ( !mResourceView && sizes.count() == 3 ) ) { 1669 ( !mResourceView && sizes.count() == 3 ) ) {
1669 mLeftSplitter->setSizes(sizes); 1670 mLeftSplitter->setSizes(sizes);
1670 } 1671 }
1671#endif 1672#endif
1672 globalFlagBlockAgenda = 1; 1673 globalFlagBlockAgenda = 1;
1673 mViewManager->showAgendaView(); 1674 mViewManager->showAgendaView();
1674 //mViewManager->readSettings( config ); 1675 //mViewManager->readSettings( config );
1675 mTodoList->restoreLayout(config,QString("Todo Layout")); 1676 mTodoList->restoreLayout(config,QString("Todo Layout"));
1676 readFilterSettings(config); 1677 readFilterSettings(config);
1677 config->setGroup( "Views" ); 1678 config->setGroup( "Views" );
1678 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1679 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1679 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1680 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1680 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1681 else if ( dateCount == 7 ) mNavigator->selectWeek();
1681 else mNavigator->selectDates( dateCount ); 1682 else mNavigator->selectDates( dateCount );
1682 // mViewManager->readSettings( config ); 1683 // mViewManager->readSettings( config );
1683 updateConfig(); 1684 updateConfig();
1684 globalFlagBlockAgenda = 2; 1685 globalFlagBlockAgenda = 2;
1685 mViewManager->readSettings( config ); 1686 mViewManager->readSettings( config );
1686#ifdef DESKTOP_VERSION 1687#ifdef DESKTOP_VERSION
1687 config->setGroup("WidgetLayout"); 1688 config->setGroup("WidgetLayout");
1688 QStringList list; 1689 QStringList list;
1689 list = config->readListEntry("MainLayout"); 1690 list = config->readListEntry("MainLayout");
1690 int x,y,w,h; 1691 int x,y,w,h;
1691 if ( ! list.isEmpty() ) { 1692 if ( ! list.isEmpty() ) {
1692 x = list[0].toInt(); 1693 x = list[0].toInt();
1693 y = list[1].toInt(); 1694 y = list[1].toInt();
1694 w = list[2].toInt(); 1695 w = list[2].toInt();
1695 h = list[3].toInt(); 1696 h = list[3].toInt();
1696 topLevelWidget()->setGeometry(x,y,w,h); 1697 topLevelWidget()->setGeometry(x,y,w,h);
1697 1698
1698 } else { 1699 } else {
1699 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1700 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1700 } 1701 }
1701 list = config->readListEntry("EditEventLayout"); 1702 list = config->readListEntry("EditEventLayout");
1702 if ( ! list.isEmpty() ) { 1703 if ( ! list.isEmpty() ) {
1703 x = list[0].toInt(); 1704 x = list[0].toInt();
1704 y = list[1].toInt(); 1705 y = list[1].toInt();
1705 w = list[2].toInt(); 1706 w = list[2].toInt();
1706 h = list[3].toInt(); 1707 h = list[3].toInt();
1707 mEventEditor->setGeometry(x,y,w,h); 1708 mEventEditor->setGeometry(x,y,w,h);
1708 1709
1709 } 1710 }
1710 list = config->readListEntry("EditTodoLayout"); 1711 list = config->readListEntry("EditTodoLayout");
1711 if ( ! list.isEmpty() ) { 1712 if ( ! list.isEmpty() ) {
1712 x = list[0].toInt(); 1713 x = list[0].toInt();
1713 y = list[1].toInt(); 1714 y = list[1].toInt();
1714 w = list[2].toInt(); 1715 w = list[2].toInt();
1715 h = list[3].toInt(); 1716 h = list[3].toInt();
1716 mTodoEditor->setGeometry(x,y,w,h); 1717 mTodoEditor->setGeometry(x,y,w,h);
1717 1718
1718 } 1719 }
1719 list = config->readListEntry("ViewerLayout"); 1720 list = config->readListEntry("ViewerLayout");
1720 if ( ! list.isEmpty() ) { 1721 if ( ! list.isEmpty() ) {
1721 x = list[0].toInt(); 1722 x = list[0].toInt();
1722 y = list[1].toInt(); 1723 y = list[1].toInt();
1723 w = list[2].toInt(); 1724 w = list[2].toInt();
1724 h = list[3].toInt(); 1725 h = list[3].toInt();
1725 getEventViewerDialog()->setGeometry(x,y,w,h); 1726 getEventViewerDialog()->setGeometry(x,y,w,h);
1726 } 1727 }
1727#endif 1728#endif
1728 1729
1729} 1730}
1730 1731
1731 1732
1732void CalendarView::writeSettings() 1733void CalendarView::writeSettings()
1733{ 1734{
1734 // kdDebug() << "CalendarView::writeSettings" << endl; 1735 // kdDebug() << "CalendarView::writeSettings" << endl;
1735 1736
1736 KConfig *config = KOGlobals::config(); 1737 KConfig *config = KOGlobals::config();
1737 1738
1738#ifndef KORG_NOSPLITTER 1739#ifndef KORG_NOSPLITTER
1739 config->setGroup("KOrganizer Geometry"); 1740 config->setGroup("KOrganizer Geometry");
1740 1741
1741 QValueList<int> list = mPanner->sizes(); 1742 QValueList<int> list = mPanner->sizes();
1742 config->writeEntry("Separator1",list); 1743 config->writeEntry("Separator1",list);
1743 1744
1744 list = mLeftSplitter->sizes(); 1745 list = mLeftSplitter->sizes();
1745 config->writeEntry("Separator2",list); 1746 config->writeEntry("Separator2",list);
1746#endif 1747#endif
1747 1748
1748 mViewManager->writeSettings( config ); 1749 mViewManager->writeSettings( config );
1749 mTodoList->saveLayout(config,QString("Todo Layout")); 1750 mTodoList->saveLayout(config,QString("Todo Layout"));
1750 mDialogManager->writeSettings( config ); 1751 mDialogManager->writeSettings( config );
1751 //KOPrefs::instance()->usrWriteConfig(); 1752 //KOPrefs::instance()->usrWriteConfig();
1752 KOPrefs::instance()->writeConfig(); 1753 KOPrefs::instance()->writeConfig();
1753 1754
1754 writeFilterSettings(config); 1755 writeFilterSettings(config);
1755 1756
1756 config->setGroup( "Views" ); 1757 config->setGroup( "Views" );
1757 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1758 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1758 1759
1759#ifdef DESKTOP_VERSION 1760#ifdef DESKTOP_VERSION
1760 config->setGroup("WidgetLayout"); 1761 config->setGroup("WidgetLayout");
1761 QStringList list ;//= config->readListEntry("MainLayout"); 1762 QStringList list ;//= config->readListEntry("MainLayout");
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp
index 4727a7a..309c699 100644
--- a/libkcal/vcalformat.cpp
+++ b/libkcal/vcalformat.cpp
@@ -1295,385 +1295,385 @@ Event* VCalFormat::VEventToEvent(VObject *vevent)
1295 if ((vo = isAPropertyOf(vevent, VCStatusProp)) != 0) { 1295 if ((vo = isAPropertyOf(vevent, VCStatusProp)) != 0) {
1296 QString tmpStr(s = fakeCString(vObjectUStringZValue(vo))); 1296 QString tmpStr(s = fakeCString(vObjectUStringZValue(vo)));
1297 deleteStr(s); 1297 deleteStr(s);
1298// TODO: Define Event status 1298// TODO: Define Event status
1299// anEvent->setStatus(tmpStr); 1299// anEvent->setStatus(tmpStr);
1300 } 1300 }
1301 else 1301 else
1302// anEvent->setStatus("NEEDS ACTION"); 1302// anEvent->setStatus("NEEDS ACTION");
1303#endif 1303#endif
1304 1304
1305 // secrecy 1305 // secrecy
1306 int secrecy = Incidence::SecrecyPublic; 1306 int secrecy = Incidence::SecrecyPublic;
1307 if ((vo = isAPropertyOf(vevent, VCClassProp)) != 0) { 1307 if ((vo = isAPropertyOf(vevent, VCClassProp)) != 0) {
1308 s = fakeCString(vObjectUStringZValue(vo)); 1308 s = fakeCString(vObjectUStringZValue(vo));
1309 if (strcmp(s,"PRIVATE") == 0) { 1309 if (strcmp(s,"PRIVATE") == 0) {
1310 secrecy = Incidence::SecrecyPrivate; 1310 secrecy = Incidence::SecrecyPrivate;
1311 } else if (strcmp(s,"CONFIDENTIAL") == 0) { 1311 } else if (strcmp(s,"CONFIDENTIAL") == 0) {
1312 secrecy = Incidence::SecrecyConfidential; 1312 secrecy = Incidence::SecrecyConfidential;
1313 } 1313 }
1314 deleteStr(s); 1314 deleteStr(s);
1315 } 1315 }
1316 anEvent->setSecrecy(secrecy); 1316 anEvent->setSecrecy(secrecy);
1317 1317
1318 // categories 1318 // categories
1319 QStringList tmpStrList; 1319 QStringList tmpStrList;
1320 int index1 = 0; 1320 int index1 = 0;
1321 int index2 = 0; 1321 int index2 = 0;
1322 if ((vo = isAPropertyOf(vevent, VCCategoriesProp)) != 0) { 1322 if ((vo = isAPropertyOf(vevent, VCCategoriesProp)) != 0) {
1323 s = fakeCString(vObjectUStringZValue(vo)); 1323 s = fakeCString(vObjectUStringZValue(vo));
1324 QString categories = QString::fromLocal8Bit(s); 1324 QString categories = QString::fromLocal8Bit(s);
1325 deleteStr(s); 1325 deleteStr(s);
1326 //const char* category; 1326 //const char* category;
1327 QString category; 1327 QString category;
1328 while ((index2 = categories.find(',', index1)) != -1) { 1328 while ((index2 = categories.find(',', index1)) != -1) {
1329 //category = (const char *) categories.mid(index1, (index2 - index1)); 1329 //category = (const char *) categories.mid(index1, (index2 - index1));
1330 category = categories.mid(index1, (index2 - index1)); 1330 category = categories.mid(index1, (index2 - index1));
1331 tmpStrList.append(category); 1331 tmpStrList.append(category);
1332 index1 = index2+1; 1332 index1 = index2+1;
1333 } 1333 }
1334 // get last category 1334 // get last category
1335 category = categories.mid(index1, (categories.length()-index1)); 1335 category = categories.mid(index1, (categories.length()-index1));
1336 tmpStrList.append(category); 1336 tmpStrList.append(category);
1337 anEvent->setCategories(tmpStrList); 1337 anEvent->setCategories(tmpStrList);
1338 } 1338 }
1339 1339
1340 // attachments 1340 // attachments
1341 tmpStrList.clear(); 1341 tmpStrList.clear();
1342 initPropIterator(&voi, vevent); 1342 initPropIterator(&voi, vevent);
1343 while (moreIteration(&voi)) { 1343 while (moreIteration(&voi)) {
1344 vo = nextVObject(&voi); 1344 vo = nextVObject(&voi);
1345 if (strcmp(vObjectName(vo), VCAttachProp) == 0) { 1345 if (strcmp(vObjectName(vo), VCAttachProp) == 0) {
1346 s = fakeCString(vObjectUStringZValue(vo)); 1346 s = fakeCString(vObjectUStringZValue(vo));
1347 anEvent->addAttachment(new Attachment(QString(s))); 1347 anEvent->addAttachment(new Attachment(QString(s)));
1348 deleteStr(s); 1348 deleteStr(s);
1349 } 1349 }
1350 } 1350 }
1351 1351
1352 // resources 1352 // resources
1353 if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != 0) { 1353 if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != 0) {
1354 QString resources = (s = fakeCString(vObjectUStringZValue(vo))); 1354 QString resources = (s = fakeCString(vObjectUStringZValue(vo)));
1355 deleteStr(s); 1355 deleteStr(s);
1356 tmpStrList.clear(); 1356 tmpStrList.clear();
1357 index1 = 0; 1357 index1 = 0;
1358 index2 = 0; 1358 index2 = 0;
1359 QString resource; 1359 QString resource;
1360 while ((index2 = resources.find(';', index1)) != -1) { 1360 while ((index2 = resources.find(';', index1)) != -1) {
1361 resource = resources.mid(index1, (index2 - index1)); 1361 resource = resources.mid(index1, (index2 - index1));
1362 tmpStrList.append(resource); 1362 tmpStrList.append(resource);
1363 index1 = index2; 1363 index1 = index2;
1364 } 1364 }
1365 anEvent->setResources(tmpStrList); 1365 anEvent->setResources(tmpStrList);
1366 } 1366 }
1367 1367
1368 /* alarm stuff */ 1368 /* alarm stuff */
1369 if ((vo = isAPropertyOf(vevent, VCDAlarmProp))) { 1369 if ((vo = isAPropertyOf(vevent, VCDAlarmProp))) {
1370 Alarm* alarm = anEvent->newAlarm(); 1370 Alarm* alarm = anEvent->newAlarm();
1371 VObject *a; 1371 VObject *a;
1372 if ((a = isAPropertyOf(vo, VCRunTimeProp))) { 1372 if ((a = isAPropertyOf(vo, VCRunTimeProp))) {
1373 alarm->setTime(ISOToQDateTime(s = fakeCString(vObjectUStringZValue(a)))); 1373 alarm->setTime(ISOToQDateTime(s = fakeCString(vObjectUStringZValue(a))));
1374 deleteStr(s); 1374 deleteStr(s);
1375 } 1375 }
1376 alarm->setEnabled(true); 1376 alarm->setEnabled(true);
1377 if ((vo = isAPropertyOf(vevent, VCPAlarmProp))) { 1377 if ((vo = isAPropertyOf(vevent, VCPAlarmProp))) {
1378 if ((a = isAPropertyOf(vo, VCProcedureNameProp))) { 1378 if ((a = isAPropertyOf(vo, VCProcedureNameProp))) {
1379 s = fakeCString(vObjectUStringZValue(a)); 1379 s = fakeCString(vObjectUStringZValue(a));
1380 alarm->setProcedureAlarm(QFile::decodeName(s)); 1380 alarm->setProcedureAlarm(QFile::decodeName(s));
1381 deleteStr(s); 1381 deleteStr(s);
1382 } 1382 }
1383 } 1383 }
1384 if ((vo = isAPropertyOf(vevent, VCAAlarmProp))) { 1384 if ((vo = isAPropertyOf(vevent, VCAAlarmProp))) {
1385 if ((a = isAPropertyOf(vo, VCAudioContentProp))) { 1385 if ((a = isAPropertyOf(vo, VCAudioContentProp))) {
1386 s = fakeCString(vObjectUStringZValue(a)); 1386 s = fakeCString(vObjectUStringZValue(a));
1387 alarm->setAudioAlarm(QFile::decodeName(s)); 1387 alarm->setAudioAlarm(QFile::decodeName(s));
1388 deleteStr(s); 1388 deleteStr(s);
1389 } 1389 }
1390 } 1390 }
1391 } 1391 }
1392 1392
1393 // priority 1393 // priority
1394 if ((vo = isAPropertyOf(vevent, VCPriorityProp))) { 1394 if ((vo = isAPropertyOf(vevent, VCPriorityProp))) {
1395 anEvent->setPriority(atoi(s = fakeCString(vObjectUStringZValue(vo)))); 1395 anEvent->setPriority(atoi(s = fakeCString(vObjectUStringZValue(vo))));
1396 deleteStr(s); 1396 deleteStr(s);
1397 } 1397 }
1398 1398
1399 // transparency 1399 // transparency
1400 if ((vo = isAPropertyOf(vevent, VCTranspProp)) != 0) { 1400 if ((vo = isAPropertyOf(vevent, VCTranspProp)) != 0) {
1401 int i = atoi(s = fakeCString(vObjectUStringZValue(vo))); 1401 int i = atoi(s = fakeCString(vObjectUStringZValue(vo)));
1402 anEvent->setTransparency( i == 1 ? Event::Transparent : Event::Opaque ); 1402 anEvent->setTransparency( i == 1 ? Event::Transparent : Event::Opaque );
1403 deleteStr(s); 1403 deleteStr(s);
1404 } 1404 }
1405 1405
1406 // related event 1406 // related event
1407 if ((vo = isAPropertyOf(vevent, VCRelatedToProp)) != 0) { 1407 if ((vo = isAPropertyOf(vevent, VCRelatedToProp)) != 0) {
1408 anEvent->setRelatedToUid(s = fakeCString(vObjectUStringZValue(vo))); 1408 anEvent->setRelatedToUid(s = fakeCString(vObjectUStringZValue(vo)));
1409 deleteStr(s); 1409 deleteStr(s);
1410 mEventsRelate.append(anEvent); 1410 mEventsRelate.append(anEvent);
1411 } 1411 }
1412 1412
1413 /* PILOT SYNC STUFF */ 1413 /* PILOT SYNC STUFF */
1414 if ((vo = isAPropertyOf(vevent, XPilotIdProp))) { 1414 if ((vo = isAPropertyOf(vevent, XPilotIdProp))) {
1415 anEvent->setPilotId(atoi(s = fakeCString(vObjectUStringZValue(vo)))); 1415 anEvent->setPilotId(atoi(s = fakeCString(vObjectUStringZValue(vo))));
1416 deleteStr(s); 1416 deleteStr(s);
1417 } 1417 }
1418 else 1418 else
1419 anEvent->setPilotId(0); 1419 anEvent->setPilotId(0);
1420 1420
1421 if ((vo = isAPropertyOf(vevent, XPilotStatusProp))) { 1421 if ((vo = isAPropertyOf(vevent, XPilotStatusProp))) {
1422 anEvent->setSyncStatus(atoi(s = fakeCString(vObjectUStringZValue(vo)))); 1422 anEvent->setSyncStatus(atoi(s = fakeCString(vObjectUStringZValue(vo))));
1423 deleteStr(s); 1423 deleteStr(s);
1424 } 1424 }
1425 else 1425 else
1426 anEvent->setSyncStatus(Event::SYNCMOD); 1426 anEvent->setSyncStatus(Event::SYNCMOD);
1427 1427
1428 return anEvent; 1428 return anEvent;
1429} 1429}
1430 1430
1431 1431
1432QString VCalFormat::qDateToISO(const QDate &qd) 1432QString VCalFormat::qDateToISO(const QDate &qd)
1433{ 1433{
1434 QString tmpStr; 1434 QString tmpStr;
1435 1435
1436 ASSERT(qd.isValid()); 1436 ASSERT(qd.isValid());
1437 1437
1438 tmpStr.sprintf("%.2d%.2d%.2d", 1438 tmpStr.sprintf("%.2d%.2d%.2d",
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
1444QString VCalFormat::qDateTimeToISO(const QDateTime &qdt, bool zulu) 1444QString 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
1465QDateTime VCalFormat::ISOToQDateTime(const QString & dtStr) 1465QDateTime 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
1491QDate VCalFormat::ISOToQDate(const QString &dateStr) 1491QDate 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.
1505void VCalFormat::populate(VObject *vcal) 1505void 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)
1536 kdDebug() << "This vCalendar file has version " << s 1536 kdDebug() << "This vCalendar file has version " << s
1537 << "We only support " << _VCAL_VERSION << endl; 1537 << "We only support " << _VCAL_VERSION << endl;
1538 deleteStr(s); 1538 deleteStr(s);
1539 } 1539 }
1540 1540
1541 // set the time zone 1541 // set the time zone
1542 if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != 0) { 1542 if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != 0) {
1543 char *s = fakeCString(vObjectUStringZValue(curVO)); 1543 char *s = fakeCString(vObjectUStringZValue(curVO));
1544 mCalendar->setTimeZone(s); 1544 mCalendar->setTimeZone(s);
1545 deleteStr(s); 1545 deleteStr(s);
1546 } 1546 }
1547 1547
1548 1548
1549 // Store all events with a relatedTo property in a list for post-processing 1549 // Store all events with a relatedTo property in a list for post-processing
1550 mEventsRelate.clear(); 1550 mEventsRelate.clear();
1551 mTodosRelate.clear(); 1551 mTodosRelate.clear();
1552 1552
1553 initPropIterator(&i, vcal); 1553 initPropIterator(&i, vcal);
1554 1554
1555 // go through all the vobjects in the vcal 1555 // go through all the vobjects in the vcal
1556 while (moreIteration(&i)) { 1556 while (moreIteration(&i)) {
1557 curVO = nextVObject(&i); 1557 curVO = nextVObject(&i);
1558 1558
1559 /************************************************************************/ 1559 /************************************************************************/
1560 1560
1561 // now, check to see that the object is an event or todo. 1561 // now, check to see that the object is an event or todo.
1562 if (strcmp(vObjectName(curVO), VCEventProp) == 0) { 1562 if (strcmp(vObjectName(curVO), VCEventProp) == 0) {
1563 1563
1564 if ((curVOProp = isAPropertyOf(curVO, XPilotStatusProp)) != 0) { 1564 if ((curVOProp = isAPropertyOf(curVO, XPilotStatusProp)) != 0) {
1565 char *s; 1565 char *s;
1566 s = fakeCString(vObjectUStringZValue(curVOProp)); 1566 s = fakeCString(vObjectUStringZValue(curVOProp));
1567 // check to see if event was deleted by the kpilot conduit 1567 // check to see if event was deleted by the kpilot conduit
1568 if (atoi(s) == Event::SYNCDEL) { 1568 if (atoi(s) == Event::SYNCDEL) {
1569 deleteStr(s); 1569 deleteStr(s);
1570 kdDebug(5800) << "skipping pilot-deleted event" << endl; 1570 kdDebug(5800) << "skipping pilot-deleted event" << endl;
1571 goto SKIP; 1571 goto SKIP;
1572 } 1572 }
1573 deleteStr(s); 1573 deleteStr(s);
1574 } 1574 }
1575 1575
1576 // this code checks to see if we are trying to read in an event 1576 // this code checks to see if we are trying to read in an event
1577 // that we already find to be in the calendar. If we find this 1577 // that we already find to be in the calendar. If we find this
1578 // to be the case, we skip the event. 1578 // to be the case, we skip the event.
1579 if ((curVOProp = isAPropertyOf(curVO, VCUniqueStringProp)) != 0) { 1579 if ((curVOProp = isAPropertyOf(curVO, VCUniqueStringProp)) != 0) {
1580 char *s = fakeCString(vObjectUStringZValue(curVOProp)); 1580 char *s = fakeCString(vObjectUStringZValue(curVOProp));
1581 QString tmpStr(s); 1581 QString tmpStr(s);
1582 deleteStr(s); 1582 deleteStr(s);
1583 1583
1584 if (mCalendar->event(tmpStr)) { 1584 if (mCalendar->event(tmpStr)) {
1585 goto SKIP; 1585 goto SKIP;
1586 } 1586 }
1587 if (mCalendar->todo(tmpStr)) { 1587 if (mCalendar->todo(tmpStr)) {
1588 goto SKIP; 1588 goto SKIP;
1589 } 1589 }
1590 } 1590 }
1591 1591
1592 if ((!(curVOProp = isAPropertyOf(curVO, VCDTstartProp))) && 1592 if ((!(curVOProp = isAPropertyOf(curVO, VCDTstartProp))) &&
1593 (!(curVOProp = isAPropertyOf(curVO, VCDTendProp)))) { 1593 (!(curVOProp = isAPropertyOf(curVO, VCDTendProp)))) {
1594 kdDebug(5800) << "found a VEvent with no DTSTART and no DTEND! Skipping..." << endl; 1594 kdDebug(5800) << "found a VEvent with no DTSTART and no DTEND! Skipping..." << endl;
1595 goto SKIP; 1595 goto SKIP;
1596 } 1596 }
1597 1597
1598 anEvent = VEventToEvent(curVO); 1598 anEvent = VEventToEvent(curVO);
1599 // we now use addEvent instead of insertEvent so that the 1599 // we now use addEvent instead of insertEvent so that the
1600 // signal/slot get connected. 1600 // signal/slot get connected.
1601 if (anEvent) { 1601 if (anEvent) {
1602 if ( !anEvent->dtStart().isValid() || !anEvent->dtEnd().isValid() ) { 1602 if ( !anEvent->dtStart().isValid() || !anEvent->dtEnd().isValid() ) {
1603 kdDebug() << "VCalFormat::populate(): Event has invalid dates." 1603 kdDebug() << "VCalFormat::populate(): Event has invalid dates."
1604 << endl; 1604 << endl;
1605 } else { 1605 } else {
1606 mCalendar->addEvent(anEvent); 1606 mCalendar->addEvent(anEvent);
1607 } 1607 }
1608 } else { 1608 } else {
1609 // some sort of error must have occurred while in translation. 1609 // some sort of error must have occurred while in translation.
1610 goto SKIP; 1610 goto SKIP;
1611 } 1611 }
1612 } else if (strcmp(vObjectName(curVO), VCTodoProp) == 0) { 1612 } else if (strcmp(vObjectName(curVO), VCTodoProp) == 0) {
1613 Todo *aTodo = VTodoToEvent(curVO); 1613 Todo *aTodo = VTodoToEvent(curVO);
1614 mCalendar->addTodo(aTodo); 1614 mCalendar->addTodo(aTodo);
1615 } else if ((strcmp(vObjectName(curVO), VCVersionProp) == 0) || 1615 } else if ((strcmp(vObjectName(curVO), VCVersionProp) == 0) ||
1616 (strcmp(vObjectName(curVO), VCProdIdProp) == 0) || 1616 (strcmp(vObjectName(curVO), VCProdIdProp) == 0) ||
1617 (strcmp(vObjectName(curVO), VCTimeZoneProp) == 0)) { 1617 (strcmp(vObjectName(curVO), VCTimeZoneProp) == 0)) {
1618 // do nothing, we know these properties and we want to skip them. 1618 // do nothing, we know these properties and we want to skip them.
1619 // we have either already processed them or are ignoring them. 1619 // we have either already processed them or are ignoring them.
1620 ; 1620 ;
1621 } else { 1621 } else {
1622 kdDebug(5800) << "Ignoring unknown vObject \"" << vObjectName(curVO) << "\"" << endl; 1622 kdDebug(5800) << "Ignoring unknown vObject \"" << vObjectName(curVO) << "\"" << endl;
1623 } 1623 }
1624 SKIP: 1624 SKIP:
1625 ; 1625 ;
1626 } // while 1626 } // while
1627 1627
1628 // Post-Process list of events with relations, put Event objects in relation 1628 // Post-Process list of events with relations, put Event objects in relation
1629 Event *ev; 1629 Event *ev;
1630 for ( ev=mEventsRelate.first(); ev != 0; ev=mEventsRelate.next() ) { 1630 for ( ev=mEventsRelate.first(); ev != 0; ev=mEventsRelate.next() ) {
1631 ev->setRelatedTo(mCalendar->event(ev->relatedToUid())); 1631 ev->setRelatedTo(mCalendar->event(ev->relatedToUid()));
1632 } 1632 }
1633 Todo *todo; 1633 Todo *todo;
1634 for ( todo=mTodosRelate.first(); todo != 0; todo=mTodosRelate.next() ) { 1634 for ( todo=mTodosRelate.first(); todo != 0; todo=mTodosRelate.next() ) {
1635 todo->setRelatedTo(mCalendar->todo(todo->relatedToUid())); 1635 todo->setRelatedTo(mCalendar->todo(todo->relatedToUid()));
1636 } 1636 }
1637} 1637}
1638 1638
1639const char *VCalFormat::dayFromNum(int day) 1639const char *VCalFormat::dayFromNum(int day)
1640{ 1640{
1641 const char *days[7] = { "MO ", "TU ", "WE ", "TH ", "FR ", "SA ", "SU " }; 1641 const char *days[7] = { "MO ", "TU ", "WE ", "TH ", "FR ", "SA ", "SU " };
1642 1642
1643 return days[day]; 1643 return days[day];
1644} 1644}
1645 1645
1646int VCalFormat::numFromDay(const QString &day) 1646int VCalFormat::numFromDay(const QString &day)
1647{ 1647{
1648 if (day == "MO ") return 0; 1648 if (day == "MO ") return 0;
1649 if (day == "TU ") return 1; 1649 if (day == "TU ") return 1;
1650 if (day == "WE ") return 2; 1650 if (day == "WE ") return 2;
1651 if (day == "TH ") return 3; 1651 if (day == "TH ") return 3;
1652 if (day == "FR ") return 4; 1652 if (day == "FR ") return 4;
1653 if (day == "SA ") return 5; 1653 if (day == "SA ") return 5;
1654 if (day == "SU ") return 6; 1654 if (day == "SU ") return 6;
1655 1655
1656 return -1; // something bad happened. :) 1656 return -1; // something bad happened. :)
1657} 1657}
1658 1658
1659Attendee::PartStat VCalFormat::readStatus(const char *s) const 1659Attendee::PartStat VCalFormat::readStatus(const char *s) const
1660{ 1660{
1661 QString statStr = s; 1661 QString statStr = s;
1662 statStr = statStr.upper(); 1662 statStr = statStr.upper();
1663 Attendee::PartStat status; 1663 Attendee::PartStat status;
1664 1664
1665 if (statStr == "X-ACTION") 1665 if (statStr == "X-ACTION")
1666 status = Attendee::NeedsAction; 1666 status = Attendee::NeedsAction;
1667 else if (statStr == "NEEDS ACTION") 1667 else if (statStr == "NEEDS ACTION")
1668 status = Attendee::NeedsAction; 1668 status = Attendee::NeedsAction;
1669 else if (statStr== "ACCEPTED") 1669 else if (statStr== "ACCEPTED")
1670 status = Attendee::Accepted; 1670 status = Attendee::Accepted;
1671 else if (statStr== "SENT") 1671 else if (statStr== "SENT")
1672 status = Attendee::NeedsAction; 1672 status = Attendee::NeedsAction;
1673 else if (statStr== "TENTATIVE") 1673 else if (statStr== "TENTATIVE")
1674 status = Attendee::Tentative; 1674 status = Attendee::Tentative;
1675 else if (statStr== "CONFIRMED") 1675 else if (statStr== "CONFIRMED")
1676 status = Attendee::Accepted; 1676 status = Attendee::Accepted;
1677 else if (statStr== "DECLINED") 1677 else if (statStr== "DECLINED")
1678 status = Attendee::Declined; 1678 status = Attendee::Declined;
1679 else if (statStr== "COMPLETED") 1679 else if (statStr== "COMPLETED")