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