From 52b1ae9281920cf5a40fe543112d8b00e7699ef6 Mon Sep 17 00:00:00 2001 From: zecke Date: Thu, 29 Jul 2004 19:42:59 +0000 Subject: -UTC -> Europe/London when referring to no timezone -special handling for allDay Event in OPImEvent, avoid setting timezone as it is by default UTC -No timezone set by default for an Event -Recurrence is UTC (no timezone) -Provide upgrade path from DateBook as by default events were in the current timezone but didn't have the timezone attribute -unified handling of timezones, compatible with QtopiaDesktop -do less conversions -... --- (limited to 'libopie2/opiepim/core') diff --git a/libopie2/opiepim/core/opimevent.cpp b/libopie2/opiepim/core/opimevent.cpp index 8752fce..739cb6f 100644 --- a/libopie2/opiepim/core/opimevent.cpp +++ b/libopie2/opiepim/core/opimevent.cpp @@ -296,8 +296,10 @@ QDateTime OPimEvent::endDateTime() const * if all Day event the end time needs * to be on the same day as the start */ - if ( data->isAllDay ) - return QDateTime( data->start.date(), QTime( 23, 59, 59 ) ); + if ( data->isAllDay ) { + QDate end = data->end.isValid() ? data->end.date() : data->start.date() ; + return QDateTime( end, QTime( 23, 59, 59 ) ); + } return data->end; } @@ -335,7 +337,6 @@ void OPimEvent::setAllDay( bool allDay ) { changeOrModify(); data->isAllDay = allDay; - if ( allDay ) data->timezone = "UTC"; } @@ -348,7 +349,7 @@ void OPimEvent::setTimeZone( const QString& tz ) QString OPimEvent::timeZone() const { - if ( data->isAllDay ) return QString::fromLatin1( "UTC" ); + if ( data->isAllDay ) return QString::fromLatin1( "Europe/London" ); return data->timezone; } @@ -564,9 +565,10 @@ QMap OPimEvent::toMap() const retMap.insert( OPimEvent::FSound, ( alarm.sound() == OPimAlarm::Loud ) ? "loud" : "silent" ); } - OPimTimeZone zone( timeZone().isEmpty() ? OPimTimeZone::current() : timeZone() ); - retMap.insert( OPimEvent::FStart, QString::number( zone.fromUTCDateTime( zone.toDateTime( startDateTime(), OPimTimeZone::utc() ) ) ) ); - retMap.insert( OPimEvent::FEnd, QString::number( zone.fromUTCDateTime( zone.toDateTime( endDateTime(), OPimTimeZone::utc() ) ) ) ); + /* either use UTC timeZone or current() if there is was a timezone set */ + OPimTimeZone zone( (timeZone().isEmpty()||isAllDay()) ? OPimTimeZone::utc() : OPimTimeZone::current() ); + retMap.insert( OPimEvent::FStart, QString::number( zone.fromDateTime( startDateTime()))); + retMap.insert( OPimEvent::FEnd, QString::number( zone.fromDateTime( endDateTime() ))); retMap.insert( OPimEvent::FNote, Qtopia::escapeString( note() ) ); retMap.insert( OPimEvent::FTimeZone, timeZone().isEmpty() ? QString( "None" ) : timeZone() ); if ( parent() ) @@ -630,27 +632,21 @@ void OPimEvent::fromMap( const QMap& map ) } time_t start = ( time_t ) map[ OPimEvent::FStart ].toLong(); - time_t end = ( time_t ) map[ OPimEvent::FEnd ].toLong(); + time_t end = ( time_t ) map[ OPimEvent::FEnd ].toLong(); /* AllDay is always in UTC */ if ( isAllDay() ) { OPimTimeZone utc = OPimTimeZone::utc(); - setStartDateTime( utc.fromUTCDateTime( start ) ); - setEndDateTime ( utc.fromUTCDateTime( end ) ); - setTimeZone( "UTC" ); // make sure it is really utc + setStartDateTime(utc.toDateTime( start ) ); + setEndDateTime ( utc.toDateTime( end ) ); } - else - { + else { /* to current date time */ - // owarn << " Start is " << start << "" << oendl; - OPimTimeZone zone( timeZone().isEmpty() ? OPimTimeZone::current() : timeZone() ); - QDateTime date = zone.toDateTime( start ); - owarn << " Start is " << date.toString() << "" << oendl; - setStartDateTime( zone.toDateTime( date, OPimTimeZone::current() ) ); - - date = zone.toDateTime( end ); - setEndDateTime ( zone.toDateTime( date, OPimTimeZone::current() ) ); + OPimTimeZone to_zone( ev.timeZone().isEmpty() ? OPimTimeZone::utc() : OPimTimeZone::current() ); + + ev.setStartDateTime(to_zone.toDateTime( start)); + ev.setEndDateTime (to_zone.toDateTime( end)); } int alarmTime = -1; diff --git a/libopie2/opiepim/core/opimrecurrence.cpp b/libopie2/opiepim/core/opimrecurrence.cpp index 4b1d886..c3ae350 100644 --- a/libopie2/opiepim/core/opimrecurrence.cpp +++ b/libopie2/opiepim/core/opimrecurrence.cpp @@ -632,16 +632,16 @@ QMap OPimRecurrence::rTypeValueConvertMap() QMap OPimRecurrence::toMap() const { QMap retMap; - + retMap.insert( OPimRecurrence::RType, rTypeString() ); retMap.insert( OPimRecurrence::RWeekdays, QString::number( static_cast( data->days ) ) ); retMap.insert( OPimRecurrence::RPosition, QString::number(data->pos ) ); retMap.insert( OPimRecurrence::RFreq, QString::number( data->freq ) ); retMap.insert( OPimRecurrence::RHasEndDate, QString::number( static_cast( data->hasEnd ) ) ); if( data -> hasEnd ) - retMap.insert( OPimRecurrence::EndDate, QString::number( OPimTimeZone::utc().fromUTCDateTime( QDateTime( data->end, QTime(12,0,0) ) ) ) ); - retMap.insert( OPimRecurrence::Created, QString::number( OPimTimeZone::utc().fromUTCDateTime( data->create ) ) ); - + retMap.insert( OPimRecurrence::EndDate, QString::number( OPimTimeZone::current().fromUTCDateTime( QDateTime( data->end, QTime(12,0,0) ) ) ) ); + retMap.insert( OPimRecurrence::Created, QString::number( OPimTimeZone::current().fromUTCDateTime( data->create ) ) ); + if ( data->list.isEmpty() ) return retMap; // save exceptions list here!! @@ -652,7 +652,7 @@ QMap OPimRecurrence::toMap() const for ( it = list.begin(); it != list.end(); ++it ) { date = (*it); if ( it != list.begin() ) exceptBuf += " "; - + exceptBuf += QCString().sprintf("%04d%02d%02d", date.year(), date.month(), date.day() ); } @@ -663,18 +663,18 @@ QMap OPimRecurrence::toMap() const void OPimRecurrence::fromMap( const QMap& map ) { - QMap repTypeMap = rTypeValueConvertMap(); + QMap repTypeMap = rTypeValueConvertMap(); data -> type = repTypeMap[ map [OPimRecurrence::RType] ]; data -> days = (char) map[ OPimRecurrence::RWeekdays ].toInt(); data -> pos = map[ OPimRecurrence::RPosition ].toInt(); data -> freq = map[ OPimRecurrence::RFreq ].toInt(); data -> hasEnd= map[ OPimRecurrence::RHasEndDate ].toInt() ? true : false; - OPimTimeZone utc = OPimTimeZone::utc(); + OPimTimeZone cur = OPimTimeZone::current(); if ( data -> hasEnd ){ - data -> end = utc.fromUTCDateTime( (time_t) map[ OPimRecurrence::EndDate ].toLong() ).date(); + data -> end = cur.fromUTCDateTime( (time_t) map[ OPimRecurrence::EndDate ].toLong() ).date(); } - data -> create = utc.fromUTCDateTime( (time_t) map[ OPimRecurrence::Created ].toLong() ).date(); + data -> create = cur.fromUTCDateTime( (time_t) map[ OPimRecurrence::Created ].toLong() ).date(); #if 0 // FIXME: Exceptions currently not supported... @@ -684,8 +684,8 @@ void OPimRecurrence::fromMap( const QMap& map ) QStringList exceptList = QStringList::split( " ", exceptStr ); ... #endif - - + + } } diff --git a/libopie2/opiepim/core/opimtimezone.cpp b/libopie2/opiepim/core/opimtimezone.cpp index fefceb5..5b32b1f 100644 --- a/libopie2/opiepim/core/opimtimezone.cpp +++ b/libopie2/opiepim/core/opimtimezone.cpp @@ -48,6 +48,7 @@ QDateTime utcTime( time_t t ) ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); return ret; } + QDateTime utcTime( time_t t, const QString& zone ) { QCString org = ::getenv( "TZ" ); @@ -70,6 +71,8 @@ QDateTime utcTime( time_t t, const QString& zone ) return ret; } + + time_t to_Time_t( const QDateTime& utc, const QString& str ) { QDate d = utc.date(); @@ -151,9 +154,8 @@ QDateTime OPimTimeZone::toDateTime( time_t t ) */ QDateTime OPimTimeZone::toDateTime( const QDateTime& dt, const OPimTimeZone& zone ) { - time_t utc = to_Time_t( dt, zone.m_name ); - owarn << "" << utc << " " << zone.m_name << "" << oendl; - return utcTime( utc, m_name ); + time_t utc = to_Time_t( dt, m_name ); + return utcTime( utc, zone.m_name ); } @@ -165,7 +167,7 @@ time_t OPimTimeZone::fromDateTime( const QDateTime& time ) time_t OPimTimeZone::fromUTCDateTime( const QDateTime& time ) { - return to_Time_t( time, "UTC" ); + return to_Time_t( time, "Europe/London" ); } @@ -179,7 +181,7 @@ OPimTimeZone OPimTimeZone::current() OPimTimeZone OPimTimeZone::utc() { - return OPimTimeZone( "UTC" ); + return OPimTimeZone( "Europe/London" ); } -- cgit v0.9.0.2