diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mricalviewer/src/cesmrinforecurrencehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mricalviewer/src/cesmrinforecurrencehandler.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,472 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: ESMR mrinfo recurrence handler implementation +* +*/ + +#include "emailtrace.h" +#include "cesmrinforecurrencehandler.h" +#include "tesmrinputparams.h" +#include "esmrconfig.hrh" + +// +#include "mmrinfoobject.h" +#include "mmrrecurrencerule.h" +#include "esmrdef.h" +// +#include +#include + +// Unnamed namespace for local definitions +namespace { + +/** + * Converts MRINFO day into Symbian date. + * @param aDay MRINFO day + * @return Symbian date + */ +TDay MRInfoDay( MRRecurrenceRule::TMRRecurrentDay aDay ) + { + TDay day( EMonday ); + + switch( aDay ) + { + case MRRecurrenceRule::EMRRecurrenceMonday: + { + day = EMonday; + break; + } + case MRRecurrenceRule::EMRRecurrenceTuesday: + { + day = ETuesday; + break; + } + case MRRecurrenceRule::EMRRecurrenceWednesday: + { + day = EWednesday; + break; + } + case MRRecurrenceRule::EMRRecurrenceThursday: + { + day = EThursday; + break; + } + case MRRecurrenceRule::EMRRecurrenceFriday: + { + day = EFriday; + break; + } + case MRRecurrenceRule::EMRRecurrenceSaturday: + { + day = ESaturday; + break; + } + case MRRecurrenceRule::EMRRecurrenceSunday: + { + day = ESunday; + break; + } + default: + break; + } + + return day; + } + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::CESMRInfoRecurrenceHandler +// --------------------------------------------------------------------------- +// +inline CESMRInfoRecurrenceHandler::CESMRInfoRecurrenceHandler() + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::~CESMRInfoRecurrenceHandler +// --------------------------------------------------------------------------- +// +CESMRInfoRecurrenceHandler::~CESMRInfoRecurrenceHandler() + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::NewL +// --------------------------------------------------------------------------- +// +CESMRInfoRecurrenceHandler* CESMRInfoRecurrenceHandler::NewL() + { + FUNC_LOG; + CESMRInfoRecurrenceHandler* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::NewLC +// --------------------------------------------------------------------------- +// +CESMRInfoRecurrenceHandler* CESMRInfoRecurrenceHandler::NewLC() + { + FUNC_LOG; + CESMRInfoRecurrenceHandler* self = + new (ELeave) CESMRInfoRecurrenceHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::ConstructL() + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::ParseRecurrenceInforationL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::ParseRecurrenceInforationL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject ) + { + FUNC_LOG; + + TTime until; + + aCalEntry.ClearRepeatingPropertiesL(); + GetRecurrenceL( + aCalEntry, + aInfoObject ); + + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::GetRecurrenceL +// +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::GetRecurrenceL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject) + { + FUNC_LOG; + + const MRRecurrenceRule& recurrenceRule = + aInfoObject.RecurrenceRuleL(); + + MRRecurrenceRule::TMRRecurrenceType rType( + recurrenceRule.Type() ); + + if ( MRRecurrenceRule::EMRRecurrenceInvalid != rType ) + { + switch ( rType ) + { + case MRRecurrenceRule::EMRRecurrenceDaily: + { + HandleDailyRecurrenceL( + aCalEntry, + aInfoObject ); + } + break; + + case MRRecurrenceRule::EMRRecurrenceWeekly: + { + HandleWeeklyRecurrenceL( + aCalEntry, + aInfoObject ); + } + break; + + case MRRecurrenceRule::EMRRecurrenceMonthly://fallthrough + case MRRecurrenceRule::EMRRecurrenceMonthlyByDay: + { + HandleMonthlyRecurrenceL( + aCalEntry, + aInfoObject ); + } + break; + + case MRRecurrenceRule::EMRRecurrenceYearly: + { + HandleYearlyRecurrenceL( + aCalEntry, + aInfoObject ); + } + break; + default: + break; + } + } + + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::HandleDailyRecurrenceL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::HandleDailyRecurrenceL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject ) + { + FUNC_LOG; + const MRRecurrenceRule& recurrenceRule = + aInfoObject.RecurrenceRuleL(); + + TCalRRule rRule; + rRule.SetType( TCalRRule::EDaily ); + + TCalTime meetingStartTime = aCalEntry.StartTimeL(); + rRule.SetDtStart( meetingStartTime ); + + + TTime until( recurrenceRule.RecurrentUntil() ); + if ( Time::NullTTime() != until ) + { + TDateTime untilDt = until.DateTime(); + + TDateTime endTime = + aCalEntry.EndTimeL().TimeLocalL().DateTime(); + untilDt.SetHour( endTime.Hour() ); + untilDt.SetMinute( endTime.Minute() ); + untilDt.SetSecond( endTime.Second() ); + + TCalTime rEndTime; + rEndTime.SetTimeLocalL( TTime(untilDt) ); + + rRule.SetUntil( rEndTime ); + } + else + { + TInt interval( recurrenceRule.RecurrentInterval() ); + TInt count( recurrenceRule.RecurrentCount() ); + + rRule.SetCount( count ); + rRule.SetInterval( interval ); + } + + aCalEntry.SetRRuleL( rRule ); + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::HandleWeeklyRecurrenceL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::HandleWeeklyRecurrenceL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject ) + { + FUNC_LOG; + const MRRecurrenceRule& recurrenceRule = + aInfoObject.RecurrenceRuleL(); + + TCalRRule rRule; + rRule.SetType( TCalRRule::EWeekly ); + TCalTime meetingStartTime = aCalEntry.StartTimeL(); + rRule.SetDtStart( meetingStartTime ); + TInt interval( recurrenceRule.RecurrentInterval() ); + + TTime until( recurrenceRule.RecurrentUntil() ); + if ( Time::NullTTime() != until ) + { + TDateTime untilDt = until.DateTime(); + + TDateTime endTime = + aCalEntry.EndTimeL().TimeLocalL().DateTime(); + untilDt.SetHour( endTime.Hour() ); + untilDt.SetMinute( endTime.Minute() ); + untilDt.SetSecond( endTime.Second() ); + + TCalTime rEndTime; + rEndTime.SetTimeLocalL( TTime(untilDt) ); + + rRule.SetUntil( rEndTime ); + + rRule.SetInterval( interval ); + } + else + { + TInt count( recurrenceRule.RecurrentCount() ); + + rRule.SetCount( count ); + rRule.SetInterval( interval ); + + } + const RArray& + recurrenceDays( + recurrenceRule.RecurrentWeekDays() ); + + if ( recurrenceDays.Count() ) + { + RArray dDays; + CleanupClosePushL( dDays ); + for ( TInt i(0); i < recurrenceDays.Count(); ++i ) + { + dDays.Append( MRInfoDay( recurrenceDays[i] ) ); + } + + rRule.SetByDay( dDays ); + CleanupStack::PopAndDestroy( &dDays ); + } + + aCalEntry.SetRRuleL( rRule ); + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::HandleMonthlyRecurrenceL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::HandleMonthlyRecurrenceL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject ) + { + FUNC_LOG; + const MRRecurrenceRule& recurrenceRule = + aInfoObject.RecurrenceRuleL(); + + TCalRRule rRule; + rRule.SetType( TCalRRule::EMonthly ); + TCalTime meetingStartTime = aCalEntry.StartTimeL(); + rRule.SetDtStart( meetingStartTime ); + + TInt interval( recurrenceRule.RecurrentInterval() ); + + TTime until( recurrenceRule.RecurrentUntil() ); + if ( Time::NullTTime() != until ) + { + TDateTime untilDt = until.DateTime(); + + TDateTime endTime = + aCalEntry.EndTimeL().TimeLocalL().DateTime(); + untilDt.SetHour( endTime.Hour() ); + untilDt.SetMinute( endTime.Minute() ); + untilDt.SetSecond( endTime.Second() ); + + TCalTime rEndTime; + rEndTime.SetTimeLocalL( TTime(untilDt) ); + + rRule.SetUntil( rEndTime ); + } + else + { + TInt count( recurrenceRule.RecurrentCount() ); + rRule.SetCount( count ); + rRule.SetInterval( interval ); + } + + const RArray& + recurrenceDays( + recurrenceRule.RecurrentDaysofMonth() ); + + const RArray& recurrenceDaysInMonth( + recurrenceRule.RecurrentMonthDays() ); + + if ( recurrenceDays.Count() ) + { + RArray dDays; + CleanupClosePushL( dDays ); + for ( TInt i(0); i < recurrenceDays.Count(); ++i ) + { + TCalRRule::TDayOfMonth dayOfMonth( + MRInfoDay( recurrenceDays[i].iDayOfWeek ), + static_cast( recurrenceDays[i].iWeekOfMonth ) ); + } + + rRule.SetByDay( dDays ); + CleanupStack::PopAndDestroy( &dDays ); + } + else if ( recurrenceDaysInMonth.Count() ) + { + rRule.SetByMonthDay( recurrenceDaysInMonth ); + } + + aCalEntry.SetRRuleL( rRule ); + } + +// --------------------------------------------------------------------------- +// CESMRInfoRecurrenceHandler::HandleYearlyRecurrenceL +// --------------------------------------------------------------------------- +// +void CESMRInfoRecurrenceHandler::HandleYearlyRecurrenceL( + CCalEntry& aCalEntry, + const MMRInfoObject& aInfoObject ) + { + FUNC_LOG; + const MRRecurrenceRule& recurrenceRule = + aInfoObject.RecurrenceRuleL(); + + TCalRRule rRule; + rRule.SetType( TCalRRule::EYearly ); + TCalTime meetingStartTime = aCalEntry.StartTimeL(); + rRule.SetDtStart( meetingStartTime ); + + TInt interval( recurrenceRule.RecurrentInterval() ); + + TTime until( recurrenceRule.RecurrentUntil() ); + if ( Time::NullTTime() != until ) + { + TDateTime untilDt = until.DateTime(); + + TDateTime endTime = + aCalEntry.EndTimeL().TimeLocalL().DateTime(); + untilDt.SetHour( endTime.Hour() ); + untilDt.SetMinute( endTime.Minute() ); + untilDt.SetSecond( endTime.Second() ); + + TCalTime rEndTime; + rEndTime.SetTimeLocalL( TTime(untilDt) ); + + rRule.SetUntil( rEndTime ); + } + else + { + TInt count( recurrenceRule.RecurrentCount() ); + rRule.SetCount( count ); + } + + const RArray& + recurrenceMonths( + recurrenceRule.RecurrentMonths() ); + + TInt recurrenceMonthCount( recurrenceMonths.Count() ); + if ( recurrenceMonthCount ) + { + RArray months; + CleanupClosePushL( months ); + for ( TInt i(0); i < recurrenceMonthCount; ++i ) + { + months.Append( + static_cast(recurrenceMonths[i]) ); + } + + rRule.SetByMonth( months ); + CleanupStack::PopAndDestroy( &months ); + } + + aCalEntry.SetRRuleL( rRule ); + } + +// EOF +