messagingfw/scheduledsendmtm/schedulesendmtm/src/tmsvschedulesettingsutils.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /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;
+		}
+	}