diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvOffPeakTime.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvOffPeakTime.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,327 @@ +// Copyright (c) 1999-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: +// + + +#include +#include +#include +#include +#include +#include + + +// +// +// Type Class TMsvOffPeakTime +// +// + +/** +Default constructor. +*/ + +EXPORT_C TMsvOffPeakTime::TMsvOffPeakTime() + { + Reset(); + } + + +/** +Constructor specifying off-peak time parameters. +Note that the offpeak start time must be specified in UTC (Universal Time Coordinated)time. + +@param aDay +Day start time. + +@param aHour +Hour start time. + +@param aMinute +Minute start time. + +@param aValidityPeriod +Duration (in minutes). +*/ + +EXPORT_C TMsvOffPeakTime::TMsvOffPeakTime(const TDay aDay, const TInt aHour, const TInt aMinute, const TTimeIntervalMinutes aValidityPeriod) + { + SetDay(aDay); + SetHour(aHour); + SetMinute(aMinute); + SetValidityPeriod(aValidityPeriod); + } + + +/** +Resets the object to default settings. +*/ + +EXPORT_C void TMsvOffPeakTime::Reset() + { + iHour = 0; + iMinute = 0; + iDay = EMonday; + iValidityPeriod = (TTimeIntervalMinutes) 0; + } + + +/* + Hour Access Functions +*/ + +/** +Gets the start time hour parameter. + +@return Start time hour parameter +*/ + +EXPORT_C TInt TMsvOffPeakTime::Hour() const + { + return iHour; + } + + +/** +Sets the start time hour parameter. +Note that the offpeak start time must be specified in UTC (Universal Time Coordinated)time. + +@param aHour +Start time hour parameter. + +@panic ScheduleSend-DLL 12 +The hour parameter is invalid (negative or more than 23). +*/ + +EXPORT_C void TMsvOffPeakTime::SetHour(const TInt aHour) + { + __ASSERT_ALWAYS((aHour >= 0) && (aHour < 24), gPanic(EInvalidHour)); + + iHour = (TInt8) aHour; + } + + +/* + Minute Access Functions +*/ + +/** +Gets the start time minute parameter. + +@return Start time minute parameter. +*/ + +EXPORT_C TInt TMsvOffPeakTime::Minute() const + { + return iMinute; + } + + +/** +Sets the start time minute parameter. +Note that the offpeak start time must be specified in UTC (Universal Time Coordinated)time. + +@param aMinute +Start time minute parameter. + +@panic ScheduleSend-DLL 13 +The minute parameter is invalid (negative or more than 59). +*/ + +EXPORT_C void TMsvOffPeakTime::SetMinute(const TInt aMinute) + { + __ASSERT_ALWAYS((aMinute >= 0) && (aMinute < 60), gPanic(EInvalidMinute)); + + iMinute = (TInt8) aMinute; + } + + +/* + Day Access Functions +*/ + +/** +Gets the start time day parameter. + +@return Start time day parameter. +*/ + +EXPORT_C TDay TMsvOffPeakTime::Day() const + { + return iDay; + } + + +/** +Sets the start time day parameter. +Note that the offpeak start time must be specified in UTC (Universal Time Coordinated)time. + +@param aDay +Start time day parameter. +*/ + +EXPORT_C void TMsvOffPeakTime::SetDay(const TDay aDay) + { + iDay = aDay; + } + + +/* + ValidityPeriod Access Functions +*/ + +/** +Gets the duration parameter. + +@return Duration parameter. +*/ + +EXPORT_C const TTimeIntervalMinutes TMsvOffPeakTime::ValidityPeriod() const + { + return iValidityPeriod; + } + + +/** +Sets the duration parameter. + +@param aValidityPeriod +Duration parameter. + +@panic ScheduleSend-DLL 10 +The duration period is invalid (negative or more than 24 hours). +*/ + +EXPORT_C void TMsvOffPeakTime::SetValidityPeriod(const TTimeIntervalMinutes aValidityPeriod) + { + __ASSERT_ALWAYS((aValidityPeriod.Int() >= 0) && (aValidityPeriod.Int() <= (24 * 60)), gPanic(EInvalidValidityPeriod)); + + iValidityPeriod = aValidityPeriod; + } + + + +/** +Gets the next time, after a specified time, when this off-peak time becomes +active. + +If aFromTime is within the validity period of this off-peak time, then the +next time will be less than or equal to aFromTime. + +@param aFromTime +Specified time. + +@return Next time +*/ + +EXPORT_C const TTime TMsvOffPeakTime::NextTimeInclusive(const TTime& aFromTime) const + { + TTime nextTime = aFromTime; + TDateTime from = nextTime.DateTime(); + + from.SetHour(iHour); + from.SetMinute(iMinute); + from.SetSecond(0); + from.SetMicroSecond(0); + + nextTime = TTime(from); + + while (nextTime.DayNoInWeek() != iDay || nextTime > aFromTime) + { + nextTime -= (TTimeIntervalDays) 1; + } + + TTimeIntervalMinutes mins; + aFromTime.MinutesFrom(nextTime, mins); + + __ASSERT_DEBUG(mins.Int() >= 0, gPanic(EProgrammingBug)); + + //mins must be greater than or equal to zero (0) because of the above while loop + if (mins.Int() < iValidityPeriod.Int()) //TO DO: Perhaps <= instead + { + return nextTime; + } + + while (nextTime < aFromTime) + { + nextTime += (TTimeIntervalDays) 7; + } + + return nextTime; + } + + +// +// +// Class CMsvOffPeakTimes +// +// + +/** +Default constructor. +*/ + +EXPORT_C CMsvOffPeakTimes::CMsvOffPeakTimes() + : CArrayFixFlat(1) + { + } + + +/** +Gets the off-peak time period that is after and closest to a specified time. + +If aFromTime is within an off-peak time period, then that off-peak time period +is returned. + +@param aFromTime +Time to find. + +@param aNext +On return, the off-peak time period that is closest to aFromTime. + +@param aNextTime +On return, the next start of aNext from aFromTime. + +@see TMsvOffPeakTime::NextTimeInclusive() for details. + +@return KErrNotFound The array does not contain any off-peak time periods. +*/ + +EXPORT_C TInt CMsvOffPeakTimes::GetNextOffPeakTime(const TTime& aFromTime, TMsvOffPeakTime& aNext, TTime& aNextTime) const + { + const TInt count = Count(); + + if (count < 1) + { + return KErrNotFound; + } + + aNext = At(0); + aNextTime = aNext.NextTimeInclusive(aFromTime); + + for (TInt curTime = 1; curTime < count; curTime++) + { + TMsvOffPeakTime time = At(curTime); + TTime tempTime = time.NextTimeInclusive(aFromTime); + + if (tempTime < aNextTime) + { + aNextTime = tempTime; + aNext = time; + } + } + + return KErrNone; + } +