meetingrequest/mrservices/src/cesmralarminfohandler.cpp
changeset 0 8466d47a6819
--- /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
+