--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrservices/src/cesmralarminfohandler.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -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
+*
+*/
+
+
+//<cmail>
+#include "emailtrace.h"
+#include "cesmralarminfohandler.h"
+#include "esmrdef.h"
+//</cmail>
+
+#include "mesmrmeetingrequestentry.h"
+
+#include <coemain.h>
+#include <barsread.h>
+#include <barsc.h>
+
+#include <calentry.h>
+#include <calalarm.h>
+
+/// 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<TESMRAlarmValue>( 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
+