imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.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:  Thumbnail Auto Generate Daemon 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <e32svr.h>
       
    20 #include <centralrepository.h>
       
    21 
       
    22 #include <mdesession.h>
       
    23 #include <mdeconstants.h>
       
    24 #include <mdequery.h>
       
    25 #include <mdeobject.h>
       
    26 
       
    27 #include "thumbagaudioobserver.h"
       
    28 #include "thumbnaillog.h"
       
    29 #include "thumbnailmanagerconstants.h"
       
    30 #include "thumbnailmanagerprivatecrkeys.h"
       
    31 #include "OstTraceDefinitions.h"
       
    32 #ifdef OST_TRACE_COMPILER_IN_USE
       
    33 #include "thumbagaudioobserverTraces.h"
       
    34 #endif
       
    35 
       
    36 
       
    37 // ---------------------------------------------------------------------------
       
    38 // NewLC
       
    39 // ---------------------------------------------------------------------------
       
    40 //
       
    41 CThumbAGAudioObserver* CThumbAGAudioObserver::NewLC(CThumbAGProcessor* aProcessor)
       
    42     {
       
    43     TN_DEBUG1( "CThumbAGAudioObserver::NewLC() - begin" );
       
    44     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_NEWLC, "CThumbAGAudioObserver::NewLC" );
       
    45     
       
    46 	CThumbAGAudioObserver* self = new (ELeave) CThumbAGAudioObserver(aProcessor);
       
    47 	CleanupStack::PushL( self );
       
    48 	self->ConstructL();
       
    49 	return self;
       
    50 	}
       
    51 	
       
    52 // ---------------------------------------------------------------------------
       
    53 // NewL
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 CThumbAGAudioObserver* CThumbAGAudioObserver::NewL(CThumbAGProcessor* aProcessor)
       
    57 	{
       
    58 	TN_DEBUG1( "CThumbAGAudioObserver::NewL() - begin" );
       
    59     
       
    60 	CThumbAGAudioObserver* self = CThumbAGAudioObserver::NewLC(aProcessor);
       
    61 	CleanupStack::Pop( self );
       
    62 	return self;
       
    63 	}
       
    64 
       
    65 // ---------------------------------------------------------------------------
       
    66 // CThumbAGAudioObserver
       
    67 // ---------------------------------------------------------------------------
       
    68 //
       
    69 CThumbAGAudioObserver::CThumbAGAudioObserver(CThumbAGProcessor* aProcessor)
       
    70  	: iShutdownObserver(NULL), iMDSShutdownObserver(NULL), iMdESession(NULL), iProcessor(aProcessor)
       
    71  	{
       
    72  	// No implementation required
       
    73  	}
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 // ConstructL
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 void CThumbAGAudioObserver::ConstructL()
       
    80 	{
       
    81 	TN_DEBUG1( "CThumbAGAudioObserver::ConstructL() - begin" );
       
    82 	OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_CONSTRUCTL, "CThumbAGAudioObserver::ConstructL - begin" );
       
    83 	
       
    84 #ifdef _DEBUG
       
    85     iAddCounter = 0;
       
    86     iModCounter = 0;
       
    87 #endif
       
    88     
       
    89     InitializeL();
       
    90     	
       
    91 	TN_DEBUG1( "CThumbAGAudioObserver::ConstructL() - end" );
       
    92 	OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_CONSTRUCTL, "CThumbAGAudioObserver::ConstructL - end" );
       
    93 	}
       
    94 
       
    95 // ---------------------------------------------------------------------------
       
    96 // ~CThumbAGAudioObserver
       
    97 // ---------------------------------------------------------------------------
       
    98 //
       
    99 void CThumbAGAudioObserver::InitializeL()
       
   100     {
       
   101     TN_DEBUG1( "CThumbAGAudioObserver::InitializeL() - begin" );
       
   102     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_INITIALIZEL, "CThumbAGAudioObserver::InitializeL - begin" );
       
   103    
       
   104         TN_DEBUG1( "CThumbAGAudioObserver::InitializeL() - create observers" );
       
   105         OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_INITIALIZEL, "CThumbAGAudioObserver::InitializeL - create observers" );
       
   106         
       
   107         // create shutdown observer
       
   108         if(iMDSShutdownObserver)
       
   109             {
       
   110             delete iMDSShutdownObserver;
       
   111             iMDSShutdownObserver = NULL;
       
   112             }     
       
   113         iMDSShutdownObserver = CTMShutdownObserver::NewL( *this, KMdSPSShutdown, KMdSShutdown, EFalse );
       
   114 
       
   115         if(iShutdownObserver)
       
   116             {
       
   117             delete iShutdownObserver;
       
   118             iShutdownObserver = NULL;
       
   119             }
       
   120         iShutdownObserver = CTMShutdownObserver::NewL( *this, KTAGDPSNotification, KShutdown, ETrue );  
       
   121         iShutdown = EFalse;
       
   122         
       
   123         // MDS session reconnect timer
       
   124         if (!iReconnect)
       
   125             {
       
   126             iReconnect = CPeriodic::NewL(CActive::EPriorityIdle);
       
   127             }
       
   128         
       
   129         TN_DEBUG1( "CThumbAGAudioObserver::InitializeL() - connect to MDS" );
       
   130         OstTrace0( TRACE_FATAL, DUP2_CTHUMBAGAUDIOOBSERVER_INITIALIZEL, "CThumbAGAudioObserver::InitializeL - connect to MDS" );
       
   131         
       
   132         if(iMdESession)
       
   133             {
       
   134             TRAP_IGNORE( iMdESession->RemoveObjectObserverL( *this ) );
       
   135             TRAP_IGNORE( iMdESession->RemoveObjectObserverL( *this ) );
       
   136         
       
   137             // connect to MDS
       
   138             delete iMdESession;
       
   139             iMdESession = NULL;
       
   140             }
       
   141 
       
   142         iMdESession = CMdESession::NewL( *this );
       
   143         iSessionError = EFalse;
       
   144       
       
   145         TN_DEBUG1( "CThumbAGAudioObserver::InitializeL() - end" );
       
   146         OstTrace0( TRACE_FATAL, DUP3_CTHUMBAGAUDIOOBSERVER_INITIALIZEL, "CThumbAGAudioObserver::InitializeL - end" );
       
   147     }
       
   148 
       
   149 // ---------------------------------------------------------------------------
       
   150 // ~CThumbAGAudioObserver
       
   151 // ---------------------------------------------------------------------------
       
   152 //
       
   153 CThumbAGAudioObserver::~CThumbAGAudioObserver()
       
   154     {
       
   155     TN_DEBUG1( "CThumbAGAudioObserver::~CThumbAGAudioObserver() - begin" );
       
   156     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_CTHUMBAGAUDIOOBSERVER, "CThumbAGAudioObserver::~CThumbAGAudioObserver - begin" );
       
   157     
       
   158     iShutdown = ETrue;    
       
   159     
       
   160     Shutdown();
       
   161     
       
   162     TN_DEBUG1( "CThumbAGAudioObserver::~CThumbAGAudioObserver() - end" );
       
   163     OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_CTHUMBAGAUDIOOBSERVER, "CThumbAGAudioObserver::~CThumbAGAudioObserver - end" );
       
   164     }
       
   165 
       
   166 void CThumbAGAudioObserver::Shutdown()
       
   167     {
       
   168     TN_DEBUG1( "CThumbAGAudioObserver::Shutdown()" );
       
   169     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_SHUTDOWN, "CThumbAGAudioObserver::Shutdown" );
       
   170     
       
   171     delete iMDSShutdownObserver;
       
   172     iMDSShutdownObserver = NULL;
       
   173     delete iShutdownObserver;
       
   174     iShutdownObserver = NULL;
       
   175     
       
   176     if(iReconnect)
       
   177         {
       
   178         iReconnect->Cancel();
       
   179         delete iReconnect;
       
   180         iReconnect = NULL;
       
   181         }
       
   182     
       
   183     if (iMdESession)
       
   184         {
       
   185         // 2 observers
       
   186         TRAP_IGNORE( iMdESession->RemoveObjectObserverL( *this ) );
       
   187         TRAP_IGNORE( iMdESession->RemoveObjectObserverL( *this ) );
       
   188                 
       
   189         delete iMdESession;
       
   190         iMdESession = NULL;
       
   191         }
       
   192     }
       
   193 
       
   194 // -----------------------------------------------------------------------------
       
   195 // CThumbAGAudioObserver::HandleSessionOpened
       
   196 // -----------------------------------------------------------------------------
       
   197 //
       
   198 void CThumbAGAudioObserver::HandleSessionOpened( CMdESession& /* aSession */, TInt aError )
       
   199     {
       
   200     TN_DEBUG1( "CThumbAGAudioObserver::HandleSessionOpened");
       
   201     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_HANDLESESSIONOPENED, "CThumbAGAudioObserver::HandleSessionOpened" );
       
   202     
       
   203     if (aError == KErrNone)
       
   204         {
       
   205         TRAPD( err, AddObserversL() );
       
   206         if (err != KErrNone)
       
   207             {
       
   208             TN_DEBUG2( "CThumbAGAudioObserver::HandleSessionOpened, AddObserversL error == %d", err );
       
   209             OstTrace1( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_HANDLESESSIONOPENED, "CThumbAGAudioObserver::HandleSessionOpened;err=%d", err );
       
   210             }
       
   211         }
       
   212     else
       
   213         {
       
   214         TN_DEBUG2( "CThumbAGAudioObserver::HandleSessionOpened error == %d", aError );
       
   215         OstTrace1( TRACE_FATAL, DUP2_CTHUMBAGAUDIOOBSERVER_HANDLESESSIONOPENED, "CThumbAGAudioObserver::HandleSessionOpened;aError=%d", aError );
       
   216         }
       
   217     }
       
   218 
       
   219 // -----------------------------------------------------------------------------
       
   220 // CThumbAGAudioObserver::HandleSessionError
       
   221 // -----------------------------------------------------------------------------
       
   222 //
       
   223 void CThumbAGAudioObserver::HandleSessionError( CMdESession& /*aSession*/, TInt aError )
       
   224     {
       
   225     TN_DEBUG2( "CThumbAGAudioObserver::HandleSessionError == %d", aError );
       
   226     OstTrace1( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_HANDLESESSIONERROR, "CThumbAGAudioObserver::HandleSessionError;aError=%d", aError );
       
   227     if (aError != KErrNone && !iSessionError)
       
   228         {
       
   229         iSessionError = ETrue;
       
   230     
       
   231         if (!iShutdown)
       
   232             {
       
   233             if (!iReconnect->IsActive())
       
   234                 {
       
   235                 iReconnect->Start( KMdEReconnect, KMdEReconnect, 
       
   236                                    TCallBack(ReconnectCallBack, this));
       
   237                 
       
   238                 TN_DEBUG1( "CThumbAGAudioObserver::HandleSessionError() - reconnect timer started" );
       
   239                 OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_HANDLESESSIONERROR, "CThumbAGAudioObserver::HandleSessionError - reconnect timer started" );
       
   240                 }
       
   241             }
       
   242 
       
   243         }   
       
   244     }
       
   245 
       
   246 // -----------------------------------------------------------------------------
       
   247 // CThumbAGAudioObserver::HandleObjectNotification
       
   248 // -----------------------------------------------------------------------------
       
   249 //
       
   250 void CThumbAGAudioObserver::HandleObjectNotification( CMdESession& /*aSession*/, 
       
   251                                                TObserverNotificationType aType,
       
   252                                                const RArray<TItemId>& aObjectIdArray )
       
   253     {
       
   254     TN_DEBUG1( "CThumbAGAudioObserver::HandleObjectNotification() - begin" );
       
   255     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - begin" );
       
   256 
       
   257     // no processor or shutting down
       
   258     if ( iShutdown || !iProcessor)
       
   259         {
       
   260         return;
       
   261         }
       
   262     
       
   263 #ifdef _DEBUG
       
   264     if (aType == ENotifyAdd)
       
   265         {
       
   266         TN_DEBUG2( "CThumbAGAudioObserver::HandleObjectNotification() - ENotifyAdd %d", aObjectIdArray.Count() );
       
   267         OstTrace1( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - ENotifyAdd;aObjectIdArray.Count()=%d", aObjectIdArray.Count() );
       
   268         iAddCounter = aObjectIdArray.Count();
       
   269         }
       
   270     else if (aType == ENotifyModify)
       
   271         {
       
   272         TN_DEBUG2( "CThumbAGAudioObserver::HandleObjectNotification() - ENotifyModify %d", aObjectIdArray.Count() );
       
   273         OstTrace1( TRACE_FATAL, DUP2_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - ENotifyModify;aObjectIdArray.Count()=%d", aObjectIdArray.Count() );
       
   274         iModCounter = aObjectIdArray.Count();
       
   275         }
       
   276 #endif
       
   277     
       
   278     if ( (aType == ENotifyAdd || aType == ENotifyModify ) && (aObjectIdArray.Count() > 0) )
       
   279         {
       
   280         TN_DEBUG1( "CThumbAGAudioObserver::HandleObjectNotification() - AddToQueueL" );
       
   281         OstTrace0( TRACE_FATAL, DUP3_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - AddToQueueL" );
       
   282 
       
   283         // Add event to processing queue by type and enable force run        
       
   284         RPointerArray<HBufC> dummyArray;
       
   285         TRAPD(err, iProcessor->AddToQueueL(aType, EGenerationItemTypeAudio, aObjectIdArray, dummyArray, EFalse));
       
   286         if (err != KErrNone)
       
   287             {
       
   288             TN_DEBUG1( "CThumbAGAudioObserver::HandleObjectNotification() - error adding to queue" );
       
   289             OstTrace0( TRACE_FATAL, DUP4_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - error adding to queue" );
       
   290             }
       
   291         }
       
   292     else
       
   293         {
       
   294         TN_DEBUG1( "CThumbAGAudioObserver::HandleObjectNotification() - bad notification" );
       
   295         OstTrace0( TRACE_FATAL, DUP5_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - bad notification" );
       
   296         }
       
   297     
       
   298 #ifdef _DEBUG
       
   299     TN_DEBUG3( "CThumbAGAudioObserver::IN-COUNTERS---------- Add = %d Modify = %d", iAddCounter, iModCounter );
       
   300     OstTraceExt2( TRACE_FATAL, DUP6_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification;iAddCounter=%u;iModCounter=%u", iAddCounter, iModCounter );
       
   301     iModCounter = 0;
       
   302     iAddCounter = 0;
       
   303 #endif
       
   304 
       
   305     TN_DEBUG1( "CThumbAGAudioObserver::HandleObjectNotification() - end" );
       
   306     OstTrace0( TRACE_FATAL, DUP7_CTHUMBAGAUDIOOBSERVER_HANDLEOBJECTNOTIFICATION, "CThumbAGAudioObserver::HandleObjectNotification - end" );
       
   307     }
       
   308 
       
   309 // -----------------------------------------------------------------------------
       
   310 // CThumbAGAudioObserver::ShutdownNotification
       
   311 // -----------------------------------------------------------------------------
       
   312 //
       
   313 void CThumbAGAudioObserver::ShutdownNotification()
       
   314     {
       
   315     TN_DEBUG1( "CThumbAGAudioObserver::ShutdownNotification()" );
       
   316     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_SHUTDOWNNOTIFICATION, "CThumbAGAudioObserver::ShutdownNotification" );
       
   317     
       
   318     if (!iShutdown)
       
   319         {
       
   320         TN_DEBUG1( "CThumbAGAudioObserver::ShutdownNotification() shutdown" );
       
   321         OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_SHUTDOWNNOTIFICATION, "CThumbAGAudioObserver::ShutdownNotification - shutdown" );
       
   322         iShutdown = ETrue;
       
   323         }
       
   324     }
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // CThumbAGAudioObserver::AddObserversL
       
   328 // ---------------------------------------------------------------------------
       
   329 //
       
   330 void CThumbAGAudioObserver::AddObserversL()
       
   331     {
       
   332     TN_DEBUG1( "CThumbAGAudioObserver::AddObserversL() - begin" );
       
   333     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_ADDOBSERVERSL, "CThumbAGAudioObserver::AddObserversL - begin" );
       
   334     
       
   335     CMdENamespaceDef& defaultNamespace = iMdESession->GetDefaultNamespaceDefL();
       
   336     CMdEObjectDef& audioDef = defaultNamespace.GetObjectDefL( MdeConstants::Audio::KAudioObject );
       
   337     
       
   338     // set observing conditions
       
   339     CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
       
   340     addCondition->AddObjectConditionL( audioDef );
       
   341     
       
   342     CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
       
   343     modifyCondition->AddObjectConditionL( audioDef );
       
   344     
       
   345     // add observer
       
   346     iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); 
       
   347 
       
   348    // modify observer
       
   349    iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify );
       
   350    
       
   351    CleanupStack::Pop( 2, addCondition );
       
   352      
       
   353     TN_DEBUG1( "CThumbAGAudioObserver::AddObserversL() - end" );
       
   354     OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_ADDOBSERVERSL, "CThumbAGAudioObserver::AddObserversL - end" );
       
   355     }
       
   356 
       
   357 // ---------------------------------------------------------------------------
       
   358 // CThumbAGAudioObserver::ReconnectCallBack()
       
   359 // ---------------------------------------------------------------------------
       
   360 //
       
   361 TInt CThumbAGAudioObserver::ReconnectCallBack(TAny* aAny)
       
   362     {
       
   363     TN_DEBUG1( "CThumbAGAudioObserver::ReconnectCallBack() - reinitialize");
       
   364     OstTrace0( TRACE_FATAL, CTHUMBAGAUDIOOBSERVER_RECONNECTCALLBACK, "CThumbAGAudioObserver::ReconnectCallBack - reinitialize" );
       
   365     
       
   366     CThumbAGAudioObserver* self = static_cast<CThumbAGAudioObserver*>( aAny );
       
   367     
       
   368     self->iReconnect->Cancel();
       
   369     
       
   370     // reconnect to MDS
       
   371     TRAP_IGNORE( self->InitializeL() );
       
   372     
       
   373     TN_DEBUG1( "CThumbAGAudioObserver::ReconnectCallBack() - done");
       
   374     OstTrace0( TRACE_FATAL, DUP1_CTHUMBAGAUDIOOBSERVER_RECONNECTCALLBACK, "CThumbAGAudioObserver::ReconnectCallBack - done" );
       
   375     
       
   376     return KErrNone;
       
   377     }
       
   378 
       
   379 
       
   380 // End of file