imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp
changeset 54 48dd0f169f0d
parent 42 2e2a89493e2b
equal deleted inserted replaced
42:2e2a89493e2b 54:48dd0f169f0d
     1 /*
       
     2 * Copyright (c) 2006-2007 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 "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:  Processor object for running queued tasks
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 #include <e32base.h>
       
    20 #include <fbs.h>
       
    21 #include "thumbnailtaskprocessor.h"
       
    22 #include "thumbnailtask.h"
       
    23 #include "thumbnailprovider.h"
       
    24 #include "thumbnailmanageruids.hrh"
       
    25 #include "thumbnailmanagerconstants.h"
       
    26 #include "thumbnailgeneratetask.h"
       
    27 #include "thumbnailpanic.h"
       
    28 #include "OstTraceDefinitions.h"
       
    29 #ifdef OST_TRACE_COMPILER_IN_USE
       
    30 #include "thumbnailtaskprocessorTraces.h"
       
    31 #endif
       
    32 
       
    33 
       
    34 
       
    35 // ======== MEMBER FUNCTIONS ========
       
    36 
       
    37 // ---------------------------------------------------------------------------
       
    38 // CThumbnailTaskProcessor::NewL()
       
    39 // Two-phased constructor.
       
    40 // ---------------------------------------------------------------------------
       
    41 //
       
    42 CThumbnailTaskProcessor* CThumbnailTaskProcessor::NewL()
       
    43     {
       
    44     CThumbnailTaskProcessor* self = new( ELeave )CThumbnailTaskProcessor();
       
    45     CleanupStack::PushL( self );
       
    46     self->ConstructL();
       
    47     CleanupStack::Pop( self );
       
    48     return self;
       
    49     }
       
    50 
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 // CThumbnailTaskProcessor::CThumbnailTaskProcessor()
       
    54 // C++ default constructor can NOT contain any code, that might leave.
       
    55 // ---------------------------------------------------------------------------
       
    56 //
       
    57 CThumbnailTaskProcessor::CThumbnailTaskProcessor(): CActive( CActive
       
    58     ::EPriorityStandard )
       
    59     {
       
    60     CActiveScheduler::Add( this );
       
    61     }
       
    62 
       
    63 
       
    64 // ---------------------------------------------------------------------------
       
    65 // CThumbnailTaskProcessor::ConstructL()
       
    66 // Symbian 2nd phase constructor can leave.
       
    67 // ---------------------------------------------------------------------------
       
    68 //
       
    69 void CThumbnailTaskProcessor::ConstructL()
       
    70     {
       
    71     // define PS property
       
    72     TInt ret = RProperty::Delete(KServerIdle, KIdle);
       
    73     TN_DEBUG2( "CThumbnailTaskProcessor::CThumbnailTaskProcessor() Delete KServerIdle %d", ret);
       
    74     OstTrace1( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_CONSTRUCTL, "CThumbnailTaskProcessor::ConstructL - Delete KServerIdle;ret=%d", ret );
       
    75     
       
    76     ret=RProperty::Define(KServerIdle, KIdle, RProperty::EInt);
       
    77     TN_DEBUG2( "CThumbnailTaskProcessor::ConstructL() Define KServerIdle %d", ret);
       
    78     OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_CONSTRUCTL, "CThumbnailTaskProcessor::ConstructL - Define KServerIdle;ret=%d", ret );
       
    79     
       
    80     // attach to the property    
       
    81 	ret = iProperty.Attach(KServerIdle, KIdle, EOwnerThread);
       
    82     TN_DEBUG2( "CThumbnailTaskProcessor::ConstructL()Attach %d", ret);
       
    83     OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_CONSTRUCTL, "CThumbnailTaskProcessor::ConstructL - Attach;ret=%d", ret );
       
    84     
       
    85 	// set initial PS value
       
    86     ret = iProperty.Set( ETrue );
       
    87     TN_DEBUG2( "CThumbnailTaskProcessor::ConstructL() Set IDLE ETrue %d", ret );
       
    88     OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILTASKPROCESSOR_CONSTRUCTL, "CThumbnailTaskProcessor::ConstructL - Set IDLE ETrue;ret=%d", ret );
       
    89     iIdle = ETrue;
       
    90     
       
    91     iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityIdle);
       
    92     
       
    93     iTimerActive = EFalse;
       
    94      
       
    95     iIsDaemonAsProcess = EFalse;
       
    96     }
       
    97 
       
    98 
       
    99 // ---------------------------------------------------------------------------
       
   100 // CThumbnailTaskProcessor::~CThumbnailTaskProcessor()
       
   101 // Destructor.
       
   102 // ---------------------------------------------------------------------------
       
   103 //
       
   104 CThumbnailTaskProcessor::~CThumbnailTaskProcessor()
       
   105     {
       
   106     Cancel();
       
   107     iTasks.ResetAndDestroy();
       
   108     iProperty.Close();
       
   109     TInt ret = RProperty::Delete(KServerIdle, KIdle);
       
   110     TN_DEBUG2( "CThumbnailTaskProcessor::CThumbnailTaskProcessor() Delete KServerIdle %d", ret);
       
   111     OstTrace1( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_CTHUMBNAILTASKPROCESSOR, "CThumbnailTaskProcessor::~CThumbnailTaskProcessor - Delete KServerIdle;ret=%d", ret );
       
   112     
       
   113     if(iPeriodicTimer)
       
   114        {
       
   115        iPeriodicTimer->Cancel();
       
   116        }
       
   117     delete iPeriodicTimer;
       
   118     iPeriodicTimer = NULL;
       
   119     }
       
   120 
       
   121 
       
   122 // ---------------------------------------------------------------------------
       
   123 // CThumbnailTaskProcessor::AddTaskL()
       
   124 // Adds new task to the task queue.
       
   125 // ---------------------------------------------------------------------------
       
   126 //
       
   127 void CThumbnailTaskProcessor::AddTaskL( CThumbnailTask* aTask )
       
   128     {
       
   129     TN_DEBUG1( "CThumbnailTaskProcessor::AddTaskL()");
       
   130     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_ADDTASKL, "CThumbnailTaskProcessor::AddTaskL" );
       
   131     __ASSERT_DEBUG(( aTask ), ThumbnailPanic( EThumbnailNullPointer ));
       
   132     const TInt taskCount = iTasks.Count();
       
   133     iTasks.AppendL( aTask );
       
   134     
       
   135     if ( !IsActive() && !taskCount )
       
   136         {
       
   137         // this is the first task in queue, go active now
       
   138         iActiveTask = aTask;
       
   139         
       
   140         SetActive();
       
   141         TRequestStatus* statusPtr = &iStatus;
       
   142         User::RequestComplete( statusPtr, KErrNone );
       
   143         }
       
   144     }
       
   145 
       
   146 
       
   147 // ---------------------------------------------------------------------------
       
   148 // CThumbnailTaskProcessor::RemoveTask()
       
   149 // Removes specific tasks from the queue.
       
   150 // ---------------------------------------------------------------------------
       
   151 //
       
   152 TInt CThumbnailTaskProcessor::RemoveTask( const TThumbnailServerRequestId&
       
   153     aRequestId )
       
   154     {
       
   155     TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - request ID: %d", aRequestId.iRequestId);
       
   156     OstTrace1( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_REMOVETASK, "CThumbnailTaskProcessor::RemoveTask;aRequestId.iRequestId=%u", aRequestId.iRequestId );
       
   157     
       
   158     TBool cancel = EFalse;
       
   159     TInt res = KErrNotFound;
       
   160     
       
   161     for ( TInt i = iTasks.Count(); --i >= 0; )
       
   162         {
       
   163         CThumbnailTask* task = iTasks[i];
       
   164         if ( task->RequestId() == aRequestId )
       
   165             {
       
   166             if ( task->State() != CThumbnailTask::ERunning )
       
   167                 {
       
   168                 // Remove task from queue
       
   169                 delete task;
       
   170                 task = NULL;
       
   171                 iTasks.Remove( i );
       
   172                 
       
   173                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - removed request ID: %d", aRequestId.iRequestId);
       
   174                 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_REMOVETASK, "CThumbnailTaskProcessor::RemoveTask - removed request ID:;aRequestId.iRequestId=%u", aRequestId.iRequestId );
       
   175                 }
       
   176             else
       
   177                 {
       
   178                 // Task is already running, canceled first
       
   179                 task->Cancel();
       
   180                 delete task;
       
   181                 task = NULL;
       
   182                 iTasks.Remove( i );
       
   183                 cancel = ETrue;
       
   184                 
       
   185                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - canceled & removed request ID: %d", aRequestId.iRequestId);
       
   186                 OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_REMOVETASK, "CThumbnailTaskProcessor::RemoveTask - canceled & removed request ID:;aRequestId.iRequestId=%u", aRequestId.iRequestId );
       
   187                 }
       
   188             
       
   189             res = KErrNone;
       
   190             
       
   191             // don't break, because there could be many tasks related to the same request ID
       
   192             }
       
   193         }
       
   194     
       
   195     // no tasks active anymore
       
   196     if ( cancel ) 
       
   197         {
       
   198         Cancel();
       
   199         TaskComplete(NULL);
       
   200         }
       
   201     
       
   202     if(!iTasks.Count())
       
   203         {
       
   204         iTasks.Compress();
       
   205         }
       
   206     
       
   207     TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - remaining task count: %d", iTasks.Count());
       
   208     OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILTASKPROCESSOR_REMOVETASK, "CThumbnailTaskProcessor::RemoveTask -  - remaining task count;iTasks.Count()=%d", iTasks.Count() );
       
   209     return res;
       
   210     }
       
   211 
       
   212 // ---------------------------------------------------------------------------
       
   213 // CThumbnailTaskProcessor::RemoveTasks()
       
   214 // Removes specific task from the queue.
       
   215 // ---------------------------------------------------------------------------
       
   216 //
       
   217 void CThumbnailTaskProcessor::RemoveTasks( CThumbnailServerSession* aSession )
       
   218     {
       
   219     TN_DEBUG1( "CThumbnailTaskProcessor::RemoveTasks()");
       
   220     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_REMOVETASKS, "CThumbnailTaskProcessor::RemoveTasks" );
       
   221     
       
   222     TBool cancel = EFalse;
       
   223     
       
   224     for ( TInt i = iTasks.Count(); --i >= 0; )
       
   225         {
       
   226         CThumbnailTask* task = iTasks[i];
       
   227         
       
   228         if ( task->RequestId().iSession == aSession)
       
   229             {
       
   230             if ( task->State() != CThumbnailTask::ERunning )
       
   231                 {
       
   232                 TThumbnailRequestId id = task->RequestId().iRequestId;
       
   233                 
       
   234                 // Remove task from queue
       
   235                 delete task;
       
   236                 task = NULL;
       
   237                 iTasks.Remove( i );
       
   238                 
       
   239                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id);
       
   240                 OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_REMOVETASKS, "CThumbnailTaskProcessor::RemoveTasks - removed request ID;id=%d", id );
       
   241                 }
       
   242             else
       
   243                 {
       
   244                 TN_DEBUG1( "CThumbnailTaskProcessor::RemoveTasks() - task still running");
       
   245                 OstTrace0( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_REMOVETASKS, "CThumbnailTaskProcessor::RemoveTasks - task still running" );
       
   246                 
       
   247                 TThumbnailRequestId id = task->RequestId().iRequestId;
       
   248                 
       
   249                 // Task is already running, canceled first
       
   250                 task->Cancel();
       
   251                 delete task;
       
   252                 task = NULL;
       
   253                 iTasks.Remove( i );
       
   254                 cancel = ETrue;
       
   255                 
       
   256                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - canceled & removed request ID: %d", id);
       
   257                 OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILTASKPROCESSOR_REMOVETASKS, "CThumbnailTaskProcessor::RemoveTasks - canceled & removed request ID;id=%d", id );
       
   258                 }
       
   259             }
       
   260         }
       
   261     
       
   262     // no tasks active anymore
       
   263     if ( cancel ) 
       
   264         {
       
   265         Cancel();
       
   266         TaskComplete(NULL);
       
   267         }
       
   268     
       
   269     TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - remaining task count: %d", iTasks.Count());
       
   270     OstTrace1( TRACE_NORMAL, DUP4_CTHUMBNAILTASKPROCESSOR_REMOVETASKS, "CThumbnailTaskProcessor::RemoveTasks - remaining task count;iTasks.Count()=%d", iTasks.Count() );
       
   271     }
       
   272 
       
   273 // ---------------------------------------------------------------------------
       
   274 // CThumbnailTaskProcessor::RemoveAllTasks()
       
   275 // Removes specific task from the queue.
       
   276 // ---------------------------------------------------------------------------
       
   277 //
       
   278 void CThumbnailTaskProcessor::RemoveAllTasks()
       
   279     {
       
   280     TN_DEBUG1( "CThumbnailTaskProcessor::RemoveAllTasks()");
       
   281     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_REMOVEALLTASKS, "CThumbnailTaskProcessor::RemoveAllTasks" );
       
   282     
       
   283     TBool cancel = EFalse;
       
   284     
       
   285     for ( TInt i = iTasks.Count(); --i >= 0; )
       
   286         {
       
   287         CThumbnailTask* task = iTasks[i];
       
   288         if ( task->State() != CThumbnailTask::ERunning )
       
   289             {
       
   290             TThumbnailRequestId id = task->RequestId().iRequestId;
       
   291             
       
   292             // Remove task from queue
       
   293             delete task;
       
   294             task = NULL;
       
   295             iTasks.Remove( i );
       
   296             
       
   297             TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id);
       
   298             OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_REMOVEALLTASKS, "CThumbnailTaskProcessor::RemoveAllTasks -  removed request ID;id=%d", id );
       
   299             }
       
   300         else
       
   301             {
       
   302             TN_DEBUG1( "CThumbnailTaskProcessor::RemoveTasks() - task still running");
       
   303             OstTrace0( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_REMOVEALLTASKS, "CThumbnailTaskProcessor::RemoveAllTasks - task still running" );
       
   304             
       
   305             TThumbnailRequestId id = task->RequestId().iRequestId;
       
   306             
       
   307             // Task is already running, canceled first
       
   308             task->Cancel();
       
   309             delete task;
       
   310             task = NULL;
       
   311             iTasks.Remove( i );
       
   312             cancel = ETrue;
       
   313             
       
   314             TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - canceled & removed request ID: %d", id);
       
   315             OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILTASKPROCESSOR_REMOVEALLTASKS, "CThumbnailTaskProcessor::RemoveAllTasks - canceled & removed request ID;id=%d", id );
       
   316             }
       
   317         }
       
   318     
       
   319     // no tasks active anymore
       
   320     if ( cancel ) 
       
   321         {
       
   322         Cancel();
       
   323         TaskComplete(NULL);
       
   324         }
       
   325     
       
   326     TN_DEBUG1( "CThumbnailTaskProcessor::RemoveAllTasks() - Task removed because of starting format" );
       
   327     OstTrace0( TRACE_NORMAL, DUP4_CTHUMBNAILTASKPROCESSOR_REMOVEALLTASKS, "CThumbnailTaskProcessor::RemoveAllTasks - Task removed because of starting format" );
       
   328     }
       
   329 
       
   330 // ---------------------------------------------------------------------------
       
   331 // CThumbnailTaskProcessor::ChangeTaskPriority()
       
   332 // Changes priority of a task.
       
   333 // ---------------------------------------------------------------------------
       
   334 //
       
   335 TInt CThumbnailTaskProcessor::ChangeTaskPriority( const
       
   336     TThumbnailServerRequestId& aRequestId, const TInt aNewPriority )
       
   337     {
       
   338     TInt err = KErrNotFound;
       
   339     const TInt count = iTasks.Count();
       
   340     for ( TInt i( 0 ); i < count; i++ )
       
   341         {
       
   342         if ( iTasks[i]->RequestId() == aRequestId )
       
   343             {
       
   344             iTasks[i]->ChangeTaskPriority( aNewPriority );
       
   345             err = KErrNone;
       
   346             break;
       
   347             }
       
   348         }
       
   349     return err;
       
   350     }
       
   351 
       
   352 
       
   353 // ---------------------------------------------------------------------------
       
   354 // CThumbnailTaskProcessor::RunL()
       
   355 // ---------------------------------------------------------------------------
       
   356 //
       
   357 void CThumbnailTaskProcessor::RunL()
       
   358     {
       
   359     iActiveTask = NULL;
       
   360     TInt priority( KMinTInt );
       
   361     TInt taskPriority;
       
   362     TBool processingDaemonTasksOnly(ETrue);
       
   363     
       
   364 #ifdef _DEBUG
       
   365     TN_DEBUG2( "CThumbnailTaskProcessor::TASKPROCESSOR-COUNTER---------- in, Tasks = %d", iTasks.Count() );
       
   366     OstTrace1( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::TASKPROCESSOR-COUNTER---------- in, Tasks;iTasks.Count()=%d", iTasks.Count() );
       
   367 #endif
       
   368     
       
   369     // remove completed tasks and run priorised task
       
   370     for ( TInt i = iTasks.Count(); --i >= 0; )
       
   371         {
       
   372         CThumbnailTask* task = iTasks[i];
       
   373         if ( task->State() == CThumbnailTask::EComplete )
       
   374             {
       
   375             // Delete completed task
       
   376             delete task;
       
   377             task = NULL;
       
   378             iTasks.Remove( i );
       
   379             }
       
   380         else
       
   381             {
       
   382             if( task->State() == CThumbnailTask::EIdle )
       
   383                 {
       
   384                 taskPriority = task->Priority();
       
   385                 if ( taskPriority > priority )
       
   386                     {
       
   387                     priority = taskPriority;
       
   388                     iActiveTask = task;
       
   389                     }
       
   390                 }
       
   391             
       
   392             if ( processingDaemonTasksOnly && task->ClientThreadAlive() )
       
   393                 {
       
   394                 if(task->GetMessageData().Identity() != KDaemonUid )
       
   395                     {
       
   396                     TN_DEBUG1( "CThumbnailTaskProcessor::RunL() processingDaemonTasksOnly = EFalse" );
       
   397                     OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::RunL processingDaemonTasksOnly = EFalse" );
       
   398                     processingDaemonTasksOnly = EFalse; 
       
   399                     }
       
   400                 }
       
   401             }
       
   402         }
       
   403 
       
   404     if ( iActiveTask )
       
   405         {
       
   406         iActiveTask->StartL();
       
   407         }
       
   408     
       
   409 #ifdef _DEBUG
       
   410     TN_DEBUG2( "CThumbnailTaskProcessor::TASKPROCESSOR-COUNTER---------- out, Tasks = %d", iTasks.Count() );
       
   411     OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::TASKPROCESSOR-COUNTER---------- out, Tasks;iTasks.Count()=%d", iTasks.Count() );
       
   412 #endif
       
   413 
       
   414 	//update PS value for Daemon
       
   415     if( iTasks.Count() > 0 && iIdle && !processingDaemonTasksOnly)
       
   416         {
       
   417         //set not idle
       
   418         if(iTimerActive)
       
   419            {
       
   420            iPeriodicTimer->Cancel();
       
   421            iTimerActive = EFalse;
       
   422            }
       
   423         TInt ret = iProperty.Set( EFalse );
       
   424         TN_DEBUG2( "CThumbnailTaskProcessor::RunL() iProperty Set EFalse %d", ret );
       
   425         OstTrace1( TRACE_NORMAL, DUP3_CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::RunL - iProperty Set EFalse;ret=%d", ret );
       
   426         iIdle = EFalse;
       
   427         }
       
   428     else
       
   429         {
       
   430         if(!iIdle)
       
   431             {
       
   432             //set idle    
       
   433             if(iIsDaemonAsProcess)
       
   434                {
       
   435                if(iTimerActive)
       
   436                  {
       
   437                  iPeriodicTimer->Cancel();
       
   438                  iTimerActive = EFalse;
       
   439                  } 
       
   440                TN_DEBUG1( "CThumbnailTaskProcessor::RunL() - daemon is the process");
       
   441                OstTrace0( TRACE_NORMAL, DUP4_CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::RunL - daemon is the process" );
       
   442                TInt ret = iProperty.Set( ETrue );
       
   443                TN_DEBUG2( "CThumbnailTaskProcessor::RunL() iProperty Set ETrue %d", ret );
       
   444                iIdle = ETrue;
       
   445                }
       
   446             else
       
   447                {
       
   448                TN_DEBUG1( "CThumbnailTaskProcessor::RunL() - daemon is not the process - start timer");
       
   449                OstTrace0( TRACE_NORMAL, DUP5_CTHUMBNAILTASKPROCESSOR_RUNL, "CThumbnailTaskProcessor::RunL - daemon is not the process - start timer" );
       
   450                if(iTimerActive)
       
   451                   {
       
   452                   iPeriodicTimer->Cancel();
       
   453                   iTimerActive = EFalse;
       
   454                   }  
       
   455                iPeriodicTimer->Start( KHarvestingCompleteTimeout, KHarvestingCompleteTimeout, 
       
   456                                    TCallBack(PeriodicTimerCallBack, this));
       
   457                iTimerActive = ETrue;
       
   458                }
       
   459             }
       
   460         }
       
   461     }
       
   462 
       
   463 // ---------------------------------------------------------------------------
       
   464 // Handle any error from RunL
       
   465 // ---------------------------------------------------------------------------
       
   466 //
       
   467 TInt CThumbnailTaskProcessor::RunError( TInt aError )
       
   468     {
       
   469     TN_DEBUG1( "CThumbnailTaskProcessor::RunError()");
       
   470     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_RUNERROR, "CThumbnailTaskProcessor::RunError" );
       
   471     if ( iActiveTask )
       
   472         {
       
   473         // This will complete the task and continue processing from the
       
   474         // next task
       
   475         iActiveTask->StartError( aError );
       
   476         }
       
   477     return KErrNone;
       
   478     }
       
   479 
       
   480 // ---------------------------------------------------------------------------
       
   481 // CThumbnailTaskProcessor::DoCancel()
       
   482 // ---------------------------------------------------------------------------
       
   483 //
       
   484 void CThumbnailTaskProcessor::DoCancel()
       
   485     {
       
   486     // No implementation required
       
   487     }
       
   488 
       
   489 
       
   490 // ---------------------------------------------------------------------------
       
   491 // CThumbnailTaskProcessor::TaskComplete()
       
   492 // Marks task to completed
       
   493 // ---------------------------------------------------------------------------
       
   494 //
       
   495 void CThumbnailTaskProcessor::TaskComplete( CThumbnailTask*  /*aTask*/ )
       
   496     {
       
   497     TN_DEBUG1( "CThumbnailTaskProcessor::TaskComplete()");
       
   498     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_TASKCOMPLETE, "CThumbnailTaskProcessor::TaskComplete" );
       
   499  
       
   500     if ( iTasks.Count() && !IsActive())
       
   501         {
       
   502         // More tasks yet to be run
       
   503         SetActive();
       
   504         TRequestStatus* statusPtr = &iStatus;
       
   505         User::RequestComplete( statusPtr, KErrNone );
       
   506         }
       
   507     else if( iTasks.Count() == 0 && !iIdle)
       
   508         {
       
   509         if(iIsDaemonAsProcess)
       
   510             {
       
   511             if(iTimerActive)
       
   512               {
       
   513               iPeriodicTimer->Cancel();
       
   514               iTimerActive = EFalse;
       
   515               } 
       
   516             TN_DEBUG1( "CThumbnailTaskProcessor::TaskComplete() - daemon is the process");
       
   517             OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_TASKCOMPLETE, "CThumbnailTaskProcessor::TaskComplete - daemon is the process" );
       
   518             TInt ret = iProperty.Set( ETrue );
       
   519             TN_DEBUG2( "CThumbnailTaskProcessor::TaskComplete() iProperty Set ETrue %d", ret );
       
   520             OstTrace1( TRACE_NORMAL, DUP2_CTHUMBNAILTASKPROCESSOR_TASKCOMPLETE, "CThumbnailTaskProcessor::TaskComplete - iProperty Set ETrue;ret=%d", ret );
       
   521             iIdle = ETrue;
       
   522             }
       
   523         else
       
   524             {
       
   525             if(iTimerActive)
       
   526               {
       
   527               iPeriodicTimer->Cancel();
       
   528               iTimerActive = EFalse;
       
   529               }  
       
   530             iPeriodicTimer->Start( KPSKeyTimeout, KPSKeyTimeout, 
       
   531                              TCallBack(PeriodicTimerCallBack, this));
       
   532             iTimerActive = ETrue;
       
   533             }
       
   534         }
       
   535     }
       
   536 
       
   537 // ---------------------------------------------------------------------------
       
   538 // CThumbnailTaskProcessor::PeriodicTimerCallBack()
       
   539 // ---------------------------------------------------------------------------
       
   540 //
       
   541 TInt CThumbnailTaskProcessor::PeriodicTimerCallBack(TAny* aAny)
       
   542     {
       
   543     TN_DEBUG1( "CThumbnailTaskProcessor::PeriodicTimerCallBack()");
       
   544     OstTrace0( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_PERIODICTIMERCALLBACK, "CThumbnailTaskProcessor::PeriodicTimerCallBack" );
       
   545     
       
   546     CThumbnailTaskProcessor* self = static_cast<CThumbnailTaskProcessor*>( aAny );
       
   547     
       
   548     self->iTimerActive = EFalse;
       
   549     self->iPeriodicTimer->Cancel();
       
   550     TInt ret = self->iProperty.Set( ETrue );
       
   551     TN_DEBUG2( "CThumbnailTaskProcessor::PeriodicTimerCallBack() iProperty Set ETrue %d", ret );
       
   552     OstTrace1( TRACE_NORMAL, DUP1_CTHUMBNAILTASKPROCESSOR_PERIODICTIMERCALLBACK, "CThumbnailTaskProcessor::PeriodicTimerCallBack - iProperty Set ETrue;ret=%d", ret );
       
   553     self->iIdle = ETrue;
       
   554 
       
   555     return KErrNone; // Return value ignored by CPeriodic
       
   556     }
       
   557 
       
   558 void CThumbnailTaskProcessor::SetDaemonAsProcess(TBool aValue)
       
   559     {
       
   560     TN_DEBUG2( "CThumbnailTaskProcessor::SetDaemonAsProcess() Daemon set %d", aValue );
       
   561     OstTrace1( TRACE_NORMAL, CTHUMBNAILTASKPROCESSOR_SETDAEMONASPROCESS, "CThumbnailTaskProcessor::SetDaemonAsProcess - Daemon set;aValue=%d", aValue );
       
   562     iIsDaemonAsProcess = aValue;
       
   563     }
       
   564 
       
   565 
       
   566 // End of file