diff -r 826cea16efd9 -r 13a33d82ad98 videoscheduler/SchedulerServer/src/CCseSchedulerPluginControllerBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoscheduler/SchedulerServer/src/CCseSchedulerPluginControllerBase.cpp Wed Sep 01 12:20:37 2010 +0100 @@ -0,0 +1,328 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Base class for plugin controllers* +*/ + + + + + +// INCLUDE FILES +#include "CCseSchedulerPluginControllerBase.h" +#include "CseDebug.h" // Debug macros +#include +#include "CCseSchedulerTimer.h" +#include "CCseSchedulerServerEngine.h" + + +// EXTERNAL DATA STRUCTURES +// None. + +// EXTERNAL FUNCTION PROTOTYPES +// None. + +// CONSTANTS +// None + +// MACROS +// None. + +// LOCAL CONSTANTS AND MACROS +// None. + +// MODULE DATA STRUCTURES +// None. + +// LOCAL FUNCTION PROTOTYPES +// None. + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase( MCsePluginControllerObserver& aEngine, + TInt32 aPluginUid ) : + iEngine( aEngine ), + iPluginUid( aPluginUid ) + { + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase"); + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::NewL"); + + CCseSchedulerPluginControllerBase* self = new( ELeave ) CCseSchedulerPluginControllerBase( aEngine, aPluginUid ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::ConstructL"); + + iTimer = CCseSchedulerTimer::NewL( this ); + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::~CCseSchedulerPluginControllerBase"); + + delete iTimer; + iScheduleArray.ResetAndDestroy(); + + CSELOGSTRING_HIGH_LEVEL("<<& aScheduleArray ) + { + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::SetSchedules"); + + // The aScheduleArray parameter contains schedules which are either before + // or at the same time as the existing ones in the iScheduleArray. + // Just destroy the old ones and replace with new ones. + // Also cancel the timer because the schedule to run may be different + + iScheduleArray.ResetAndDestroy(); + iTimer->Cancel(); + + // Go through all given schedules and copy them our array + for( TInt i = 0; i < aScheduleArray.Count(); i++) + { + CCseScheduledProgram* schedule = + CCseScheduledProgram::NewL(*aScheduleArray[i] ); + CleanupStack::PushL( schedule ); + + iScheduleArray.AppendL( schedule ); + + CleanupStack::Pop( schedule ); + } + + // If we have schedules, set the timer + if (iScheduleArray.Count() > 0) + { + // All the schedules have same time + iTimer->SetTimer( iScheduleArray[0]->StartTime() ); + } + + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::SetSchedules"); + } + +// ----------------------------------------------------------------------------- +// CCseSchedulerPluginControllerBase::GetPluginUid +// +// ----------------------------------------------------------------------------- +// +TInt32 CCseSchedulerPluginControllerBase::PluginUid( ) + { + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::PluginUid"); + CSELOGSTRING2_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::RunPluginsL"); + CSELOGSTRING_HIGH_LEVEL( + "CCseSchedulerPluginControllerBase::RunPluginsL - Base class, do nothing"); + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::IsObsolete"); + + TBool ret( EFalse ); + + // If we have no schedules in array we declare ourselves as "obsolete". + if( iScheduleArray.Count() == 0 ) + { + ret = ETrue; + } + + CSELOGSTRING2_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::ScheduleCompleted"); + CSELOGSTRING_HIGH_LEVEL( + "CCseSchedulerUniPluginController::ScheduledEventCompleted - WTF LEIK BSAE KLASS"); + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerPluginControllerBase::TimerErrorL"); + + if ( aError == KErrAbort ) + { + // System time changed. Make sanity check and start timer again. + CSELOGSTRING_HIGH_LEVEL( + ">>>CCseSchedulerPluginControllerBase::TimerErrorL, system time has changed"); + if ( iScheduleArray.Count() > 0 ) + { + TTime now; + now.UniversalTime(); + // Time still in the future + if ( now < iScheduleArray[0]->StartTime() ) + { + iTimer->SetTimer( iScheduleArray[0]->StartTime() ); + } + else + { + RunPluginsL(); + } + } + return; + } + + if ( aError == KErrUnderflow ) + { + // Scheduled time is in the past, pass it to notifier. It should decide what to do + CSELOGSTRING_HIGH_LEVEL( + ">>>CCseSchedulerPluginControllerBase::TimerErrorL, scheduled time is in the past"); + RunPluginsL(); + return; + } + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::DoCleanUp"); + CSELOGSTRING_HIGH_LEVEL( + "CCseSchedulerUniPluginController::DoCleanUp - Base class"); + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::SetToBeCleared"); + + iToBeCleared = aToBeCleared; + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::ClearControllerL"); + + CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::ClearControllerL - Baseclass, nothing here"); + + CSELOGSTRING_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::IsToBeCleared"); + + CSELOGSTRING2_HIGH_LEVEL("<<>>CCseSchedulerUniPluginController::IsControllerActive"); + + CSELOGSTRING2_HIGH_LEVEL("<<