--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/MsvOffPeakTime.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -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 <e32base.h>
+#include <e32std.h>
+#include <msvstd.h>
+#include <msventry.h>
+#include <msvoffpeaktime.h>
+#include <schsend_panic.h>
+
+
+//
+//
+// 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<TMsvOffPeakTime>(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;
+ }
+