videoscheduler/SchedulerServer/src/CCseSchedulerPluginControllerBase.cpp
branchRCL_3
changeset 47 826cea16efd9
parent 45 798ee5f1972c
child 48 13a33d82ad98
equal deleted inserted replaced
45:798ee5f1972c 47:826cea16efd9
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Base class for plugin controllers*
       
    15 */
       
    16 
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 // INCLUDE FILES
       
    22 #include "CCseSchedulerPluginControllerBase.h"
       
    23 #include "CseDebug.h"                           // Debug macros
       
    24 #include <ipvideo/CCseScheduledProgram.h>
       
    25 #include "CCseSchedulerTimer.h"
       
    26 #include "CCseSchedulerServerEngine.h"
       
    27 
       
    28 
       
    29 // EXTERNAL DATA STRUCTURES
       
    30 // None.
       
    31 
       
    32 // EXTERNAL FUNCTION PROTOTYPES  
       
    33 // None.
       
    34 
       
    35 // CONSTANTS
       
    36 // None
       
    37 
       
    38 // MACROS
       
    39 // None.
       
    40 
       
    41 // LOCAL CONSTANTS AND MACROS
       
    42 // None.
       
    43 
       
    44 // MODULE DATA STRUCTURES
       
    45 // None.
       
    46 
       
    47 // LOCAL FUNCTION PROTOTYPES
       
    48 // None.
       
    49 
       
    50 
       
    51 // ============================ MEMBER FUNCTIONS ===============================
       
    52 
       
    53 // -----------------------------------------------------------------------------
       
    54 // CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase
       
    55 // C++ default constructor can NOT contain any code, that might leave.
       
    56 // -----------------------------------------------------------------------------
       
    57 //
       
    58 CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase( MCsePluginControllerObserver& aEngine,
       
    59                                                                       TInt32 aPluginUid ) :
       
    60                                                                       iEngine( aEngine ),
       
    61                                                                       iPluginUid( aPluginUid )
       
    62     {
       
    63     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase");
       
    64             
       
    65     CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::CCseSchedulerPluginControllerBase");
       
    66     }
       
    67 
       
    68 // -----------------------------------------------------------------------------
       
    69 // CCseSchedulerPluginControllerBase::NewL
       
    70 // Two-phased constructor.
       
    71 // -----------------------------------------------------------------------------
       
    72 //
       
    73 CCseSchedulerPluginControllerBase* CCseSchedulerPluginControllerBase::NewL( MCsePluginControllerObserver& aEngine,
       
    74                                                                       TInt32 aPluginUid )
       
    75     {
       
    76     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::NewL");
       
    77     
       
    78     CCseSchedulerPluginControllerBase* self = new( ELeave ) CCseSchedulerPluginControllerBase( aEngine, aPluginUid );
       
    79     CleanupStack::PushL( self );
       
    80     self->ConstructL();
       
    81     CleanupStack::Pop( self );
       
    82     
       
    83     CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::NewL");
       
    84     return self;
       
    85     }
       
    86 
       
    87 // -----------------------------------------------------------------------------
       
    88 // CCseSchedulerPluginControllerBase::ConstructL
       
    89 // Symbian 2nd phase constructor can leave.
       
    90 // -----------------------------------------------------------------------------
       
    91 //
       
    92 void CCseSchedulerPluginControllerBase::ConstructL()
       
    93     {
       
    94     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::ConstructL");
       
    95     
       
    96     iTimer = CCseSchedulerTimer::NewL( this );    
       
    97                
       
    98 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::ConstructL");
       
    99     }
       
   100 
       
   101 // -----------------------------------------------------------------------------
       
   102 // CCseSchedulerPluginControllerBase::~CCseSchedulerPluginControllerBase
       
   103 // Destructor.
       
   104 // -----------------------------------------------------------------------------
       
   105 //
       
   106 CCseSchedulerPluginControllerBase::~CCseSchedulerPluginControllerBase()
       
   107     {
       
   108     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::~CCseSchedulerPluginControllerBase");
       
   109     
       
   110     delete iTimer;    
       
   111     iScheduleArray.ResetAndDestroy();
       
   112 		
       
   113     CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::~CCseSchedulerPluginControllerBase");
       
   114     }
       
   115 
       
   116 // -----------------------------------------------------------------------------
       
   117 // CCseSchedulerPluginControllerBase::SetSchedulesL
       
   118 //
       
   119 // -----------------------------------------------------------------------------
       
   120 //
       
   121 void CCseSchedulerPluginControllerBase::SetSchedulesL( RPointerArray<CCseScheduledProgram>& aScheduleArray )
       
   122     {
       
   123 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::SetSchedules");
       
   124 
       
   125     //  The aScheduleArray parameter contains schedules which are either before
       
   126     //  or at the same time as the existing ones in the iScheduleArray.
       
   127     //  Just destroy the old ones and replace with new ones.
       
   128     //  Also cancel the timer because the schedule to run may be different
       
   129 
       
   130     iScheduleArray.ResetAndDestroy();
       
   131     iTimer->Cancel();
       
   132 
       
   133 	// Go through all given schedules and copy them our array
       
   134 	for( TInt i = 0; i < aScheduleArray.Count(); i++)
       
   135 	    {
       
   136         CCseScheduledProgram* schedule =
       
   137                 CCseScheduledProgram::NewL(*aScheduleArray[i] );
       
   138         CleanupStack::PushL( schedule );
       
   139 
       
   140 	    iScheduleArray.AppendL( schedule );
       
   141 
       
   142 	    CleanupStack::Pop( schedule );
       
   143 	    }
       
   144 
       
   145     //  If we have schedules, set the timer
       
   146     if (iScheduleArray.Count() > 0)
       
   147         {
       
   148         //  All the schedules have same time
       
   149         iTimer->SetTimer( iScheduleArray[0]->StartTime() );
       
   150         }
       
   151 
       
   152 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::SetSchedules");
       
   153     }
       
   154 
       
   155 // -----------------------------------------------------------------------------
       
   156 // CCseSchedulerPluginControllerBase::GetPluginUid
       
   157 //
       
   158 // -----------------------------------------------------------------------------
       
   159 //
       
   160 TInt32 CCseSchedulerPluginControllerBase::PluginUid( )
       
   161     {
       
   162 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::PluginUid");
       
   163 	CSELOGSTRING2_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::PluginUid: UID = %d",
       
   164 	                             iPluginUid);
       
   165     return iPluginUid;
       
   166     }
       
   167 
       
   168 // -----------------------------------------------------------------------------
       
   169 // CCseSchedulerPluginControllerBase::RunPluginsL
       
   170 //
       
   171 // -----------------------------------------------------------------------------
       
   172 //
       
   173 void CCseSchedulerPluginControllerBase::RunPluginsL( )
       
   174 	{	
       
   175 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::RunPluginsL");
       
   176     CSELOGSTRING_HIGH_LEVEL(
       
   177         "CCseSchedulerPluginControllerBase::RunPluginsL - Base class, do nothing");
       
   178 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::RunPluginsL");
       
   179 	}
       
   180 	
       
   181 // -----------------------------------------------------------------------------
       
   182 // CCseSchedulerPluginControllerBase::IsObsolote
       
   183 //
       
   184 // -----------------------------------------------------------------------------
       
   185 //
       
   186 TBool CCseSchedulerPluginControllerBase::IsObsolete() const
       
   187 	{	
       
   188 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::IsObsolete");
       
   189     
       
   190     TBool ret( EFalse );
       
   191     
       
   192     // If we have no schedules in array we declare ourselves as "obsolete".
       
   193     if( iScheduleArray.Count() == 0 )
       
   194         {
       
   195         ret = ETrue;
       
   196         }
       
   197     
       
   198 	CSELOGSTRING2_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::IsObsolete: %d", ret);
       
   199 	
       
   200 	return ret;
       
   201 	}
       
   202 	
       
   203 // -----------------------------------------------------------------------------
       
   204 // CCseSchedulerPluginControllerBase::ScheduleCompleted
       
   205 //
       
   206 // -----------------------------------------------------------------------------
       
   207 //
       
   208 void CCseSchedulerPluginControllerBase::ScheduleCompletedL( const TUint32 /*aDbIdentifier*/,
       
   209                                                             TInt /*aCompletitionCode*/ )
       
   210 	{	
       
   211 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::ScheduleCompleted");	
       
   212 	CSELOGSTRING_HIGH_LEVEL(
       
   213 	    "CCseSchedulerUniPluginController::ScheduledEventCompleted - WTF LEIK BSAE KLASS");
       
   214 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::ScheduleCompleted");
       
   215 	}
       
   216 	
       
   217 // -----------------------------------------------------------------------------
       
   218 // CCseSchedulerPluginControllerBase::TimerErrorL
       
   219 //
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void CCseSchedulerPluginControllerBase::TimerErrorL( const TInt32 aError )
       
   223 	{	
       
   224 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerPluginControllerBase::TimerErrorL");
       
   225 	
       
   226 	if ( aError == KErrAbort )
       
   227 		{
       
   228 		 // System time changed. Make sanity check and start timer again.
       
   229 		CSELOGSTRING_HIGH_LEVEL(
       
   230 		    ">>>CCseSchedulerPluginControllerBase::TimerErrorL, system time has changed");
       
   231 		if ( iScheduleArray.Count() > 0 )
       
   232 			{
       
   233 			TTime now;
       
   234 			now.UniversalTime();
       
   235 			// Time still in the future
       
   236 			if ( now < iScheduleArray[0]->StartTime() )
       
   237 				{
       
   238 				iTimer->SetTimer( iScheduleArray[0]->StartTime() );
       
   239 				}
       
   240 			else
       
   241 				{
       
   242 				RunPluginsL();
       
   243 				}
       
   244 			}
       
   245 		return; 
       
   246 		}
       
   247 
       
   248 	if ( aError == KErrUnderflow )
       
   249 		{
       
   250 		 // Scheduled time is in the past, pass it to notifier. It should decide what to do
       
   251 		CSELOGSTRING_HIGH_LEVEL(
       
   252 		    ">>>CCseSchedulerPluginControllerBase::TimerErrorL, scheduled time is in the past");
       
   253 		RunPluginsL();
       
   254 		return;
       
   255 		}
       
   256 			
       
   257 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerPluginControllerBase::TimerErrorL");
       
   258 	}
       
   259 	
       
   260 // -----------------------------------------------------------------------------
       
   261 // CCseSchedulerPluginControllerBase::DoCleanUp
       
   262 //
       
   263 // -----------------------------------------------------------------------------
       
   264 //
       
   265 void CCseSchedulerPluginControllerBase::DoCleanUp( )
       
   266 	{	
       
   267 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::DoCleanUp");	
       
   268 	CSELOGSTRING_HIGH_LEVEL(
       
   269 	    "CCseSchedulerUniPluginController::DoCleanUp - Base class");
       
   270 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::DoCleanUp");
       
   271 	}
       
   272 
       
   273 // -----------------------------------------------------------------------------
       
   274 // CCseSchedulerPluginControllerBase::SetAsObsolete
       
   275 //
       
   276 // -----------------------------------------------------------------------------
       
   277 //
       
   278 void CCseSchedulerPluginControllerBase::SetToBeCleared( TBool aToBeCleared )
       
   279 	{	
       
   280 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::SetToBeCleared");	
       
   281 	
       
   282 	iToBeCleared = aToBeCleared;
       
   283 	    
       
   284 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::SetToBeCleared");
       
   285 	}
       
   286 
       
   287 
       
   288 // -----------------------------------------------------------------------------
       
   289 // CCseSchedulerPluginControllerBase::ClearController
       
   290 //
       
   291 // -----------------------------------------------------------------------------
       
   292 //
       
   293 void CCseSchedulerPluginControllerBase::ClearControllerL( )
       
   294 	{	
       
   295 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::ClearControllerL");	
       
   296 
       
   297     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::ClearControllerL - Baseclass, nothing here");	
       
   298 
       
   299 	CSELOGSTRING_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::ClearControllerL");
       
   300 	}
       
   301 
       
   302 
       
   303 
       
   304 // -----------------------------------------------------------------------------
       
   305 // CCseSchedulerPluginControllerBase::ClearPlugin
       
   306 //
       
   307 // -----------------------------------------------------------------------------
       
   308 //
       
   309 TBool CCseSchedulerPluginControllerBase::IsToBeCleared( )
       
   310 	{	
       
   311 	CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::IsToBeCleared");	
       
   312 
       
   313     CSELOGSTRING2_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::IsToBeCleared: %d", iToBeCleared );	
       
   314     return iToBeCleared;	
       
   315 	}
       
   316 
       
   317 // -----------------------------------------------------------------------------
       
   318 // CCseSchedulerPluginControllerBase::IsControllerActive
       
   319 //
       
   320 // -----------------------------------------------------------------------------
       
   321 //
       
   322 TBool CCseSchedulerPluginControllerBase::IsControllerActive( )
       
   323     {   
       
   324     CSELOGSTRING_HIGH_LEVEL(">>>CCseSchedulerUniPluginController::IsControllerActive");  
       
   325 
       
   326     CSELOGSTRING2_HIGH_LEVEL("<<<CCseSchedulerUniPluginController::IsControllerActive: %d", iToBeCleared );  
       
   327     return ETrue;    
       
   328     }