--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/tmsvschedulesettingsutils.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,420 @@
+// Copyright (c) 2004-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 <centralrepository.h>
+#include <s32mem.h>
+
+#include <tmsvschedulesettingsutils.h>
+#include <msvschedulesettings.h>
+#include <msvoffpeaktime.h>
+#include <msvsenderroraction.h>
+#include <msvsysagentaction.h>
+
+
+const TUint32 KIncrementSettingList = 0x00000010;
+const TInt KMaxVariableIntervals = 4096;
+const TInt KMaxSettingList = 256;
+const TInt KSysAgentActionsVersion = 1;
+const TInt KScheduleSettingsVersion = 1;
+const TInt KOffPeakTimesVersion = 1;
+const TInt KOffPeakTimeVersion = 1;
+const TInt KSendErrorActionVersion = 1;
+const TInt KSendErrorActionsVersion = 1;
+const TInt KSysAgentConditionActionVersion = 1;
+
+
+
+/**
+Saves Schedule Settings to the Central Repository.
+This function must be used within a CenRep Transaction.
+
+@param aScheduleSettings
+Schedule settings
+
+@param aRepository
+Repository to save settings to.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::SaveScheduleSettingsL(const CMsvScheduleSettings& aScheduleSettings, CRepository& aRepository)
+ {
+ aRepository.Set(EScheduleVersionId, KScheduleSettingsVersion);
+ aRepository.Set(ESchedulePriorityId, aScheduleSettings.Priority());
+ aRepository.Set(EScheduleValidityPeriodId, aScheduleSettings.ValidityPeriod().Int());
+ aRepository.Set(EScheduleIntervalTypeId, static_cast<TInt>(aScheduleSettings.IntervalType()));
+ aRepository.Set(EScheduleLatencyId, aScheduleSettings.Latency().Int());
+ aRepository.Set(EScheduleLongIntervalId, aScheduleSettings.LongInterval().Int());
+ aRepository.Set(EScheduleShortIntervalId, aScheduleSettings.ShortInterval().Int());
+ aRepository.Set(ESchedulePendingConditionsTimeoutId, aScheduleSettings.PendingConditionsTimeout().Int());
+
+ TInt count = aScheduleSettings.VariableIntervals().Count();
+ __ASSERT_ALWAYS(count<=KMaxVariableIntervals, User::Leave(KErrOverflow));
+ aRepository.Set(EScheduleVariableIntervalsCountId, count);
+
+ TUint32 variableIntervalId = EScheduleVariableIntervals;
+ for (TInt counter = 0; counter < count; ++counter)
+ {
+ aRepository.Set(variableIntervalId, aScheduleSettings.VariableIntervals().At(counter).Int());
+ ++variableIntervalId;
+ }
+ }
+
+/**
+Saves Off Peak Times to CenRep.
+This function must be used within a CenRep Transaction.
+
+@param aOffPeakTimes
+Off Peak Times
+
+@param aRepository
+Repository to save settings to.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::SaveOffPeakSettingsL(const CMsvOffPeakTimes& aOffPeakTimes, CRepository& aRepository)
+ {
+
+ aRepository.Set(EOffPeakTimesVersionId, KOffPeakTimesVersion);
+
+ TInt count = aOffPeakTimes.Count();
+ __ASSERT_ALWAYS(count<=KMaxSettingList, User::Leave(KErrOverflow));
+ aRepository.Set(EOffPeakTimesCountId, count);
+
+ TUint32 offPeakTimeId = EOffPeakTimes;
+ for(TInt curTime = 0; curTime < count; ++curTime)
+ {
+ aRepository.Set(offPeakTimeId + EOffPeakVersion, KOffPeakTimeVersion);
+ aRepository.Set(offPeakTimeId + EOffPeakDay, static_cast<TInt>(aOffPeakTimes.At(curTime).Day()));
+ aRepository.Set(offPeakTimeId + EOffPeakHour, aOffPeakTimes.At(curTime).Hour());
+ aRepository.Set(offPeakTimeId + EOffPeakMinute, aOffPeakTimes.At(curTime).Minute());
+ aRepository.Set(offPeakTimeId + EOffPeakValidityPeriod, aOffPeakTimes.At(curTime).ValidityPeriod().Int());
+
+ offPeakTimeId += KIncrementSettingList;
+ }
+ }
+
+/**
+Saves Send Error Action to CenRep.
+This function must be used within a CenRep Transaction.
+
+@param aErrorActionId
+CenRep Id
+
+@param aErrorAction
+Send Error Action
+
+@param aRepository
+Repository to save settings to.
+*/
+void TMsvScheduleSettingsUtils::SaveSendErrorActionL(TUint32 aErrorActionId, const TMsvSendErrorAction& aErrorAction, CRepository& aRepository)
+ {
+ aRepository.Set(aErrorActionId + ESendErrorVersion, KSendErrorActionVersion);
+ aRepository.Set(aErrorActionId + ESendErrorError, aErrorAction.iError);
+ aRepository.Set(aErrorActionId + ESendErrorMaxRetries, static_cast<TInt>(aErrorAction.MaxRetries()));
+ aRepository.Set(aErrorActionId + ESendErrorRetries, static_cast<TInt>(aErrorAction.iRetries));
+ aRepository.Set(aErrorActionId + ESendErrorAction, static_cast<TInt>(aErrorAction.iAction));
+ aRepository.Set(aErrorActionId + ESendErrorRetrySpacing, static_cast<TInt>(aErrorAction.iRetrySpacing));
+ }
+
+/**
+Saves Send Error Actions to CenRep.
+This function must be used within a CenRep Transaction.
+
+@param aErrorActions
+Send Error Actions
+
+@param aRepository
+Repository to save settings to.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::SaveSendErrorSettingsL(const CMsvSendErrorActions& aErrorActions, CRepository& aRepository)
+ {
+
+ aRepository.Set(ESendErrorActionsVersionId, KSendErrorActionsVersion);
+
+ // Default error actions
+ SaveSendErrorActionL(ESendErrorDefaultAction, aErrorActions.Default(), aRepository);
+
+ // List of error actions
+ TInt count = aErrorActions.Errors().Count();
+ __ASSERT_ALWAYS(count<=KMaxSettingList, User::Leave(KErrOverflow));
+ aRepository.Set(ESendErrorActionsCountId, count);
+
+ TUint32 errorActionId = ESendErrorActions;
+ for (TInt counter = 0; counter < count; ++counter)
+ {
+ SaveSendErrorActionL(errorActionId, aErrorActions.Errors().At(counter), aRepository);
+ errorActionId += KIncrementSettingList;
+ }
+ }
+
+/**
+Saves System Agent Actions to CenRep.
+This function must be used within a CenRep Transaction.
+
+@param aSysAgentActions
+System Agent Actions
+
+@param aRepository
+Repository to save settings to.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::SaveSysAgentSettingsL(const CMsvSysAgentActions& aSysAgentActions, CRepository& aRepository)
+ {
+
+ aRepository.Set(ESysAgentActionsVersionId, KSysAgentActionsVersion);
+
+ // Default send error actions
+ SaveSendErrorActionL(ESysAgentDefaultSendErrorAction, aSysAgentActions.iDefault, aRepository);
+
+ // Sys Agent Settings
+ TInt count = aSysAgentActions.Count();
+ __ASSERT_ALWAYS(count<=KMaxSettingList, User::Leave(KErrOverflow));
+ aRepository.Set(ESysAgentActionsCountId, count);
+
+ // Save a list of System Agent Actions and Send Error Actions
+ TUint32 sysAgentId = ESysAgentActions;
+ TUint32 errorActionId = ESysAgentSendErrorActions;
+ while (count--)
+ {
+ aRepository.Set(sysAgentId + ESysAgentVersion, KSysAgentConditionActionVersion);
+ aRepository.Set(sysAgentId + ESysAgentVariable, static_cast<TInt>(aSysAgentActions.At(count).iCondition.iVariable.iUid));
+ aRepository.Set(sysAgentId + ESysAgentState, aSysAgentActions.At(count).iCondition.iState);
+ aRepository.Set(sysAgentId + ESysAgentType, static_cast<TInt>(aSysAgentActions.At(count).iCondition.iType));
+ aRepository.Set(sysAgentId + ESysAgentDefault, aSysAgentActions.At(count).iUseDefaultSysAgentAction);
+ sysAgentId += KIncrementSettingList;
+
+ // Error actions
+ SaveSendErrorActionL(errorActionId, aSysAgentActions.At(count).iErrorAction, aRepository);
+ errorActionId += KIncrementSettingList;
+ }
+ }
+
+/**
+Loads Schedule Settings from CenRep.
+
+@param aScheduleSettings
+Schedule settings
+
+@param aRepository
+Repository to Load settings from.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::LoadScheduleSettingsL(CMsvScheduleSettings& aScheduleSettings, CRepository& aRepository)
+ {
+ aScheduleSettings.Reset();
+
+ TInt temp = 0;
+
+ User::LeaveIfError(aRepository.Get(ESchedulePriorityId, temp));
+ aScheduleSettings.SetPriority(temp);
+
+ User::LeaveIfError(aRepository.Get(EScheduleValidityPeriodId, temp));
+ aScheduleSettings.SetValidityPeriod(static_cast<TTimeIntervalMinutes>(temp));
+
+ User::LeaveIfError(aRepository.Get(EScheduleIntervalTypeId, temp));
+ aScheduleSettings.SetIntervalType(static_cast<TIntervalType>(temp));
+
+ User::LeaveIfError(aRepository.Get(EScheduleLatencyId, temp));
+ aScheduleSettings.SetLatency(static_cast<TTimeIntervalMicroSeconds32>(temp));
+
+ User::LeaveIfError(aRepository.Get(EScheduleLongIntervalId, temp));
+ aScheduleSettings.SetLongInterval(static_cast<TTimeIntervalSeconds>(temp));
+
+ User::LeaveIfError(aRepository.Get(EScheduleShortIntervalId, temp));
+ aScheduleSettings.SetShortInterval(static_cast<TTimeIntervalSeconds>(temp));
+
+ User::LeaveIfError(aRepository.Get(ESchedulePendingConditionsTimeoutId, temp));
+ aScheduleSettings.SetPendingConditionsTimeout(static_cast<TTimeIntervalMinutes>(temp));
+
+ User::LeaveIfError(aRepository.Get(EScheduleVariableIntervalsCountId, temp));
+ TInt count = temp;
+
+ if (count>0)
+ {
+ TUint32 variableIntervalId = EScheduleVariableIntervals;
+ CArrayFixFlat<TTimeIntervalSeconds>* intervals = new(ELeave)CArrayFixFlat<TTimeIntervalSeconds>(count);
+ CleanupStack::PushL(intervals);
+ for (TInt cur = 0; cur < count; ++cur)
+ {
+ User::LeaveIfError(aRepository.Get(variableIntervalId, temp));
+ intervals->AppendL(static_cast<TTimeIntervalSeconds>(temp));
+
+ ++variableIntervalId;
+ }
+
+ if (intervals->Count()>0)
+ {
+ aScheduleSettings.SetVariableIntervalsL(*intervals);
+ }
+ CleanupStack::PopAndDestroy(intervals);
+ }
+ }
+
+/**
+Loads Off Peak Times from CenRep.
+
+@param aOffPeakTimes
+Off Peak Times
+
+@param aRepository
+Repository to Load settings from.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::LoadOffPeakSettingsL(CMsvOffPeakTimes& aOffPeakTimes, CRepository& aRepository)
+ {
+ aOffPeakTimes.Reset();
+
+ TInt temp = 0;
+
+ User::LeaveIfError(aRepository.Get(EOffPeakTimesCountId, temp));
+ TInt count = temp;
+
+ TUint32 settingId = 0;
+ TUint32 offPeakTimeId = EOffPeakTimes;
+ TMsvOffPeakTime opTime;
+ for (TInt curTime = 0; curTime < count; ++curTime)
+ {
+ opTime.Reset();
+ settingId = offPeakTimeId + EOffPeakDay;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ opTime.SetDay(static_cast<TDay>(temp));
+
+ settingId = offPeakTimeId + EOffPeakHour;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ opTime.SetHour(temp);
+
+ settingId = offPeakTimeId + EOffPeakMinute;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ opTime.SetMinute(temp);
+
+ settingId = offPeakTimeId + EOffPeakValidityPeriod;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ opTime.SetValidityPeriod(static_cast<TTimeIntervalMinutes>(temp));
+
+ aOffPeakTimes.AppendL(opTime);
+ offPeakTimeId += KIncrementSettingList;
+ }
+ }
+
+/**
+Loads a Send Error Action from CenRep.
+
+@param aErrorActionId
+CenRep Id
+
+@param aErrorAction
+Send Error Action
+
+@param aRepository
+Repository to Load settings from.
+*/
+void TMsvScheduleSettingsUtils::LoadSendErrorActionL(TUint32 aErrorActionId, TMsvSendErrorAction& aErrorAction, CRepository& aRepository)
+ {
+ aErrorAction.Reset();
+
+ TInt temp = 0;
+ TUint32 settingId = aErrorActionId + ESendErrorError;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ aErrorAction.iError = temp;
+
+ settingId = aErrorActionId + ESendErrorMaxRetries;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ aErrorAction.SetMaxRetries(static_cast<TInt16>(temp));
+
+ settingId = aErrorActionId + ESendErrorRetries;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ aErrorAction.iRetries = static_cast<TMsvSendRetries>(temp);
+
+ settingId = aErrorActionId + ESendErrorAction;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ aErrorAction.iAction = static_cast<TMsvSendAction>(temp);
+
+ settingId = aErrorActionId + ESendErrorRetrySpacing;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ aErrorAction.iRetrySpacing = static_cast<TMsvSendRetrySpacing>(temp);
+ }
+
+/**
+Loads Send Error Actions from CenRep.
+
+@param aErrorActions
+Send Error Actions
+
+@param aRepository
+Repository to Load settings from.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::LoadSendErrorSettingsL(CMsvSendErrorActions& aErrorActions, CRepository& aRepository)
+ {
+ aErrorActions.Reset();
+
+ TInt temp = 0;
+
+ TMsvSendErrorAction action;
+ LoadSendErrorActionL(ESendErrorDefaultAction, action, aRepository);
+ aErrorActions.SetDefault(action);
+
+ User::LeaveIfError(aRepository.Get(ESendErrorActionsCountId, temp));
+ TInt count = temp;
+
+ TUint32 errorActionId = ESendErrorActions;
+ for (TInt counter = 0; counter < count; ++counter)
+ {
+ LoadSendErrorActionL(errorActionId, action, aRepository);
+ aErrorActions.AddSendErrorActionL(action);
+ errorActionId += KIncrementSettingList;
+ }
+ }
+
+/**
+Loads System Agent Actions from CenRep.
+
+@param aSysAgentActions
+System Agent Actions
+
+@param aRepository
+Repository to Load settings from.
+*/
+EXPORT_C void TMsvScheduleSettingsUtils::LoadSysAgentSettingsL(CMsvSysAgentActions& aSysAgentActions, CRepository& aRepository)
+ {
+ aSysAgentActions.Reset();
+
+ TInt temp = 0;
+
+ LoadSendErrorActionL(ESysAgentDefaultSendErrorAction, aSysAgentActions.iDefault, aRepository);
+
+ User::LeaveIfError(aRepository.Get(ESysAgentActionsCountId, temp));
+ TInt count = temp;
+
+ TUint32 settingId = 0;
+ TMsvSysAgentConditionAction condAction;
+ TUint32 sysAgentId = ESysAgentActions;
+ TUint32 errorActionId = ESysAgentSendErrorActions;
+ while (count--)
+ {
+ settingId = sysAgentId + ESysAgentVariable;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ condAction.iCondition.iVariable.iUid = temp;
+
+ settingId = sysAgentId + ESysAgentState;
+ User::LeaveIfError(aRepository.Get(settingId, condAction.iCondition.iState));
+
+ settingId = sysAgentId + ESysAgentType;
+ User::LeaveIfError(aRepository.Get(settingId, temp));
+ condAction.iCondition.iType = static_cast<TMsvCondition::TMsvSchSendConditionType>(temp);
+
+ settingId = sysAgentId + ESysAgentDefault;
+ User::LeaveIfError(aRepository.Get(settingId, condAction.iUseDefaultSysAgentAction));
+
+ // Error actions
+ LoadSendErrorActionL(errorActionId, condAction.iErrorAction, aRepository);
+
+ aSysAgentActions.AppendL(condAction);
+ sysAgentId += KIncrementSettingList;
+ errorActionId += KIncrementSettingList;
+ }
+ }