-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | 63 | ||||
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.h | 2 |
2 files changed, 43 insertions, 22 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp index 107c178..0f99d50 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | |||
@@ -90,3 +90,3 @@ namespace { | |||
90 | OPimRecurrence* rec; | 90 | OPimRecurrence* rec; |
91 | OPimRecurrence* recur() { | 91 | static OPimRecurrence* recur() { |
92 | if (!rec) | 92 | if (!rec) |
@@ -123,3 +123,3 @@ namespace { | |||
123 | // FIXME: Use OPimEvent::toMap() here !! (eilers) | 123 | // FIXME: Use OPimEvent::toMap() here !! (eilers) |
124 | inline void save( const OPimEvent& ev, QString& buf ) { | 124 | static void save( const OPimEvent& ev, QString& buf ) { |
125 | owarn << "Saving " << ev.uid() << " " << ev.description() << "" << oendl; | 125 | owarn << "Saving " << ev.uid() << " " << ev.description() << "" << oendl; |
@@ -129,3 +129,5 @@ namespace { | |||
129 | 129 | ||
130 | if (!ev.categories().isEmpty() ) | ||
130 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; | 131 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; |
132 | |||
131 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; | 133 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; |
@@ -154,5 +156,5 @@ namespace { | |||
154 | */ | 156 | */ |
155 | OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() ); | 157 | OPimTimeZone zone( (ev.timeZone().isEmpty()||ev.isAllDay()) ? OPimTimeZone::utc() : OPimTimeZone::current() ); |
156 | buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OPimTimeZone::utc() ) ) ) + "\""; | 158 | buf += " start=\"" + QString::number( zone.fromDateTime( ev.startDateTime())) + "\""; |
157 | buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OPimTimeZone::utc() ) ) ) + "\""; | 159 | buf += " end=\"" + QString::number( zone.fromDateTime( ev.endDateTime() )) + "\""; |
158 | if (!ev.note().isEmpty() ) { | 160 | if (!ev.note().isEmpty() ) { |
@@ -161,2 +163,8 @@ namespace { | |||
161 | 163 | ||
164 | /* | ||
165 | * Don't save a timezone if AllDay Events | ||
166 | * as they're UTC only anyway | ||
167 | */ | ||
168 | if (!ev.isAllDay() ) { | ||
169 | |||
162 | buf += " timezone=\""; | 170 | buf += " timezone=\""; |
@@ -167,2 +175,3 @@ namespace { | |||
167 | buf += "\""; | 175 | buf += "\""; |
176 | } | ||
168 | 177 | ||
@@ -185,3 +194,3 @@ namespace { | |||
185 | 194 | ||
186 | inline bool forAll( const QMap<int, OPimEvent>& list, QFile& file ) { | 195 | static bool saveEachEvent( const QMap<int, OPimEvent>& list, QFile& file ) { |
187 | QMap<int, OPimEvent>::ConstIterator it; | 196 | QMap<int, OPimEvent>::ConstIterator it; |
@@ -240,3 +249,3 @@ bool ODateBookAccessBackend_XML::save() { | |||
240 | 249 | ||
241 | if (!forAll( m_raw, f ) ) { | 250 | if (!saveEachEvent( m_raw, f ) ) { |
242 | f.close(); | 251 | f.close(); |
@@ -245,3 +254,3 @@ bool ODateBookAccessBackend_XML::save() { | |||
245 | } | 254 | } |
246 | if (!forAll( m_rep, f ) ) { | 255 | if (!saveEachEvent( m_rep, f ) ) { |
247 | f.close(); | 256 | f.close(); |
@@ -408,2 +417,6 @@ bool ODateBookAccessBackend_XML::loadFile() { | |||
408 | 417 | ||
418 | |||
419 | // initialiaze db hack | ||
420 | m_noTimeZone = true; | ||
421 | |||
409 | char* dt = (char*)map_addr; | 422 | char* dt = (char*)map_addr; |
@@ -481,2 +494,3 @@ bool ODateBookAccessBackend_XML::loadFile() { | |||
481 | delete rec; | 494 | delete rec; |
495 | m_noTimeZone = true; | ||
482 | } | 496 | } |
@@ -490,2 +504,12 @@ bool ODateBookAccessBackend_XML::loadFile() { | |||
490 | void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { | 504 | void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { |
505 | |||
506 | /* | ||
507 | * quirk to import datebook files. They normally don't have a | ||
508 | * timeZone attribute and we treat this as to use OPimTimeZone::current() | ||
509 | */ | ||
510 | if (m_noTimeZone ) | ||
511 | ev.setTimeZone( OPimTimeZone::current().timeZone() ); | ||
512 | |||
513 | |||
514 | |||
491 | /* AllDay is alway in UTC */ | 515 | /* AllDay is alway in UTC */ |
@@ -493,15 +517,10 @@ void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { | |||
493 | OPimTimeZone utc = OPimTimeZone::utc(); | 517 | OPimTimeZone utc = OPimTimeZone::utc(); |
494 | ev.setStartDateTime( utc.fromUTCDateTime( start ) ); | 518 | ev.setStartDateTime( utc.toDateTime( start ) ); |
495 | ev.setEndDateTime ( utc.fromUTCDateTime( end ) ); | 519 | ev.setEndDateTime ( utc.toDateTime( end ) ); |
496 | ev.setTimeZone( "UTC"); // make sure it is really utc | ||
497 | }else { | 520 | }else { |
498 | /* to current date time */ | 521 | /* to current date time */ |
499 | // owarn << " Start is " << start << "" << oendl; | 522 | OPimTimeZone to_zone( ev.timeZone().isEmpty() ? OPimTimeZone::utc() : OPimTimeZone::current() ); |
500 | OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() ); | ||
501 | QDateTime date = zone.toDateTime( start ); | ||
502 | owarn << " Start is " << date.toString() << "" << oendl; | ||
503 | ev.setStartDateTime( zone.toDateTime( date, OPimTimeZone::current() ) ); | ||
504 | 523 | ||
505 | date = zone.toDateTime( end ); | 524 | ev.setStartDateTime(to_zone.toDateTime( start)); |
506 | ev.setEndDateTime ( zone.toDateTime( date, OPimTimeZone::current() ) ); | 525 | ev.setEndDateTime (to_zone.toDateTime( end)); |
507 | } | 526 | } |
@@ -510,4 +529,4 @@ void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { | |||
510 | OPimRecurrence recu( *rec ); // call copy c'tor; | 529 | OPimRecurrence recu( *rec ); // call copy c'tor; |
511 | recu.setEndDate ( utc.fromUTCDateTime( rp_end ).date() ); | 530 | recu.setEndDate ( utc.toDateTime( rp_end ).date() ); |
512 | recu.setCreatedDateTime( utc.fromUTCDateTime( created ) ); | 531 | recu.setCreatedDateTime( utc.toDateTime( created ) ); |
513 | recu.setStart( ev.startDateTime().date() ); | 532 | recu.setStart( ev.startDateTime().date() ); |
@@ -525,3 +544,3 @@ void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { | |||
525 | } | 544 | } |
526 | owarn << "addind " << ev.uid() << " " << ev.description() << "" << oendl; | 545 | |
527 | if ( ev.hasRecurrence() ) | 546 | if ( ev.hasRecurrence() ) |
@@ -550,3 +569,2 @@ void ODateBookAccessBackend_XML::setField( OPimEvent& e, int id, const QString& | |||
550 | e.setAllDay( true ); | 569 | e.setAllDay( true ); |
551 | e.setTimeZone( "UTC" ); | ||
552 | } | 570 | } |
@@ -624,2 +642,3 @@ void ODateBookAccessBackend_XML::setField( OPimEvent& e, int id, const QString& | |||
624 | case FTimeZone: | 642 | case FTimeZone: |
643 | m_noTimeZone = false; | ||
625 | if ( value != "None" ) | 644 | if ( value != "None" ) |
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.h b/libopie2/opiepim/backend/odatebookaccessbackend_xml.h index 6823ce6..af5b114 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.h +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.h | |||
@@ -70,2 +70,4 @@ private: | |||
70 | bool m_changed :1 ; | 70 | bool m_changed :1 ; |
71 | bool m_noTimeZone : 1; | ||
72 | |||
71 | bool loadFile(); | 73 | bool loadFile(); |