imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h
branchGCC_SURGE
changeset 32 a0ee3f735f8b
parent 30 b67379558a75
child 31 d429f823a6b7
equal deleted inserted replaced
26:ea43e3e86079 32:a0ee3f735f8b
    30 #include <e32property.h>
    30 #include <e32property.h>
    31 #include <mpxcollectionobserver.h>
    31 #include <mpxcollectionobserver.h>
    32 #include "tmactivitymanager.h"
    32 #include "tmactivitymanager.h"
    33 #include "tmformatobserver.h"
    33 #include "tmformatobserver.h"
    34 #include "tmrpropertyobserver.h"
    34 #include "tmrpropertyobserver.h"
       
    35 #include "thumbnailmanagerconstants.h"
    35 
    36 
    36 //FORWARD DECLARATIONS
    37 //FORWARD DECLARATIONS
    37 class MMPXCollectionUtility;
    38 class MMPXCollectionUtility;
       
    39 
       
    40 
       
    41 enum TThumbnailGenerationItemType
       
    42       {
       
    43       EGenerationItemTypeUnknown,
       
    44       EGenerationItemTypeNotFound,
       
    45       EGenerationItemTypeCamera,
       
    46       EGenerationItemTypeAny,
       
    47       EGenerationItemTypeAudio,
       
    48       EGenerationItemTypeVideo,
       
    49       EGenerationItemTypeImage,
       
    50       EGenerationItemTypeItemCount
       
    51       };
       
    52 
       
    53   enum TThumbnailGenerationItemAction
       
    54       {
       
    55       EGenerationItemActionAdd,
       
    56       EGenerationItemActionDelete,
       
    57       EGenerationItemActionModify,
       
    58       EGenerationItemAction2ndAdd,
       
    59       EGenerationItemActionResolveType,
       
    60       EGenerationItemActionCount
       
    61       };
       
    62 
       
    63   struct TThumbnailGenerationItem
       
    64       {
       
    65       inline TThumbnailGenerationItem(): iItemId( KErrNotFound ), iItemType(EGenerationItemTypeUnknown), iItemAction(EGenerationItemActionAdd), iPlaceholder(EFalse), iUri(NULL){}
       
    66       inline ~TThumbnailGenerationItem(){delete iUri; iUri = NULL;}
       
    67       
       
    68       TItemId iItemId;
       
    69       TThumbnailGenerationItemType iItemType;
       
    70       TThumbnailGenerationItemAction iItemAction;
       
    71       TBool iPlaceholder;
       
    72       HBufC* iUri;
       
    73       };
    38 
    74 
    39 /**
    75 /**
    40  *  Processor object for handling thumb generation
    76  *  Processor object for handling thumb generation
    41  *
    77  *
    42  *  @since S60 v5.0
    78  *  @since S60 v5.0
    43  */
    79  */
    44 class CThumbAGProcessor: public CActive,
    80 class CThumbAGProcessor: public CActive,
    45                          public MThumbnailManagerObserver,
    81                          public MThumbnailManagerObserver,
       
    82                          public MThumbnailManagerRequestObserver,
    46                          public MMdEQueryObserver,
    83                          public MMdEQueryObserver,
    47                          public MHarvesterEventObserver,
    84                          public MHarvesterEventObserver,
    48                          public MMPXCollectionObserver,
    85                          public MMPXCollectionObserver,
    49                          public MTMActivityManagerObserver,
    86                          public MTMActivityManagerObserver,
    50                          public MTMFormatObserver,
    87                          public MTMFormatObserver,
    76     void HandleQueryCompleted( CMdEQuery& aQuery, TInt aError );
   113     void HandleQueryCompleted( CMdEQuery& aQuery, TInt aError );
    77     
   114     
    78     // from MThumbnailManagerObserver
   115     // from MThumbnailManagerObserver
    79     void ThumbnailPreviewReady( MThumbnailData& aThumbnail, TThumbnailRequestId aId );
   116     void ThumbnailPreviewReady( MThumbnailData& aThumbnail, TThumbnailRequestId aId );
    80     void ThumbnailReady( TInt aError, MThumbnailData& aThumbnail, TThumbnailRequestId aId );
   117     void ThumbnailReady( TInt aError, MThumbnailData& aThumbnail, TThumbnailRequestId aId );
       
   118     // from MThumbnailManagerRequestObserver
       
   119     void ThumbnailRequestReady( TInt aError, TThumbnailRequestType aRequestType, TThumbnailRequestId aId  );
    81 
   120 
    82     // from MHarvesterEventObserver
   121     // from MHarvesterEventObserver
    83     void HarvestingUpdated( 
   122     void HarvestingUpdated( 
    84              HarvesterEventObserverType aHEObserverType, 
   123              HarvesterEventObserverType aHEObserverType, 
    85              HarvesterEventState aHarvesterEventState,
   124              HarvesterEventState aHarvesterEventState,
   114      * Sets MdE Session
   153      * Sets MdE Session
   115      *
   154      *
   116      * @since S60 v5.0
   155      * @since S60 v5.0
   117      * @param aMdESession MdE Session
   156      * @param aMdESession MdE Session
   118      */
   157      */
   119     void SetMdESession( CMdESession* aMdESession );    
   158     void SetMdESessionL( CMdESession* aMdESession );    
   120     
   159     
   121     /**
   160     /**
   122      * Adds new IDs to queue
   161      * Adds new IDs to queue
   123      *
   162      *
   124      * @since S60 v5.0
   163      * @since S60 v5.0
   125      * @param aType TObserverNotificationType
   164      * @param aType TObserverNotificationType
       
   165 	 * @param TThumbnailGenerationItemType
   126      * @param aIDArray IDs for thumbnail creation
   166      * @param aIDArray IDs for thumbnail creation
   127      * @param aForce pass ETrue if processor is forced to run without waiting harvesting complete
   167      * @param aForce pass ETrue if processor is forced to run without waiting harvesting complete
   128      */
   168      */
   129     void AddToQueueL( TObserverNotificationType aType, const RArray<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray, TBool aPresent );
   169     void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType, const RArray<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray, TBool aPresent );
   130     
   170     
   131     /**
   171     /**
   132      * Calls Thumbnail Manager to create thumbnails
   172      * Calls Thumbnail Manager to create thumbnails
   133      *
   173      *
   134      * @since S60 v5.0
   174      * @since S60 v5.0
   143      * @param aIDArray IDs for thumbnail creation
   183      * @param aIDArray IDs for thumbnail creation
   144      */
   184      */
   145     void RemoveFromQueues( const RArray<TItemId>& aIDArray, const TBool aRemoveFromDelete = EFalse);
   185     void RemoveFromQueues( const RArray<TItemId>& aIDArray, const TBool aRemoveFromDelete = EFalse);
   146     
   186     
   147     void SetForceRun( const TBool aForceRun );
   187     void SetForceRun( const TBool aForceRun );
       
   188 	
       
   189 	//prepare processor for shutdown
       
   190 	void Shutdown();
   148     
   191     
   149 protected:
   192 protected:
   150     
   193     
   151     void QueryAllItemsL();
   194     void QueryAllItemsL();
   152     
   195     
   153     /**
   196     /**
   154      * QueryL
   197      * QueryL
   155      *
   198      *
   156      * @since S60 v5.0
   199      * @since S60 v5.0
   157      * @param aIDArray Item IDs to query
   200      * @param TThumbnailGenerationItemAction
   158      */
   201      */
   159     void QueryL( RArray<TItemId>& aIDArray );
   202     void QueryL( TThumbnailGenerationItemAction aType);
   160     
   203     
   161 	 /**
   204 	 /**
   162      * QueryPlaceholdersL
   205      * QueryPlaceholdersL
   163      *
   206      *
   164      * @since S60 v5.0
   207      * @since S60 v5.0
   165      */
   208 	 * @param aPresent item should not be present item
   166     void QueryPlaceholdersL();
   209      */
       
   210     void QueryPlaceholdersL(const TBool aPresent);
   167 
   211 
   168    	 /**
   212    	 /**
   169      * DeleteAndCancelQuery
   213      * DeleteAndCancelQuery
   170      *
   214      *
   171      * @since Symbian^3
   215      * @since Symbian^3
   252      * Update KItemsLeft PS value
   296      * Update KItemsLeft PS value
   253      * 
   297      * 
   254      * @since S60 v5.0
   298      * @since S60 v5.0
   255  	 * @param aDefine (re)define PS key before setting value
   299  	 * @param aDefine (re)define PS key before setting value
   256      */
   300      */
   257     void UpdatePSValues(const TBool aDefine = EFalse);
   301     void UpdatePSValues(const TBool aDefine, const TBool aForce);
   258        
   302        
   259     /**
   303     /**
   260      * Comparison function for logaritmic use of queue arrays
   304      * Comparison function for logaritmic use of queue arrays
   261      * 
   305      * 
   262      * @since S60 v5.0
   306      * @since S60 S^3
   263      */
   307      */
   264     static TInt Compare(const TItemId& aLeft, const TItemId& aRight);
   308     static TInt Compare(const TThumbnailGenerationItem& aLeft, const TThumbnailGenerationItem& aRight);
       
   309 	
       
   310 	 /**
       
   311      * Comparison function for logaritmic use of queue arrays
       
   312      * 
       
   313      * @since S60 S^3
       
   314      */
       
   315     static TInt CompareId(const TItemId& aLeft, const TItemId& aRight);
       
   316     
       
   317 	/**
       
   318      * Recalculate item counts
       
   319      * 
       
   320      * @since S60 S^3
       
   321      */
       
   322     void UpdateItemCounts();
       
   323 	
       
   324     /**
       
   325      * Callback for mount timeout
       
   326      *
       
   327      * @since S60 v5.0
       
   328      */
       
   329     static TInt MountTimerCallBack(TAny* aAny);
       
   330     
       
   331 	 /**
       
   332      * Set item's action from type
       
   333      *
       
   334      * @since S^3
       
   335      */
       
   336     void SetGenerationItemAction( TThumbnailGenerationItem& aGenerationItem, const TThumbnailGenerationItemType aItemType );
       
   337 	
       
   338      /**
       
   339      * Set item type property from TDedIf
       
   340      * @param aGenerationItem TThumbnailGenerationItem
       
   341      * @param aItemType TThumbnailGenerationItemType
       
   342      * @since S^3
       
   343      */
       
   344     void SetGenerationItemType( TThumbnailGenerationItem& aGenerationItem, const TDefId aDefId );
       
   345  
       
   346      /**
       
   347      * Append item to processing queue or update existing
       
   348      * @param aGenerationItem modified TThumbnailGenerationItem
       
   349      * @param aDefId items MDS object definition ID
       
   350      * @since S^3
       
   351      */
       
   352     void AppendProcessingQueue(TThumbnailGenerationItem& item );
   265         
   353         
   266 private:
   354 private:
   267     
   355     
   268     // not own
   356     // not own
   269     CMdESession* iMdESession;
   357     CMdESession* iMdESession;
   273     CThumbnailManager* iTMSession;
   361     CThumbnailManager* iTMSession;
   274     CMdEObjectQuery* iQuery;
   362     CMdEObjectQuery* iQuery;
   275     CMdEObjectQuery* iQueryAllItems;
   363     CMdEObjectQuery* iQueryAllItems;
   276     CMdEObjectQuery* iQueryPlaceholders;
   364     CMdEObjectQuery* iQueryPlaceholders;
   277     
   365     
   278     RArray<TItemId> iAddQueue;
   366     RArray<TThumbnailGenerationItem> iGenerationQueue;
   279     RArray<TItemId> iModifyQueue;
   367     //RPointerArray<HBufC> iRemoveQueue;
   280     RPointerArray<HBufC> iRemoveQueue;
       
   281     RArray<TItemId> iQueryQueue;
   368     RArray<TItemId> iQueryQueue;
   282     RArray<TItemId> iPlaceholderQueue;
       
   283     //not processing queue, used to keep KItemsLeft PS correct
       
   284     RArray<TItemId> i2ndRoundGenerateQueue;
       
   285 	//reference to current processing queue
       
   286     RArray<TItemId>* iLastQueue;
       
   287     
   369     
   288 	//background generation state
   370 	//background generation state
   289 	// EFalse = 1st round, create only grid size thumbnail for images and videos
   371 	// EFalse = 1st round, create only grid size thumbnail for images and videos
   290 	// ETrue = 2nds round, create all missing sizes for all media items
   372 	// ETrue = 2nds round, create all missing sizes for all media items
   291     TBool i2ndRound;    
   373     TBool i2ndRound;    
       
   374 	
       
   375 	// query state
       
   376 	// EFalse = normal mode
       
   377 	// ETrue = querying unknown items
       
   378     TBool iUnknown;
   292     
   379     
   293 	//MDS query issues
   380 	//MDS query issues
   294     TBool iQueryActive;
   381     TBool iQueryActive;
   295 	//MDS query complete
   382 	//MDS query complete
   296     TBool iQueryReady;
   383     TBool iQueryReady;
   297     
   384     
   298 	//Processing MDS itens which are modified
   385 	//Processing MDS itens which are modified
   299     TBool iModify;
   386     TBool iModify;
   300     TInt iProcessingCount;
   387     TUint iProcessingCount;
   301 
   388 
   302     //MDS harvester's overall state
   389     //MDS harvester's overall state
   303     TBool iHarvesting;
   390     TBool iHarvesting;
   304     TBool iHarvestingTemp;
   391     TBool iHarvestingTemp;
   305 
   392 
   309     
   396     
   310     //MDS Harvester's SD card harvesting state
   397     //MDS Harvester's SD card harvesting state
   311     TBool iMMCHarvesting;
   398     TBool iMMCHarvesting;
   312     TBool iMMCHarvestingTemp;
   399     TBool iMMCHarvestingTemp;
   313     
   400     
   314     
       
   315     CPeriodic* iPeriodicTimer;
   401     CPeriodic* iPeriodicTimer;
       
   402     CPeriodic* iMountTimer;
   316 
   403 
   317 	//MDS Harvester client
   404 	//MDS Harvester client
   318     RHarvesterClient iHarvesterClient;
   405     RHarvesterClient iHarvesterClient;
   319 
   406 
   320     //Set when running RunL() first time
   407     //Set when running RunL() first time
   321     TBool iInit;
   408     TBool iInit;
   322     
   409     
   323     //2nd phase init after MDE session is open
   410     //2nd phase init after MDE session is open
   324     TBool iInit2;
   411     TBool iInit2;
   325     
   412     
   326     // auto create
   413     // auto create values from centrep
   327     TBool iAutoImage;
   414     TBool iAutoImage;
   328     TBool iAutoVideo;
   415     TBool iAutoVideo;
   329     TBool iAutoAudio;
   416     TBool iAutoAudio;
   330     
   417     
   331     // in case of modified files force TN update
   418     // in case of modified files force TN update
   332     TBool iForceRun; 
   419     TBool iForceRun; 
   333     // controlled by Photos application to run TN generation on foreground
   420     // controlled by Photos application to run TN generation on foreground
   334     TBool iForegroundRun;
   421     TBool iForegroundRun;
   335 	//request pending in TNM side
   422 	//request pending in TNM side
   336     TBool iActive;
       
   337    
   423    
   338     CTMFormatObserver* iFormatObserver;
   424     CTMFormatObserver* iFormatObserver;
   339    
   425    
       
   426    //formating started
   340     TBool iFormatting;
   427     TBool iFormatting;
       
   428 	//TNM server session died
   341     TBool iSessionDied;
   429     TBool iSessionDied;
   342    
   430    
   343     TInt iActiveCount;
   431    //pending request count
       
   432     TUint iActiveCount;
   344     
   433     
   345     MMPXCollectionUtility* iCollectionUtility; // own
   434     MMPXCollectionUtility* iCollectionUtility; // own
   346     
   435     
   347 	//Flag is MPX harvesting or MTP synchronisation in progress
   436 	//Flag is MPX harvesting or MTP synchronisation in progress
   348     TBool iMPXHarvesting;
   437     TBool iMPXHarvesting;
   349     //inactivity polling timer
   438 
   350     CPeriodic* iInactivityTimer;
       
   351     //overall status of device
   439     //overall status of device
   352     TBool iIdle;
   440     TBool iIdle;
   353     
   441     
       
   442 	//monitors device activity
   354     CTMActivityManager* iActivityManager;
   443     CTMActivityManager* iActivityManager;
   355     
   444     
   356 	//Observer foreground generation 
   445 	//Observer foreground generation 
   357     CTMRPropertyObserver* iForegroundGenerationObserver;
   446     CTMRPropertyObserver* iForegroundGenerationObserver;
   358     
   447     
   359 	//Previously notified amount of items in processing queues (add/modify)
   448 	//Previously notified amount of items in processing queues (add/modify)
   360     TInt iPreviousItemsLeft;
   449     TInt iPreviousItemsLeft;
   361     TBool iPreviousDaemonProcessing; 
   450     TBool iPreviousDaemonProcessing; 
   362 	//set ETrue when QueryAllItems needs to be run after placeholder query
   451 	//set ETrue when QueryAllItems needs to be run after placeholder query
   363     TBool iDoQueryAllItems;
   452     TBool iDoQueryAllItems;
   364 };
   453     
       
   454     TBool iShutdown;
       
   455 	
       
   456 	//item counts
       
   457     TUint32 iModifyItemCount;
       
   458     TUint32 iImageItemCount;
       
   459     TUint32 iVideoItemCount;
       
   460     TUint32 iAudioItemCount;
       
   461     TUint32 iDeleteItemCount;
       
   462     TUint32 iAddItemCount;
       
   463     TUint32 iCameraItemCount;
       
   464     TUint32 iUnknownItemCount;
       
   465     TUint32 i2ndAddItemCount;
       
   466     TUint32 iPlaceholderItemCount;
       
   467     
       
   468     //for book keeping previous items left count got from MDS harvester
       
   469     TUint32 iMMCHarvestingItemsLeftTemp;
       
   470     TUint32 iPHHarvestingItemsLeftTemp;
       
   471     
       
   472 	//MdE object definitons used in query
       
   473     CMdEObjectDef* iImageObjectDef;
       
   474     CMdEObjectDef* iVideoObjectDef;
       
   475     CMdEObjectDef* iAudioObjectDef;
       
   476     TBool iHarvesterActivated;
       
   477   };
   365 
   478 
   366 #endif // THUMBAGPROCESSOR_H
   479 #endif // THUMBAGPROCESSOR_H