diff -r 000000000000 -r 8e480a14352b messagingfw/scheduledsendmtm/schedulesendmtm/src/tmsvschedulesettingsutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/tmsvschedulesettingsutils.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -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 +#include + +#include +#include +#include +#include +#include + + +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(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(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(aErrorAction.MaxRetries())); + aRepository.Set(aErrorActionId + ESendErrorRetries, static_cast(aErrorAction.iRetries)); + aRepository.Set(aErrorActionId + ESendErrorAction, static_cast(aErrorAction.iAction)); + aRepository.Set(aErrorActionId + ESendErrorRetrySpacing, static_cast(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(aSysAgentActions.At(count).iCondition.iVariable.iUid)); + aRepository.Set(sysAgentId + ESysAgentState, aSysAgentActions.At(count).iCondition.iState); + aRepository.Set(sysAgentId + ESysAgentType, static_cast(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(temp)); + + User::LeaveIfError(aRepository.Get(EScheduleIntervalTypeId, temp)); + aScheduleSettings.SetIntervalType(static_cast(temp)); + + User::LeaveIfError(aRepository.Get(EScheduleLatencyId, temp)); + aScheduleSettings.SetLatency(static_cast(temp)); + + User::LeaveIfError(aRepository.Get(EScheduleLongIntervalId, temp)); + aScheduleSettings.SetLongInterval(static_cast(temp)); + + User::LeaveIfError(aRepository.Get(EScheduleShortIntervalId, temp)); + aScheduleSettings.SetShortInterval(static_cast(temp)); + + User::LeaveIfError(aRepository.Get(ESchedulePendingConditionsTimeoutId, temp)); + aScheduleSettings.SetPendingConditionsTimeout(static_cast(temp)); + + User::LeaveIfError(aRepository.Get(EScheduleVariableIntervalsCountId, temp)); + TInt count = temp; + + if (count>0) + { + TUint32 variableIntervalId = EScheduleVariableIntervals; + CArrayFixFlat* intervals = new(ELeave)CArrayFixFlat(count); + CleanupStack::PushL(intervals); + for (TInt cur = 0; cur < count; ++cur) + { + User::LeaveIfError(aRepository.Get(variableIntervalId, temp)); + intervals->AppendL(static_cast(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(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(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(temp)); + + settingId = aErrorActionId + ESendErrorRetries; + User::LeaveIfError(aRepository.Get(settingId, temp)); + aErrorAction.iRetries = static_cast(temp); + + settingId = aErrorActionId + ESendErrorAction; + User::LeaveIfError(aRepository.Get(settingId, temp)); + aErrorAction.iAction = static_cast(temp); + + settingId = aErrorActionId + ESendErrorRetrySpacing; + User::LeaveIfError(aRepository.Get(settingId, temp)); + aErrorAction.iRetrySpacing = static_cast(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(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; + } + }