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 |