commonappservices/alarmserver/AlarmAlert/Source/asaltrequestsetalarm.cpp
changeset 0 2e3d3ce01487
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include "asaltrequestsetalarm.h"
       
    17 #include "ASAltClientSession.h"
       
    18 #include "ASSrvAlarmQueue.h"
       
    19 #include "ASSrvSessionCollection.h"
       
    20 
       
    21 CASAltRequestSetAlarm::CASAltRequestSetAlarm(RASAltClientSession& aSession, CASSrvNotificationCoordinator& aParent, CASSrvAlarmQueue& aQueue, MASSrvSessionCollection& aSessionCollection)
       
    22 :	CActive(CActive::EPriorityHigh), iSession(aSession), iParent(aParent), iQueue( aQueue ), iSessionCollection( aSessionCollection )
       
    23 	{
       
    24 	CActiveScheduler::Add(this);
       
    25 	}
       
    26 
       
    27 
       
    28 CASAltRequestSetAlarm::~CASAltRequestSetAlarm()
       
    29 	{
       
    30 	Cancel();
       
    31 	delete iAlarmCopy;
       
    32 	delete iAlarmDataCopy;
       
    33 	iRequestedAlarmIds.Reset();
       
    34 	}
       
    35 
       
    36 void CASAltRequestSetAlarm::RequestSetAlarm(TAlarmId aId)
       
    37 	{
       
    38 	if (!IsActive())
       
    39 		{
       
    40 		RequestNextAlarm(aId);
       
    41 		}
       
    42 	else
       
    43 		{
       
    44 		// Non-leaving version of Append intentionaly used here
       
    45 		// Space for 8 elements has been reserved in ConstructL
       
    46 		iRequestedAlarmIds.Append(aId);
       
    47 		}
       
    48 	}
       
    49 
       
    50 void CASAltRequestSetAlarm::RequestNextAlarm(TAlarmId aId)
       
    51     {
       
    52     ASSERT(!IsActive());
       
    53     
       
    54 	// Get the alarm details from the queue and prepare any associated data
       
    55     const TASSrvAlarm* alarm = iQueue.QueueAlarmById(aId);
       
    56 	if  (alarm)
       
    57 	    {
       
    58     	// Notify the alarm alert server about the alarm and its associated
       
    59     	// data (if it has any)
       
    60     	TPtrC8 pAlarmData(KNullDesC8);
       
    61     	if (alarm->HasAssociatedData())
       
    62     		{
       
    63     		pAlarmData.Set(alarm->Data());
       
    64     		}
       
    65 
       
    66         // Get alarm owner
       
    67     	TFullName owner(KNullDesC);
       
    68     	iSessionCollection.MASSessionCollectionAlarmOwner(aId, owner);
       
    69 
       
    70         // Get alarm data
       
    71     	delete iAlarmDataCopy;
       
    72     	iAlarmDataCopy = NULL;
       
    73     	TRAPD(err, iAlarmDataCopy = pAlarmData.AllocL());
       
    74      	
       
    75      	// Queue alarm with alert server
       
    76      	*iAlarmCopy = *alarm;
       
    77         
       
    78      	if  (iAlarmDataCopy && err == KErrNone)
       
    79      		{
       
    80      		iSession.SetAlarm(iStatus, *iAlarmCopy, owner, *iAlarmDataCopy);
       
    81      		}
       
    82      	else
       
    83      		{
       
    84       		iSession.SetAlarm(iStatus, *iAlarmCopy, owner, KNullDesC8());
       
    85     		}
       
    86     	
       
    87     	SetActive();
       
    88 	    }
       
    89     }
       
    90     
       
    91 void CASAltRequestSetAlarm::ConstructL()
       
    92 	{
       
    93 	iAlarmCopy = new(ELeave) TASShdAlarm;
       
    94 	iRequestedAlarmIds.ReserveL(8);
       
    95 	}
       
    96 
       
    97 CASAltRequestSetAlarm* CASAltRequestSetAlarm::NewL(RASAltClientSession& aSession, CASSrvNotificationCoordinator& aParent, CASSrvAlarmQueue& aQueue, MASSrvSessionCollection& aSessionCollection)
       
    98 	{
       
    99 	CASAltRequestSetAlarm* self = new(ELeave) CASAltRequestSetAlarm(aSession, aParent, aQueue, aSessionCollection);
       
   100 	CleanupStack::PushL(self);
       
   101 	self->ConstructL();
       
   102 	CleanupStack::Pop(self);
       
   103 	return self;
       
   104 	}
       
   105 
       
   106 void CASAltRequestSetAlarm::RequestSetAlarmCancel(TAlarmId aId)
       
   107     {
       
   108     if  (IsActive() && (iAlarmCopy->Id() == aId))
       
   109         {
       
   110         iCancelledCurrentRequest = ETrue;
       
   111         }
       
   112     else
       
   113         {
       
   114 		const TInt KPosition(iRequestedAlarmIds.Find(aId));
       
   115 		
       
   116 		if (KPosition != KErrNotFound)
       
   117 			{
       
   118 			iRequestedAlarmIds.Remove(KPosition);
       
   119 			}
       
   120         }
       
   121     }
       
   122     
       
   123 
       
   124 void CASAltRequestSetAlarm::RunL()
       
   125 	{
       
   126 	if (!iCancelledCurrentRequest)
       
   127 	    {
       
   128     	iParent.CompleteUpdateAlarmAlertServer(iAlarmCopy);
       
   129 	    }
       
   130 	    
       
   131 	// Do we have more items to request?
       
   132 	if (iRequestedAlarmIds.Count() > 0)
       
   133 		{
       
   134 		// Request next item
       
   135 		const TAlarmId KHeadItem = iRequestedAlarmIds[0];
       
   136 		iRequestedAlarmIds.Remove(0);
       
   137 		RequestNextAlarm(KHeadItem);
       
   138 		}
       
   139 		
       
   140 	iCancelledCurrentRequest = EFalse;
       
   141 	}
       
   142 	
       
   143 void CASAltRequestSetAlarm::DoCancel()
       
   144 	{
       
   145 	}
       
   146 
       
   147 
       
   148