diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrservices/src/cesmralarminfohandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrservices/src/cesmralarminfohandler.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,258 @@ +/* +* Copyright (c) 2007 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: MRUI alarm info handler object implementation +* +*/ + + +// +#include "emailtrace.h" +#include "cesmralarminfohandler.h" +#include "esmrdef.h" +// + +#include "mesmrmeetingrequestentry.h" + +#include +#include +#include + +#include +#include + +/// Unnamed namespace for local definitions +namespace { + +#ifdef _DEBUG + +// ESMRAlarmInfo module literal definition +_LIT( KTESMRAlarmInfoPanicTxt, "ESMRAlarmInfo" ); + +/** ESMRAlarmInfo panic code definitions */ +enum TESMRAlarmInfoPanic + { + // Coe environment does not exist + EESMRAlarmInfoCoeNotExist + }; + +void Panic( TESMRAlarmInfoPanic aPanic ) + { + + User::Panic( KTESMRAlarmInfoPanicTxt, aPanic ); + } + +#endif + +// Definition for no alarm +const TInt KNoAlarm( -1 ); + +/** + * Compares two alarm info objects. + * + * @param aLhs Left hand side alarm info object. + * @param aRhs Right hand side alarm info object. + * @return ETrue if objects matches by iRelativeAlarmInSeconds member. + */ +TBool CompareByAlarmTime( + const TESMRAlarmInfo& aLhs, + const TESMRAlarmInfo& aRhs ) + { + if ( aLhs.iRelativeAlarmInSeconds == aRhs.iRelativeAlarmInSeconds ) + { + return ETrue; + } + return EFalse; + } + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRRecurrenceInfoHandler::CESMRAlarmInfoHandler +// --------------------------------------------------------------------------- +// +inline CESMRAlarmInfoHandler::CESMRAlarmInfoHandler() + { + FUNC_LOG; + // No implementation yet + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::~CESMRAlarmInfoHandler +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRAlarmInfoHandler::~CESMRAlarmInfoHandler() + { + FUNC_LOG; + iAlarmInfos.Reset(); + iAlarmInfos.Close(); + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRAlarmInfoHandler* CESMRAlarmInfoHandler::NewL() + { + FUNC_LOG; + + CESMRAlarmInfoHandler* self = NewLC(); + CleanupStack::Pop( self ); + + + return self; + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CESMRAlarmInfoHandler* CESMRAlarmInfoHandler::NewLC() + { + FUNC_LOG; + + CESMRAlarmInfoHandler* self = + new (ELeave) CESMRAlarmInfoHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + + + return self; + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRAlarmInfoHandler::ConstructL() + { + FUNC_LOG; + // No implementation yet + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::ReadFromResourceL +// --------------------------------------------------------------------------- +// +EXPORT_C void CESMRAlarmInfoHandler::ReadFromResourceL( + const TDesC& aResourceFile, + TInt aResouceId ) + { + FUNC_LOG; + + iAlarmInfos.Reset(); + + TFileName resourceFileName(aResourceFile); + + CCoeEnv* coeEnv = CCoeEnv::Static(); + __ASSERT_DEBUG( coeEnv, Panic(EESMRAlarmInfoCoeNotExist) ); + + + RResourceFile alarmInfoResourceFile; + alarmInfoResourceFile.OpenL( + coeEnv->FsSession(), + resourceFileName); + CleanupClosePushL( alarmInfoResourceFile ); + alarmInfoResourceFile.ConfirmSignatureL(); + + HBufC8* resourceIdBuffer = + alarmInfoResourceFile.AllocReadLC( aResouceId ); + + // Construct resource reader + TResourceReader reader; + reader.SetBuffer(resourceIdBuffer); + + TInt alarmInfoCount( reader.ReadInt16() ); + for (TInt i(0); i < alarmInfoCount; ++i ) + { + TESMRAlarmInfo alarmInfo; + alarmInfo.iAlarmIdValue = + static_cast( reader.ReadInt16() ); + alarmInfo.iRelativeAlarmInSeconds = reader.ReadInt32(); + User::LeaveIfError( iAlarmInfos.Append( alarmInfo) ); + } + + CleanupStack::PopAndDestroy( resourceIdBuffer ); + CleanupStack::PopAndDestroy( &alarmInfoResourceFile ); + coeEnv = NULL; + + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::GetAlarmInfoObjectL +// --------------------------------------------------------------------------- +// +EXPORT_C void CESMRAlarmInfoHandler::GetAlarmInfoObjectL( + const CCalEntry& aEntry, + TESMRAlarmInfo& aAlarmInfo ) + { + FUNC_LOG; + + TESMRAlarmInfo alarmInfo; + alarmInfo.iRelativeAlarmInSeconds = KNoAlarm; + + // Ownership transferred to us + CCalAlarm* alarm = aEntry.AlarmL(); + CleanupStack::PushL( alarm ); + if ( alarm ) + { + alarmInfo.iRelativeAlarmInSeconds = + alarm->TimeOffset().Int(); + } + CleanupStack::PopAndDestroy( alarm ); + + TInt pos( iAlarmInfos.Find(alarmInfo, CompareByAlarmTime) ); + + if ( KErrNotFound != pos ) + { + aAlarmInfo = iAlarmInfos[pos]; + } + else + { + + User::Leave( KErrNotFound ); + } + + } + +// --------------------------------------------------------------------------- +// CESMRAlarmInfoHandler::GetAbsoluteAlarmTimeL +// --------------------------------------------------------------------------- +// +EXPORT_C void CESMRAlarmInfoHandler::GetAbsoluteAlarmTimeL( + CCalEntry& aEntry, + TTime& aAbsoluteAlarmTime ) + { + FUNC_LOG; + + // Ownership transferred to us + CCalAlarm* alarm = aEntry.AlarmL(); + + if ( !alarm ) + { + User::Leave( KErrNotFound ); + } + + CleanupStack::PushL( alarm ); + + aAbsoluteAlarmTime = + aEntry.StartTimeL().TimeLocalL() - alarm->TimeOffset(); + + CleanupStack::PopAndDestroy( alarm ); + + } + +// EOF +