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