commonappservices/alarmserver/AlarmAlert/Source/asaltrequestsetalarm.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/AlarmAlert/Source/asaltrequestsetalarm.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,148 @@
+// Copyright (c) 1999-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 "asaltrequestsetalarm.h"
+#include "ASAltClientSession.h"
+#include "ASSrvAlarmQueue.h"
+#include "ASSrvSessionCollection.h"
+
+CASAltRequestSetAlarm::CASAltRequestSetAlarm(RASAltClientSession& aSession, CASSrvNotificationCoordinator& aParent, CASSrvAlarmQueue& aQueue, MASSrvSessionCollection& aSessionCollection)
+:	CActive(CActive::EPriorityHigh), iSession(aSession), iParent(aParent), iQueue( aQueue ), iSessionCollection( aSessionCollection )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+CASAltRequestSetAlarm::~CASAltRequestSetAlarm()
+	{
+	Cancel();
+	delete iAlarmCopy;
+	delete iAlarmDataCopy;
+	iRequestedAlarmIds.Reset();
+	}
+
+void CASAltRequestSetAlarm::RequestSetAlarm(TAlarmId aId)
+	{
+	if (!IsActive())
+		{
+		RequestNextAlarm(aId);
+		}
+	else
+		{
+		// Non-leaving version of Append intentionaly used here
+		// Space for 8 elements has been reserved in ConstructL
+		iRequestedAlarmIds.Append(aId);
+		}
+	}
+
+void CASAltRequestSetAlarm::RequestNextAlarm(TAlarmId aId)
+    {
+    ASSERT(!IsActive());
+    
+	// Get the alarm details from the queue and prepare any associated data
+    const TASSrvAlarm* alarm = iQueue.QueueAlarmById(aId);
+	if  (alarm)
+	    {
+    	// Notify the alarm alert server about the alarm and its associated
+    	// data (if it has any)
+    	TPtrC8 pAlarmData(KNullDesC8);
+    	if (alarm->HasAssociatedData())
+    		{
+    		pAlarmData.Set(alarm->Data());
+    		}
+
+        // Get alarm owner
+    	TFullName owner(KNullDesC);
+    	iSessionCollection.MASSessionCollectionAlarmOwner(aId, owner);
+
+        // Get alarm data
+    	delete iAlarmDataCopy;
+    	iAlarmDataCopy = NULL;
+    	TRAPD(err, iAlarmDataCopy = pAlarmData.AllocL());
+     	
+     	// Queue alarm with alert server
+     	*iAlarmCopy = *alarm;
+        
+     	if  (iAlarmDataCopy && err == KErrNone)
+     		{
+     		iSession.SetAlarm(iStatus, *iAlarmCopy, owner, *iAlarmDataCopy);
+     		}
+     	else
+     		{
+      		iSession.SetAlarm(iStatus, *iAlarmCopy, owner, KNullDesC8());
+    		}
+    	
+    	SetActive();
+	    }
+    }
+    
+void CASAltRequestSetAlarm::ConstructL()
+	{
+	iAlarmCopy = new(ELeave) TASShdAlarm;
+	iRequestedAlarmIds.ReserveL(8);
+	}
+
+CASAltRequestSetAlarm* CASAltRequestSetAlarm::NewL(RASAltClientSession& aSession, CASSrvNotificationCoordinator& aParent, CASSrvAlarmQueue& aQueue, MASSrvSessionCollection& aSessionCollection)
+	{
+	CASAltRequestSetAlarm* self = new(ELeave) CASAltRequestSetAlarm(aSession, aParent, aQueue, aSessionCollection);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CASAltRequestSetAlarm::RequestSetAlarmCancel(TAlarmId aId)
+    {
+    if  (IsActive() && (iAlarmCopy->Id() == aId))
+        {
+        iCancelledCurrentRequest = ETrue;
+        }
+    else
+        {
+		const TInt KPosition(iRequestedAlarmIds.Find(aId));
+		
+		if (KPosition != KErrNotFound)
+			{
+			iRequestedAlarmIds.Remove(KPosition);
+			}
+        }
+    }
+    
+
+void CASAltRequestSetAlarm::RunL()
+	{
+	if (!iCancelledCurrentRequest)
+	    {
+    	iParent.CompleteUpdateAlarmAlertServer(iAlarmCopy);
+	    }
+	    
+	// Do we have more items to request?
+	if (iRequestedAlarmIds.Count() > 0)
+		{
+		// Request next item
+		const TAlarmId KHeadItem = iRequestedAlarmIds[0];
+		iRequestedAlarmIds.Remove(0);
+		RequestNextAlarm(KHeadItem);
+		}
+		
+	iCancelledCurrentRequest = EFalse;
+	}
+	
+void CASAltRequestSetAlarm::DoCancel()
+	{
+	}
+
+
+