diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/clientmtm/src/csmsaccount.cpp --- a/messagingappbase/smsmtm/clientmtm/src/csmsaccount.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,450 +0,0 @@ -// 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 -#include - -#include "SMUTSET.H" -#include -#include - -#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) - #include -#endif - -const TUint32 KIncrementSC = 0x00000010; -const TInt KMaxSettingLength = 256; -const TInt KMaxServiceCenterId = 256; -const TInt KSmsSettingsVersion = 1; -const TInt KSmsMessageSettingsVersion = 1; - - -/** -Allocates and constructs an SMS account object. - -Initialises all member data to their default values. - -@return -The newly constructed SMS account object. -*/ -EXPORT_C CSmsAccount* CSmsAccount::NewL() - { - CSmsAccount* self = CSmsAccount::NewLC(); - CleanupStack::Pop(self); - return self; - } - -/** -Allocates and constructs an SMS account object. - -Initialises all member data to their default values. - -@return -The newly constructed SMS account object. -*/ -EXPORT_C CSmsAccount* CSmsAccount::NewLC() - { - CSmsAccount* self = new (ELeave) CSmsAccount(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -/** -Second phase construction. -*/ -void CSmsAccount::ConstructL() - { - iRepository = CRepository::NewL(KUidMsgTypeSMS); - } - -/** -Constructor. -*/ -CSmsAccount::CSmsAccount() - { - } - -/** -Destructor. -*/ -EXPORT_C CSmsAccount::~CSmsAccount() - { - delete iRepository; - delete iMsvSession; - } - -/** -Initialises the SMS settings in CenRep: - -1. Creates a SMS service entry in the message store - -2. Resets the settings in CenRep to their default values - -3. Populates aSmsSettings with default settings - -@param aSmsSettings -SMS service settings -*/ -EXPORT_C void CSmsAccount::InitialiseDefaultSettingsL(CSmsSettings& aSmsSettings) - { - ResetSettings(); - CreateSmsServiceL(); - LoadSettingsL(aSmsSettings); - } - -/** -Initialises the SMS settings in CenRep: - -1. Creates a SMS service entry in the message store - -2. Resets the settings in CenRep to their default values - -3. Populates the supplied objects with default settings - -@param aScheduleSettings -Schedule settings - -@param aOffPeakTimes -Off Peak Times - -@param aErrorActions -Send Error Actions - -@param aSysAgentActions -System Agent Actions -*/ -EXPORT_C void CSmsAccount::InitialiseDefaultSettingsL(CMsvScheduleSettings& aScheduleSettings, CMsvOffPeakTimes& aOffPeakTimes, CMsvSendErrorActions& aErrorActions, CMsvSysAgentActions& aSysAgentActions) - { - ResetSettings(); - CreateSmsServiceL(); - LoadSettingsL(aScheduleSettings, aOffPeakTimes, aErrorActions, aSysAgentActions); - } - -/** -Creates SMS service entry in the message store -*/ -TMsvId CSmsAccount::CreateSmsServiceL() - { -#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) - CreateHeaderStoreL(); -#endif - - TMsvId serviceEntryId = KMsvNullIndexEntryId; - CMsvEntry* root = SessionL().GetEntryL(KMsvRootIndexEntryId); - CleanupStack::PushL(root); - - TRAPD(error, TSmsUtilities::ServiceIdL(*root, serviceEntryId)); - if (error == KErrNotFound) - { - TBuf accountName; - User::LeaveIfError(iRepository->Get(ESmsAccountNameId, accountName)); - - TMsvEntry entry; - entry.iMtm = KUidMsgTypeSMS; - entry.iType = KUidMsvServiceEntry; - entry.SetReadOnly(EFalse); - entry.SetVisible(EFalse); - entry.iDate.UniversalTime(); - entry.iDetails.Set(accountName); - root->SetEntryL(KMsvRootIndexEntryId); - root->CreateL(entry); - serviceEntryId = entry.Id(); - } - else - { - User::LeaveIfError(error); - } - - CleanupStack::PopAndDestroy(root); - - User::LeaveIfError(iRepository->Set(ESmsServiceId, static_cast(serviceEntryId))); - return serviceEntryId; - } - -/** -Resets the settings in CenRep to their default values. -*/ -void CSmsAccount::ResetSettings() - { - iRepository->Reset(); - } - -/** -Loads SMS Service settings from CenRep: - -@param aSmsSettings -Sms service settings -*/ -EXPORT_C void CSmsAccount::LoadSettingsL(CSmsSettings& aSmsSettings) - { - TInt temp = 0; - - //Load SMS Message Settings - User::LeaveIfError(iRepository->Get(ESmsValidityPeriodId, temp)); - aSmsSettings.SetValidityPeriod(TTimeIntervalMinutes(temp)); - - User::LeaveIfError(iRepository->Get(ESmsValidityPeriodFormatId, temp)); - aSmsSettings.SetValidityPeriodFormat(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsAlphabetId, temp)); - aSmsSettings.SetCharacterSet(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsMsgFlagsId, temp)); - aSmsSettings.SetMessageFlags(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsMessageConversionId, temp)); - aSmsSettings.SetMessageConversion(static_cast(temp)); - - - // Load SMS Service Settings - User::LeaveIfError(iRepository->Get(ESmsFlagsId, temp)); - aSmsSettings.SetSettingsFlags(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsStatusReportHandlingId, temp)); - aSmsSettings.SetStatusReportHandling(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsSpecialMessageHandlingId, temp)); - aSmsSettings.SetSpecialMessageHandling(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsCommDbActionId, temp)); - aSmsSettings.SetCommDbAction(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsDeliveryId, temp)); - aSmsSettings.SetDelivery(static_cast(temp)); - - aSmsSettings.RemoveSCAddresses(); - User::LeaveIfError(iRepository->Get(ESmsSCAddressesCountId, temp)); - TInt count = temp; - - TUint32 scId = ESmsSCAddressesPartialId; // 0x1000 - TUint32 scFieldId = 0; - TBuf scNumber; - TBuf scName; - while(count--) - { - scFieldId = scId; // 0x0 - address field - User::LeaveIfError(iRepository->Get(scFieldId, scNumber)); - - ++scFieldId; // 0x1 - name field, increment the last bit - User::LeaveIfError(iRepository->Get(scFieldId, scName)); - - aSmsSettings.AddServiceCenterL(scName, scNumber); - scId += KIncrementSC; // get the next SC in the list - } - - if (aSmsSettings.ServiceCenterCount()>0) - { - User::LeaveIfError(iRepository->Get(ESmsDefaultSCId, temp)); - aSmsSettings.SetDefaultServiceCenter(temp); - } - - User::LeaveIfError(iRepository->Get(ESmsBearerActionId, temp)); - aSmsSettings.SetSmsBearerAction(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsBearerId, temp)); - aSmsSettings.SetSmsBearer(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsClass2FolderId, temp)); - aSmsSettings.SetClass2Folder(static_cast(temp)); - - User::LeaveIfError(iRepository->Get(ESmsDescriptionLengthId, temp)); - aSmsSettings.SetDescriptionLength(temp); - TInt err = iRepository->Get(EMsgSMSTimeStampSettings, temp); - if(KErrNone == err ) - { - aSmsSettings.SetUseServiceCenterTimeStampForDate(temp); - } - } - -/** -Loads Schedule Send settings from CenRep: - -@param aScheduleSettings -Schedule settings - -@param aOffPeakTimes -Off Peak Times - -@param aErrorActions -Send Error Actions - -@param aSysAgentActions -System Agent Actions -*/ -EXPORT_C void CSmsAccount::LoadSettingsL(CMsvScheduleSettings& aScheduleSettings, CMsvOffPeakTimes& aOffPeakTimes, CMsvSendErrorActions& aErrorActions, CMsvSysAgentActions& aSysAgentActions) - { - - TMsvScheduleSettingsUtils::LoadScheduleSettingsL(aScheduleSettings, *iRepository); - TMsvScheduleSettingsUtils::LoadOffPeakSettingsL(aOffPeakTimes, *iRepository); - TMsvScheduleSettingsUtils::LoadSendErrorSettingsL(aErrorActions, *iRepository); - TMsvScheduleSettingsUtils::LoadSysAgentSettingsL(aSysAgentActions, *iRepository); - } - -/** -Saves SMS Service settings to CenRep: - -@param aSmsSettings -Sms service settings -*/ -EXPORT_C void CSmsAccount::SaveSettingsL(const CSmsSettings& aSmsSettings) const - { - - User::LeaveIfError(iRepository->StartTransaction(CRepository::EReadWriteTransaction)); - iRepository->CleanupRollbackTransactionPushL(); - iRepository->Set(ESmsSettingsVersionId, KSmsSettingsVersion); // Errors are ignored as the CenRep transaction fails on error. - - // Save SMS Message Settings¬ - iRepository->Set(ESmsSettingsMesssageVersionId, KSmsMessageSettingsVersion); - iRepository->Set(ESmsValidityPeriodId, aSmsSettings.ValidityPeriod().Int()); - iRepository->Set(ESmsValidityPeriodFormatId, static_cast(aSmsSettings.ValidityPeriodFormat())); - iRepository->Set(ESmsAlphabetId, static_cast(aSmsSettings.CharacterSet())); - iRepository->Set(ESmsMsgFlagsId, static_cast(aSmsSettings.MessageFlags())); - iRepository->Set(ESmsMessageConversionId, static_cast(aSmsSettings.MessageConversion())); - - - // Save SMS Service Settings - iRepository->Set(ESmsFlagsId, static_cast(aSmsSettings.SettingsFlags())); - iRepository->Set(ESmsStatusReportHandlingId, static_cast(aSmsSettings.StatusReportHandling())); - iRepository->Set(ESmsSpecialMessageHandlingId, static_cast(aSmsSettings.SpecialMessageHandling())); - iRepository->Set(ESmsCommDbActionId, static_cast(aSmsSettings.CommDbAction())); - iRepository->Set(ESmsDeliveryId, static_cast(aSmsSettings.Delivery())); - iRepository->Set(ESmsDefaultSCId, aSmsSettings.DefaultServiceCenter()); - - TInt count = aSmsSettings.ServiceCenterCount(); - __ASSERT_ALWAYS(count<=KMaxServiceCenterId, User::Leave(KErrOverflow)); - iRepository->Set(ESmsSCAddressesCountId, count); - - // Save list of SC - TUint32 scId = ESmsSCAddressesPartialId; // 0x1000 - TUint32 scFieldId = 0; - for(TInt loop=0; loop < count; ++loop) - { - scFieldId = scId; // 0x0 - address field - iRepository->Set(scFieldId, aSmsSettings.GetServiceCenter(loop).Address()); - - ++scFieldId; // 0x1 - name field, increment the last bit - iRepository->Set(scFieldId, aSmsSettings.GetServiceCenter(loop).Name()); - - scId += KIncrementSC; // get the next SC in the list - } - - iRepository->Set(ESmsBearerActionId, static_cast(aSmsSettings.SmsBearerAction())); - iRepository->Set(ESmsBearerId, static_cast(aSmsSettings.SmsBearer())); - iRepository->Set(ESmsClass2FolderId, static_cast(aSmsSettings.Class2Folder())); - iRepository->Set(ESmsDescriptionLengthId, aSmsSettings.DescriptionLength()); - - TInt temp = 0; - TInt err = iRepository->Get(EMsgSMSTimeStampSettings, temp); - if(KErrNone == err ) - { - temp = (aSmsSettings.UseServiceCenterTimeStampForDate()) ? 1: 0; - iRepository->Set(EMsgSMSTimeStampSettings,temp); - } - CleanupStack::Pop(); - TUint32 errorId = 0; - User::LeaveIfError(iRepository->CommitTransaction(errorId)); - - aSmsSettings.StoreToCommDbL(); - } - -/** -Saves Schedule Send settings to CenRep: - -@param aScheduleSettings -Schedule settings - -@param aOffPeakTimes -Off Peak Times - -@param aErrorActions -Send Error Actions - -@param aSysAgentActions -System Agent Actions -*/ -EXPORT_C void CSmsAccount::SaveSettingsL(const CMsvScheduleSettings& aScheduleSettings, const CMsvOffPeakTimes& aOffPeakTimes, const CMsvSendErrorActions& aErrorActions, const CMsvSysAgentActions& aSysAgentActions) const - { - - User::LeaveIfError(iRepository->StartTransaction(CRepository::EReadWriteTransaction)); - iRepository->CleanupRollbackTransactionPushL(); - - TMsvScheduleSettingsUtils::SaveScheduleSettingsL(aScheduleSettings, *iRepository); - TMsvScheduleSettingsUtils::SaveOffPeakSettingsL(aOffPeakTimes, *iRepository); - TMsvScheduleSettingsUtils::SaveSendErrorSettingsL(aErrorActions, *iRepository); - TMsvScheduleSettingsUtils::SaveSysAgentSettingsL(aSysAgentActions, *iRepository); - - CleanupStack::Pop(); - TUint32 errorId = 0; - User::LeaveIfError(iRepository->CommitTransaction(errorId)); - } - -CMsvSession& CSmsAccount::SessionL() - { - if (iMsvSession == NULL) - { - iMsvSession = CMsvSession::OpenSyncL(*this); - } - - return *iMsvSession; - } - -void CSmsAccount::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* , TAny* , TAny* ) - { - if (aEvent == EMsvCloseSession) - { - delete iMsvSession; - iMsvSession = NULL; - } - } - - -#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) -/** -* Send the header structure to message Server to create header table. -* @param None. -* @return None. -*/ -void CSmsAccount::CreateHeaderStoreL() - { - CMsvHeaderStore* aHeader = CMsvHeaderStore::NewL(KUidMsgTypeSMS ,SessionL()); - CleanupStack::PushL(aHeader); - - _LIT (KSmsHeaderversion , "SmsHeadearversion"); - aHeader->AddFieldL(KSmsHeaderversion().AllocL(),EIntegerField); - - _LIT (KSmsRecipientCount , "RecipientCount"); - aHeader->AddFieldL(KSmsRecipientCount().AllocL(),EIntegerField); - - _LIT (KRecipients , "To"); - aHeader->AddFieldL(KRecipients().AllocL(),ETextField); - - _LIT (KSmsFlags , "SmsFlags"); - aHeader->AddFieldL(KSmsFlags().AllocL(),EIntegerField); - - _LIT (KTextBioMsgIdType,"BioMsgIdType"); - aHeader->AddFieldL(KTextBioMsgIdType().AllocL(),EIntegerField); - - aHeader->CreateStoreL(); - CleanupStack::PopAndDestroy(aHeader); //aHeader - } -#endif