114 // |
114 // |
115 CThumbAGProcessor::~CThumbAGProcessor() |
115 CThumbAGProcessor::~CThumbAGProcessor() |
116 { |
116 { |
117 TN_DEBUG1( "CThumbAGProcessor::~CThumbAGProcessor() - begin" ); |
117 TN_DEBUG1( "CThumbAGProcessor::~CThumbAGProcessor() - begin" ); |
118 |
118 |
119 if(iForegroundGenerationObserver) |
119 Shutdown(); |
120 { |
120 |
121 delete iForegroundGenerationObserver; |
121 Cancel(); |
122 iForegroundGenerationObserver = NULL; |
122 |
123 } |
123 if (iTMSession) |
|
124 { |
|
125 iTMSession->RemoveRequestObserver(); |
|
126 delete iTMSession; |
|
127 iTMSession = NULL; |
|
128 } |
|
129 |
|
130 if(iMountTimer) |
|
131 { |
|
132 iMountTimer->Cancel(); |
|
133 delete iMountTimer; |
|
134 iMountTimer = NULL; |
|
135 } |
|
136 |
|
137 if(iPeriodicTimer) |
|
138 { |
|
139 iPeriodicTimer->Cancel(); |
|
140 delete iPeriodicTimer; |
|
141 iPeriodicTimer = NULL; |
|
142 } |
124 |
143 |
125 if(iActivityManager) |
144 if(iActivityManager) |
126 { |
145 { |
127 delete iActivityManager; |
146 delete iActivityManager; |
128 iActivityManager = NULL; |
147 iActivityManager = NULL; |
129 } |
148 } |
130 |
149 |
131 if (iInactivityTimer) |
150 if (iQuery) |
132 { |
151 { |
133 iInactivityTimer->Cancel(); |
152 iQuery->Cancel(); |
134 delete iInactivityTimer; |
153 delete iQuery; |
135 iInactivityTimer = NULL; |
154 iQuery = NULL; |
136 } |
155 } |
137 |
|
138 if(iPeriodicTimer) |
|
139 { |
|
140 iPeriodicTimer->Cancel(); |
|
141 delete iPeriodicTimer; |
|
142 } |
|
143 |
|
144 if (!iInit) |
|
145 { |
|
146 #ifdef MDS_MODIFY_OBSERVER |
|
147 iHarvesterClient.RemoveHarvesterEventObserver(*this); |
|
148 iHarvesterClient.Close(); |
|
149 #endif |
|
150 } |
|
151 |
|
152 if ( iCollectionUtility ) |
|
153 { |
|
154 iCollectionUtility->Close(); |
|
155 iCollectionUtility = NULL; |
|
156 } |
|
157 |
|
158 Cancel(); |
|
159 |
156 |
160 if(iQueryPlaceholders) |
157 if(iQueryPlaceholders) |
161 { |
158 { |
162 iQueryPlaceholders->Cancel(); |
159 iQueryPlaceholders->Cancel(); |
163 delete iQueryPlaceholders; |
160 delete iQueryPlaceholders; |
164 iQueryPlaceholders = NULL; |
161 iQueryPlaceholders = NULL; |
165 } |
|
166 |
|
167 if (iQuery) |
|
168 { |
|
169 iQuery->Cancel(); |
|
170 delete iQuery; |
|
171 iQuery = NULL; |
|
172 } |
162 } |
173 |
163 |
174 if (iQueryAllItems) |
164 if (iQueryAllItems) |
175 { |
165 { |
176 iQueryAllItems->Cancel(); |
166 iQueryAllItems->Cancel(); |
177 delete iQueryAllItems; |
167 delete iQueryAllItems; |
178 iQueryAllItems = NULL; |
168 iQueryAllItems = NULL; |
179 } |
169 } |
180 |
170 |
181 iAddQueue.Close(); |
171 if (!iInit) |
182 iModifyQueue.Close(); |
172 { |
183 iRemoveQueue.ResetAndDestroy(); |
173 #ifdef MDS_MODIFY_OBSERVER |
|
174 iHarvesterClient.RemoveHarvesterEventObserver(*this); |
|
175 iHarvesterClient.Close(); |
|
176 #endif |
|
177 } |
|
178 |
|
179 if(iForegroundGenerationObserver) |
|
180 { |
|
181 delete iForegroundGenerationObserver; |
|
182 iForegroundGenerationObserver = NULL; |
|
183 } |
|
184 |
|
185 if(iFormatObserver) |
|
186 { |
|
187 delete iFormatObserver; |
|
188 iFormatObserver = NULL; |
|
189 } |
|
190 |
|
191 if ( iCollectionUtility ) |
|
192 { |
|
193 iCollectionUtility->Close(); |
|
194 iCollectionUtility = NULL; |
|
195 } |
|
196 |
|
197 for(TInt i=0;i<iGenerationQueue.Count();i++) |
|
198 { |
|
199 delete iGenerationQueue[i].iUri; |
|
200 iGenerationQueue[i].iUri = NULL; |
|
201 } |
|
202 |
|
203 iGenerationQueue.Reset(); |
|
204 iGenerationQueue.Close(); |
|
205 |
184 iQueryQueue.Close(); |
206 iQueryQueue.Close(); |
185 iPlaceholderQueue.Close(); |
|
186 |
|
187 i2ndRoundGenerateQueue.Close(); |
|
188 |
|
189 if (iTMSession) |
|
190 { |
|
191 delete iTMSession; |
|
192 iTMSession = NULL; |
|
193 } |
|
194 |
|
195 delete iFormatObserver; |
|
196 |
207 |
197 TN_DEBUG1( "CThumbAGProcessor::~CThumbAGProcessor() - end" ); |
208 TN_DEBUG1( "CThumbAGProcessor::~CThumbAGProcessor() - end" ); |
|
209 } |
|
210 |
|
211 // --------------------------------------------------------------------------- |
|
212 // CThumbAGProcessor::Shutdown() |
|
213 // --------------------------------------------------------------------------- |
|
214 // |
|
215 void CThumbAGProcessor::Shutdown() |
|
216 { |
|
217 TN_DEBUG1( "CThumbAGProcessor::Shutdown()" ); |
|
218 iShutdown = ETrue; |
|
219 UpdatePSValues(EFalse, EFalse); |
198 } |
220 } |
199 |
221 |
200 // ----------------------------------------------------------------------------- |
222 // ----------------------------------------------------------------------------- |
201 // CThumbAGProcessor::HandleQueryNewResults() |
223 // CThumbAGProcessor::HandleQueryNewResults() |
202 // ----------------------------------------------------------------------------- |
224 // ----------------------------------------------------------------------------- |
308 // if no errors in query |
349 // if no errors in query |
309 if (aError == KErrNone && iQuery) |
350 if (aError == KErrNone && iQuery) |
310 { |
351 { |
311 iProcessingCount = iQuery->Count(); |
352 iProcessingCount = iQuery->Count(); |
312 |
353 |
313 if(iProcessingCount != iQueryQueue.Count()) |
354 if(iProcessingCount != iQueryQueue.Count() ) |
314 { |
355 { |
315 TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted() some result items missing"); |
356 TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted() some result items missing"); |
316 |
357 |
317 RArray<TItemId> queryQueueDelta; |
358 RArray<TItemId> queryQueueDelta; |
318 |
359 |
319 TInt itemIndex(KErrNotFound); |
360 //search delta items which were queried, but not found |
320 |
361 for(TInt queryItem =0; queryItem < iQueryQueue.Count();queryItem++) |
321 //search delta items which were queried, but not found |
362 { |
322 for(TInt queryItem =0; queryItem < iQueryQueue.Count();queryItem++) |
363 TBool found(EFalse); |
323 { |
364 for(TInt queryResult = 0; queryResult < iQuery->Count(); queryResult++) |
324 TBool found(EFalse); |
365 { |
325 for(TInt queryResult = 0; queryResult < iQuery->Count(); queryResult++) |
366 const CMdEObject* object = &iQuery->Result(queryResult); |
326 { |
367 |
327 const CMdEObject* object = &iQuery->Result(queryResult); |
368 if( iQueryQueue[queryItem] == object->Id()) |
328 |
369 { |
329 if( iQueryQueue[queryItem] == object->Id()) |
370 found = ETrue; |
|
371 break; |
|
372 } |
|
373 } |
|
374 |
|
375 if(!found) |
|
376 { |
|
377 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() %d missing from query results", iQueryQueue[queryItem] ); |
|
378 |
|
379 // ignore if fails |
|
380 queryQueueDelta.InsertInOrder(iQueryQueue[queryItem], CompareId); |
|
381 } |
|
382 } |
|
383 |
|
384 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing items found %d", queryQueueDelta.Count()); |
|
385 //cleanup from previous queue it item is not found from MDS |
|
386 while(queryQueueDelta.Count()) |
|
387 { |
|
388 TThumbnailGenerationItem item; |
|
389 item.iItemId = queryQueueDelta[0]; |
|
390 TInt itemIndex = iQueryQueue.FindInOrder(item.iItemId, CompareId); |
|
391 |
|
392 if(itemIndex >= 0) |
|
393 { |
|
394 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove %d from iQueryQueue", queryQueueDelta[0]); |
|
395 iQueryQueue.Remove( itemIndex ); |
|
396 |
|
397 //remove from procesing queue |
|
398 itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
|
399 |
|
400 if(itemIndex >= 0) |
|
401 { |
|
402 |
|
403 if( iUnknown ) |
|
404 { |
|
405 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() mark %d as EGenerationItemTypeNotFound in iGenerationQueue", queryQueueDelta[0]); |
|
406 //mark to be removed, cleanup is done below |
|
407 iGenerationQueue[itemIndex].iItemType = EGenerationItemTypeNotFound; |
|
408 } |
|
409 else |
|
410 { |
|
411 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove %d from iGenerationQueue", queryQueueDelta[0]); |
|
412 iGenerationQueue.Remove( itemIndex ); |
|
413 } |
|
414 } |
|
415 } |
|
416 queryQueueDelta.Remove(0); |
|
417 } |
|
418 queryQueueDelta.Close(); |
|
419 } |
|
420 |
|
421 if(iUnknown) |
|
422 { |
|
423 for(TInt i = 0; i < iQuery->Count(); i++) |
|
424 { |
|
425 const CMdEObject* object = &iQuery->Result(i); |
|
426 |
|
427 if(!object) |
|
428 { |
|
429 continue; |
|
430 } |
|
431 |
|
432 TThumbnailGenerationItem tempItem; |
|
433 tempItem.iItemId = object->Id(); |
|
434 TInt itemIndex = iGenerationQueue.FindInOrder(tempItem, Compare); |
|
435 |
|
436 if(itemIndex >= 0) |
330 { |
437 { |
331 found = ETrue; |
438 TThumbnailGenerationItem& item = iGenerationQueue[itemIndex]; |
332 break; |
439 |
|
440 if(iGenerationQueue[itemIndex].iItemType == EGenerationItemTypeNotFound) |
|
441 { |
|
442 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove EGenerationItemTypeNotFound %d item from iGenerationQueue", item.iItemId); |
|
443 iGenerationQueue.Remove(itemIndex); |
|
444 continue; |
|
445 } |
|
446 |
|
447 SetGenerationItemType(item, object->Def().Id()); |
|
448 |
|
449 if(item.iItemType == EGenerationItemTypeUnknown ) |
|
450 { |
|
451 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove unknown item %d", item.iItemId); |
|
452 iGenerationQueue.Remove(itemIndex); |
|
453 continue; |
|
454 } |
|
455 |
|
456 item.iPlaceholder = object->Placeholder(); |
|
457 |
333 } |
458 } |
334 } |
459 } |
335 |
460 |
336 if(!found) |
461 iQueryQueue.Reset(); |
337 { |
462 iProcessingCount = 0; |
338 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing from results item %d", iQueryQueue[queryItem] ); |
463 iUnknown = EFalse; |
339 |
464 } |
340 // ignore if fails |
|
341 queryQueueDelta.InsertInOrder(iQueryQueue[queryItem], Compare); |
|
342 } |
|
343 } |
|
344 |
|
345 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing items total count %d", queryQueueDelta.Count()); |
|
346 //cleanup from previous queue it item is not found from MDS |
|
347 while(queryQueueDelta.Count()) |
|
348 { |
|
349 itemIndex = iLastQueue->FindInOrder(queryQueueDelta[0], Compare); |
|
350 |
|
351 if(itemIndex >= 0) |
|
352 { |
|
353 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove items %d", iQueryQueue[0]); |
|
354 iLastQueue->Remove( itemIndex ); |
|
355 } |
|
356 queryQueueDelta.Remove(0); |
|
357 } |
|
358 queryQueueDelta.Close(); |
|
359 } |
|
360 |
465 |
361 // no results, reset query |
466 // no results, reset query |
362 if( !iProcessingCount) |
467 if( !iProcessingCount ) |
363 { |
468 { |
364 delete iQuery; |
469 delete iQuery; |
365 iQuery = NULL; |
470 iQuery = NULL; |
366 iProcessingCount = 0; |
|
367 iModify = EFalse; |
471 iModify = EFalse; |
368 } |
472 } |
369 } |
473 } |
370 else |
474 else |
371 { |
475 { |
449 |
564 |
450 TRAPD( err, iDefNamespace = &iMdESession->GetDefaultNamespaceDefL() ); |
565 TRAPD( err, iDefNamespace = &iMdESession->GetDefaultNamespaceDefL() ); |
451 if (err != KErrNone) |
566 if (err != KErrNone) |
452 { |
567 { |
453 TN_DEBUG2( "CThumbAGProcessor::SetMdESession() GetDefaultNamespaceDefL() err = %d", err ); |
568 TN_DEBUG2( "CThumbAGProcessor::SetMdESession() GetDefaultNamespaceDefL() err = %d", err ); |
454 } |
569 __ASSERT_DEBUG((iDefNamespace), User::Panic(_L("CThumbAGProcessor::SetMdESession() !iDefNamespace "), KErrBadHandle)); |
455 |
570 } |
456 __ASSERT_DEBUG((iDefNamespace), User::Panic(_L("CThumbAGProcessor::SetMdESession() !iDefNamespace "), KErrBadHandle)); |
571 else |
457 |
572 { |
458 //do async init |
573 iImageObjectDef = &iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject ); |
459 iInit = ETrue; |
574 __ASSERT_DEBUG((iImageObjectDef), User::Panic(_L("CThumbAGProcessor::SetMdESession() !iDefNamespace "), KErrBadHandle)); |
460 |
575 iVideoObjectDef = &iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject ); |
461 ActivateAO(); |
576 __ASSERT_DEBUG((iVideoObjectDef), User::Panic(_L("CThumbAGProcessor::SetMdESession() !iVideoObjectDef "), KErrBadHandle)); |
|
577 iAudioObjectDef = &iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject ); |
|
578 __ASSERT_DEBUG((iAudioObjectDef), User::Panic(_L("CThumbAGProcessor::SetMdESession() !iAudioObjectDef "), KErrBadHandle)); |
|
579 |
|
580 //do async init |
|
581 iInit = ETrue; |
|
582 |
|
583 ActivateAO(); |
|
584 } |
462 } |
585 } |
463 |
586 |
464 // --------------------------------------------------------------------------- |
587 // --------------------------------------------------------------------------- |
465 // CThumbAGProcessor::AddToQueue() |
588 // CThumbAGProcessor::AddToQueue() |
466 // --------------------------------------------------------------------------- |
589 // --------------------------------------------------------------------------- |
467 // |
590 // |
468 void CThumbAGProcessor::AddToQueueL( TObserverNotificationType aType, |
591 void CThumbAGProcessor::AddToQueueL( TObserverNotificationType aType, |
|
592 TThumbnailGenerationItemType aItemType, |
469 const RArray<TItemId>& aIDArray, |
593 const RArray<TItemId>& aIDArray, |
470 const RPointerArray<HBufC>& aObjectUriArray, |
594 const RPointerArray<HBufC>& aObjectUriArray, |
471 TBool /*aPresent*/ ) |
595 TBool /*aPresent*/ ) |
472 { |
596 { |
473 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - begin" ); |
597 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - begin" ); |
|
598 |
474 |
599 |
475 // update queues |
600 // update queues |
476 if (aType == ENotifyAdd) |
601 if (aType == ENotifyAdd) |
477 { |
602 { |
478 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyAdd" ); |
603 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyAdd" ); |
479 |
604 |
480 for (int i=0; i<aIDArray.Count(); i++) |
605 for (int i=0; i<aIDArray.Count(); i++) |
481 { |
606 { |
482 // do not to append to Add queue if exist already in Add or 2nd Add queue (just processed) |
607 TThumbnailGenerationItem item; |
483 if (iAddQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound && |
608 item.iItemId = aIDArray[i]; |
484 i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound) |
609 item.iItemType = aItemType; |
485 { |
610 |
486 User::LeaveIfError(iAddQueue.InsertInOrder(aIDArray[i], Compare)); |
611 SetGenerationItemAction(item, aItemType); |
487 } |
612 |
|
613 if(iPHHarvesting) |
|
614 { |
|
615 item.iPlaceholder = ETrue; |
|
616 } |
|
617 |
|
618 AppendProcessingQueue( item ); |
488 } |
619 } |
489 } |
620 } |
490 else if (aType == ENotifyModify) |
621 else if (aType == ENotifyModify) |
491 { |
622 { |
492 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyModify" ); |
623 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyModify" ); |
494 if(iPHHarvesting) |
625 if(iPHHarvesting) |
495 { |
626 { |
496 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - PH harvesting active, treat like add" ); |
627 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - PH harvesting active, treat like add" ); |
497 for (int i=0; i<aIDArray.Count(); i++) |
628 for (int i=0; i<aIDArray.Count(); i++) |
498 { |
629 { |
499 TInt itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare); |
630 TThumbnailGenerationItem item; |
|
631 item.iItemId = aIDArray[i]; |
|
632 item.iItemType = aItemType; |
|
633 |
|
634 TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
500 |
635 |
501 if (itemIndex >= 0) |
636 if (itemIndex >= 0) |
502 { |
637 { |
503 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - remove from placeholder queue"); |
638 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - set as non-placeholder"); |
504 iPlaceholderQueue.Remove( itemIndex ); |
639 iGenerationQueue[itemIndex].iPlaceholder = EFalse; |
505 } |
640 } |
|
641 else |
|
642 { |
|
643 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append"); |
|
644 |
|
645 item.iPlaceholder = EFalse; |
|
646 SetGenerationItemAction( item, aItemType ); |
|
647 AppendProcessingQueue( item ); |
|
648 } |
|
649 } |
|
650 } |
|
651 else |
|
652 { |
|
653 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - PH harvesting finished, check is real modify!" ); |
|
654 |
|
655 TInt itemIndex(KErrNotFound); |
|
656 |
|
657 for (int i=0; i<aIDArray.Count(); i++) |
|
658 { |
|
659 TThumbnailGenerationItem item; |
|
660 item.iItemId = aIDArray[i]; |
|
661 item.iItemType = aItemType; |
506 |
662 |
507 if(iAddQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound && |
663 itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
508 i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound) |
|
509 { |
|
510 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append to add queue"); |
|
511 User::LeaveIfError(iAddQueue.InsertInOrder(aIDArray[i], Compare)); |
|
512 } |
|
513 } |
|
514 } |
|
515 else |
|
516 { |
|
517 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - PH harvesting finished, check is real modify!" ); |
|
518 |
|
519 TInt itemIndex(KErrNotFound); |
|
520 |
|
521 for (int i=0; i<aIDArray.Count(); i++) |
|
522 { |
|
523 itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare); |
|
524 |
664 |
525 if (itemIndex >= 0) |
665 if (itemIndex >= 0) |
526 { |
666 { |
527 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - placeholder modify, remove from placeholder queue"); |
667 if( iGenerationQueue[itemIndex].iPlaceholder ) |
528 iPlaceholderQueue.Remove( itemIndex ); |
668 { |
|
669 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - placeholder modify"); |
|
670 iGenerationQueue[itemIndex].iPlaceholder = EFalse; |
|
671 } |
|
672 else |
|
673 { |
|
674 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - real modify"); |
|
675 iGenerationQueue[itemIndex].iItemAction = EGenerationItemActionModify; |
|
676 SetForceRun( ETrue ); |
|
677 } |
529 } |
678 } |
530 else |
679 else |
531 { |
680 { |
532 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - real modify"); |
681 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append"); |
533 itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare); |
682 SetGenerationItemAction( item, aItemType); |
534 |
683 item.iPlaceholder = EFalse; |
535 if (itemIndex >= 0) |
684 AppendProcessingQueue( item ); |
536 { |
685 } |
537 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - remove from add queue"); |
686 } |
538 iAddQueue.Remove( itemIndex ); |
687 } |
539 } |
688 } |
540 else |
689 else if (aType == ENotifyRemove && aItemType == EGenerationItemTypeAny) |
541 { |
|
542 itemIndex = i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare); |
|
543 |
|
544 if (itemIndex >= 0) |
|
545 { |
|
546 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - remove from 2nd round add queue"); |
|
547 i2ndRoundGenerateQueue.Remove( itemIndex ); |
|
548 } |
|
549 } |
|
550 |
|
551 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append to modify queue"); |
|
552 User::LeaveIfError(iModifyQueue.InsertInOrder(aIDArray[i], Compare)); |
|
553 |
|
554 SetForceRun( ETrue ); |
|
555 } |
|
556 } |
|
557 } |
|
558 } |
|
559 else if (aType == ENotifyRemove) |
|
560 { |
690 { |
561 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyRemove, remove IDs from all queues"); |
691 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyRemove, remove IDs from all queues"); |
562 |
692 |
563 for (int i=0; i<aIDArray.Count(); i++) |
693 for (int i=0; i<aIDArray.Count(); i++) |
564 { |
694 { |
565 // can be removed from Add queue |
695 TThumbnailGenerationItem item; |
566 TInt itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare); |
696 item.iItemId = aIDArray[i]; |
|
697 item.iItemType = aItemType; |
|
698 |
|
699 TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
|
700 |
567 if(itemIndex >= 0) |
701 if(itemIndex >= 0) |
568 { |
702 { |
569 iAddQueue.Remove(itemIndex); |
703 iGenerationQueue[itemIndex].iItemAction = EGenerationItemActionDelete; |
570 } |
704 delete iGenerationQueue[itemIndex].iUri; |
571 |
705 iGenerationQueue[itemIndex].iUri = NULL; |
572 // ..and Modify Queue |
706 |
573 itemIndex = iModifyQueue.FindInOrder(aIDArray[i], Compare); |
707 if( aObjectUriArray[i]) |
574 if(itemIndex >= 0) |
708 { |
|
709 iGenerationQueue[itemIndex].iUri = aObjectUriArray[i]->AllocL(); |
|
710 } |
|
711 else |
|
712 { |
|
713 //invalid URI remove from processing queue |
|
714 iGenerationQueue.Remove(itemIndex); |
|
715 } |
|
716 } |
|
717 else |
575 { |
718 { |
576 iModifyQueue.Remove(itemIndex); |
719 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append"); |
577 } |
720 item.iItemAction = EGenerationItemActionDelete; |
578 } |
721 delete item.iUri; |
579 |
722 item.iUri = NULL; |
580 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyRemove append URIs to remove queue"); |
723 |
581 for (int i=0; i<aObjectUriArray.Count(); i++) |
724 if( aObjectUriArray[i]) |
582 { |
725 { |
583 HBufC* temp = aObjectUriArray[i]->AllocL(); |
726 item.iUri = aObjectUriArray[i]->AllocL(); |
584 iRemoveQueue.Append( temp ); |
727 CleanupStack::PushL( item.iUri ); |
585 TN_DEBUG2( "CThumbAGProcessor::AddToQueueL() - %S", temp); |
728 User::LeaveIfError( iGenerationQueue.InsertInOrder(item, Compare) ); |
|
729 CleanupStack::Pop(); |
|
730 } |
|
731 |
|
732 //owned by item |
|
733 item.iUri = NULL; |
|
734 } |
|
735 |
|
736 TN_DEBUG2( "CThumbAGProcessor::AddToQueueL() - %S", aObjectUriArray[i]); |
586 } |
737 } |
587 } |
738 } |
588 #ifdef _DEBUG |
739 #ifdef _DEBUG |
589 else |
740 else |
590 { |
741 { |
591 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - should not come here" ); |
742 TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - should not come here" ); |
|
743 __ASSERT_DEBUG((EFalse), User::Panic(_L("CThumbAGProcessor::AddToQueueL()"), KErrArgument)); |
592 User::Leave( KErrArgument ); |
744 User::Leave( KErrArgument ); |
593 } |
745 } |
594 #endif |
746 #endif |
595 |
747 |
596 ActivateAO(); |
748 ActivateAO(); |
642 if( i2ndRound ) |
794 if( i2ndRound ) |
643 { |
795 { |
644 //generate both if needed |
796 //generate both if needed |
645 TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() EOptimizeForQuality "); |
797 TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() EOptimizeForQuality "); |
646 iTMSession->SetQualityPreferenceL( CThumbnailManager::EOptimizeForQuality ); |
798 iTMSession->SetQualityPreferenceL( CThumbnailManager::EOptimizeForQuality ); |
|
799 |
|
800 TN_DEBUG2( "CThumbAGProcessor::CreateThumbnailsL() - 2nd round add remove from queue", aObject->Id() ); |
|
801 |
|
802 TThumbnailGenerationItem item; |
|
803 item.iItemId = aObject->Id(); |
|
804 TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
|
805 |
|
806 if(itemIndex >=0 ) |
|
807 { |
|
808 if(iGenerationQueue[itemIndex].iItemAction == EGenerationItemAction2ndAdd) |
|
809 { |
|
810 iGenerationQueue.Remove(itemIndex); |
|
811 } |
|
812 } |
647 } |
813 } |
648 // 1st roung generation |
814 // 1st roung generation |
649 else |
815 else |
650 { |
816 { |
651 //1st round |
817 //1st round |
652 TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() EOptimizeForQualityWithPreview"); |
818 TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() EOptimizeForQualityWithPreview"); |
653 iTMSession->SetQualityPreferenceL( CThumbnailManager::EOptimizeForQualityWithPreview ); |
819 iTMSession->SetQualityPreferenceL( CThumbnailManager::EOptimizeForQualityWithPreview ); |
654 |
820 |
655 CMdEObjectDef& videoObjectDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject ); |
|
656 |
|
657 // add item to 2nd round queue |
821 // add item to 2nd round queue |
658 if(iLastQueue == &iAddQueue || iLastQueue == &iModifyQueue) |
822 TN_DEBUG2( "CThumbAGProcessor::CreateThumbnailsL() - 1st round add/modify, append to 2nd round queue", aObject->Id() ); |
659 { |
823 |
660 TN_DEBUG2( "CThumbAGProcessor::CreateThumbnailsL() - 1st round add/modify, append to 2nd round queue", aObject->Id() ); |
824 TThumbnailGenerationItem item; |
661 if(i2ndRoundGenerateQueue.FindInOrder(aObject->Id(), Compare) == KErrNotFound) |
825 item.iItemId = aObject->Id(); |
|
826 TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
|
827 |
|
828 if(itemIndex >=0 ) |
|
829 { |
|
830 if(iGenerationQueue[itemIndex].iItemAction == EGenerationItemActionModify) |
662 { |
831 { |
663 // ignore if fails |
832 iGenerationQueue.Remove(itemIndex); |
664 i2ndRoundGenerateQueue.InsertInOrder(aObject->Id(), Compare); |
833 } |
665 } |
834 //change 1st round item for 2nd round processing |
666 } |
835 //2nd round item can be deleted |
667 |
836 else if(iGenerationQueue[itemIndex].iItemAction == EGenerationItemActionAdd) |
668 // 10.1 specific |
837 { |
669 if( imageObjectDef.Id() != aObject->Def().Id() ) |
838 iGenerationQueue[itemIndex].iItemAction = EGenerationItemAction2ndAdd; |
670 { |
839 } |
671 TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() 1st round not image"); |
840 else |
672 ActivateAO(); |
841 { |
673 return; |
842 iGenerationQueue.Remove(itemIndex); |
|
843 } |
674 } |
844 } |
675 } |
845 } |
676 |
846 |
677 // run as lower priority than getting but higher that creating thumbnails |
847 // run as lower priority than getting but higher that creating thumbnails |
678 TRAPD(err, iTMSession->UpdateThumbnailsL(KNoId, aObject->Uri(), orientationVal, modifiedVal, CActive::EPriorityIdle )); |
848 TRAPD(err, iTMSession->UpdateThumbnailsL(KNoId, aObject->Uri(), orientationVal, modifiedVal, CActive::EPriorityIdle )); |
1050 } |
1264 } |
1051 //waiting for MDS query to complete |
1265 //waiting for MDS query to complete |
1052 else if( iQueryActive ) |
1266 else if( iQueryActive ) |
1053 { |
1267 { |
1054 //state mismatch |
1268 //state mismatch |
1055 if(iForceRun && !iModify) |
1269 if(iForceRun && !(iModify || iUnknown)) |
1056 { |
1270 { |
1057 //cancel query and move items back to original processing queue |
1271 //cancel query and move items back to original processing queue |
1058 DeleteAndCancelQuery(ETrue); |
1272 DeleteAndCancelQuery(ETrue); |
1059 ActivateAO(); |
1273 ActivateAO(); |
1060 } |
1274 } |
1061 else |
1275 else |
1062 { |
1276 { |
1063 TN_DEBUG1( "CThumbAGProcessor::RunL() - waiting for query to complete, abort..." ); |
1277 TN_DEBUG1( "CThumbAGProcessor::RunL() - waiting for query to complete, abort..." ); |
1064 } |
1278 } |
1065 } |
1279 } |
1066 |
1280 else if ( iUnknownItemCount > 0 ) |
|
1281 { |
|
1282 TN_DEBUG1( "void CThumbAGProcessor::RunL() unknown items in queue"); |
|
1283 |
|
1284 i2ndRound = EFalse; |
|
1285 iModify = EFalse; |
|
1286 iUnknown = ETrue; |
|
1287 iQueryActive = ETrue; |
|
1288 |
|
1289 QueryL( EGenerationItemActionResolveType ); |
|
1290 } |
1067 // no items in query queue, start new |
1291 // no items in query queue, start new |
1068 // select queue to process, priority by type |
1292 // select queue to process, priority by type |
1069 else if ( iModifyQueue.Count() > 0 ) |
1293 else if ( iModifyItemCount > 0 ) |
1070 { |
1294 { |
1071 TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails"); |
1295 TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails"); |
1072 |
1296 |
1073 i2ndRound = EFalse; |
1297 i2ndRound = EFalse; |
1074 |
1298 |
1075 // query for object info |
1299 // query for object info |
1076 iQueryActive = ETrue; |
1300 iQueryActive = ETrue; |
1077 iModify = ETrue; |
1301 iModify = ETrue; |
1078 QueryL( iModifyQueue ); |
1302 iUnknown = EFalse; |
|
1303 QueryL( EGenerationItemActionModify ); |
1079 } |
1304 } |
1080 else if ( iAddQueue.Count() > 0 ) |
1305 else if ( iAddItemCount > 0 ) |
1081 { |
1306 { |
1082 TN_DEBUG1( "void CThumbAGProcessor::RunL() update 1st round thumbnails"); |
1307 TN_DEBUG1( "void CThumbAGProcessor::RunL() update 1st round thumbnails"); |
1083 |
1308 |
1084 i2ndRound = EFalse; |
1309 i2ndRound = EFalse; |
1085 |
1310 iUnknown = EFalse; |
1086 // query for object info |
1311 // query for object info |
1087 iQueryActive = ETrue; |
1312 iQueryActive = ETrue; |
1088 |
1313 |
1089 QueryL( iAddQueue ); |
1314 QueryL( EGenerationItemActionAdd ); |
1090 } |
1315 } |
1091 else if ( iRemoveQueue.Count() > 0 ) |
1316 else if ( iDeleteItemCount > 0 ) |
1092 { |
1317 { |
1093 TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails"); |
1318 TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails"); |
1094 |
|
1095 i2ndRound = EFalse; |
1319 i2ndRound = EFalse; |
1096 |
1320 iUnknown = EFalse; |
1097 // delete thumbs by URI |
1321 // delete thumbs by URI |
1098 __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle)); |
1322 __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle)); |
1099 if(iTMSession) |
1323 if(iTMSession) |
1100 { |
1324 { |
1101 HBufC* uri = iRemoveQueue[0]; |
1325 TInt itemIndex(KErrNotFound); |
1102 TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S", uri); |
1326 |
1103 CThumbnailObjectSource* source = NULL; |
1327 for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++) |
1104 TRAPD(err, source = CThumbnailObjectSource::NewL( *uri, KNullDesC)); |
1328 { |
1105 |
1329 if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete) |
1106 if(err == KErrNone) |
1330 { |
1107 { |
1331 itemIndex = i; |
1108 iTMSession->DeleteThumbnails( *source ); |
1332 } |
1109 } |
1333 } |
1110 iRemoveQueue.Remove( 0 ); |
1334 |
1111 delete source; |
1335 if(itemIndex >= 0) |
1112 delete uri; |
1336 { |
1113 } |
1337 if(!iGenerationQueue[itemIndex].iUri) |
1114 |
1338 { |
1115 ActivateAO(); |
1339 //URI is invalid |
1116 } |
1340 TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid"); |
1117 else if( i2ndRoundGenerateQueue.Count() > 0) |
1341 iGenerationQueue.Remove( itemIndex ); |
|
1342 ActivateAO(); |
|
1343 return; |
|
1344 } |
|
1345 |
|
1346 TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S", iGenerationQueue[itemIndex].iUri); |
|
1347 CThumbnailObjectSource* source = NULL; |
|
1348 TRAPD(err, source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC)); |
|
1349 |
|
1350 if(err == KErrNone) |
|
1351 { |
|
1352 iTMSession->DeleteThumbnails( *source ); |
|
1353 } |
|
1354 delete source; |
|
1355 |
|
1356 delete iGenerationQueue[itemIndex].iUri; |
|
1357 iGenerationQueue[itemIndex].iUri = NULL; |
|
1358 iGenerationQueue.Remove( itemIndex ); |
|
1359 |
|
1360 iActiveCount++; |
|
1361 } |
|
1362 } |
|
1363 } |
|
1364 else if( i2ndAddItemCount > 0) |
1118 { |
1365 { |
1119 TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails"); |
1366 TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails"); |
1120 |
1367 |
1121 // query for object info |
1368 // query for object info |
1122 iQueryActive = ETrue; |
1369 iQueryActive = ETrue; |
1123 i2ndRound = ETrue; |
1370 i2ndRound = ETrue; |
1124 QueryL( i2ndRoundGenerateQueue ); |
1371 iUnknown = EFalse; |
|
1372 QueryL( EGenerationItemAction2ndAdd ); |
1125 } |
1373 } |
1126 |
1374 |
1127 TN_DEBUG1( "CThumbAGProcessor::RunL() - end" ); |
1375 TN_DEBUG1( "CThumbAGProcessor::RunL() - end" ); |
1128 } |
1376 } |
1129 |
1377 |
1370 // CThumbAGProcessor::ActivateAO() |
1676 // CThumbAGProcessor::ActivateAO() |
1371 // --------------------------------------------------------------------------- |
1677 // --------------------------------------------------------------------------- |
1372 // |
1678 // |
1373 void CThumbAGProcessor::ActivateAO() |
1679 void CThumbAGProcessor::ActivateAO() |
1374 { |
1680 { |
1375 #ifdef _DEBUG |
1681 UpdateItemCounts(); |
1376 TN_DEBUG6( "CThumbAGProcessor::ActivateAO() items in queue Add = %d, Mod = %d, Del = %d, Query = %d, iPlaceholder = %d", iAddQueue.Count(), iModifyQueue.Count(), iRemoveQueue.Count(), iQueryQueue.Count(), iPlaceholderQueue.Count()); |
|
1377 TN_DEBUG2( "CThumbAGProcessor::ActivateAO() items in queue 2nd Add = %d", i2ndRoundGenerateQueue.Count()); |
|
1378 TN_DEBUG3( "CThumbAGProcessor::ActivateAO() iActive = %d, iActiveCount = %d", iActive, iActiveCount); |
|
1379 TN_DEBUG3( "CThumbAGProcessor::ActivateAO() iHarvesting == %d, iMPXHarvesting == %d", iHarvesting, iMPXHarvesting); |
|
1380 TN_DEBUG4( "CThumbAGProcessor::ActivateAO() iIdle = %d, timer = %d, iForceRun = %d", iIdle, iPeriodicTimer->IsActive(), iForceRun); |
|
1381 TN_DEBUG4( "CThumbAGProcessor::ActivateAO() iModify = %d, iQueryReady = %d, iProcessingCount = %d", iModify, iQueryReady, iProcessingCount); |
|
1382 #endif |
|
1383 |
1682 |
1384 if(iFormatting) |
1683 if(iFormatting) |
1385 { |
1684 { |
1386 TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE"); |
1685 TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE"); |
1387 return; |
1686 return; |
1388 } |
1687 } |
1389 |
1688 |
1390 //check if forced run needs to continue |
1689 //check if forced run needs to continue |
1391 if (iModifyQueue.Count()) |
1690 if ( iModifyItemCount || iUnknownItemCount > 0 ) |
1392 { |
1691 { |
1393 SetForceRun( ETrue ); |
1692 SetForceRun( ETrue ); |
1394 } |
1693 } |
1395 else |
1694 else |
1396 { |
1695 { |
1397 iModify = EFalse; |
1696 iModify = EFalse; |
1398 SetForceRun( EFalse ); |
1697 SetForceRun( EFalse ); |
1399 } |
1698 } |
1400 |
1699 |
1401 if( !IsActive() && ((!iActive && !iQueryActive) || iForceRun )) |
1700 if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun )) |
1402 { |
1701 { |
1403 TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated"); |
1702 TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated"); |
1404 SetActive(); |
1703 SetActive(); |
1405 TRequestStatus* statusPtr = &iStatus; |
1704 TRequestStatus* statusPtr = &iStatus; |
1406 User::RequestComplete( statusPtr, KErrNone ); |
1705 User::RequestComplete( statusPtr, KErrNone ); |
1407 } |
1706 } |
1408 |
1707 |
1409 UpdatePSValues(); |
1708 UpdatePSValues(EFalse, EFalse); |
1410 } |
1709 } |
1411 |
1710 |
1412 // --------------------------------------------------------------------------- |
1711 // --------------------------------------------------------------------------- |
1413 // CThumbAGProcessor::PeriodicTimerCallBack() |
1712 // CThumbAGProcessor::PeriodicTimerCallBack() |
1414 // --------------------------------------------------------------------------- |
1713 // --------------------------------------------------------------------------- |
1493 void CThumbAGProcessor::RemoveFromQueues( const RArray<TItemId>& aIDArray, const TBool /*aRemoveFromDelete*/ ) |
1792 void CThumbAGProcessor::RemoveFromQueues( const RArray<TItemId>& aIDArray, const TBool /*aRemoveFromDelete*/ ) |
1494 #endif |
1793 #endif |
1495 { |
1794 { |
1496 TN_DEBUG2( "CThumbAGProcessor::RemoveFromQueues() aRemoveFromDelete == %d - begin", aRemoveFromDelete ); |
1795 TN_DEBUG2( "CThumbAGProcessor::RemoveFromQueues() aRemoveFromDelete == %d - begin", aRemoveFromDelete ); |
1497 |
1796 |
1498 TInt itemIndex = KErrNotFound; |
1797 TInt itemIndex(KErrNotFound); |
1499 |
1798 |
1500 for (int i=0; i< aIDArray.Count(); i++) |
1799 for (int i=0; i< aIDArray.Count(); i++) |
1501 { |
1800 { |
|
1801 TThumbnailGenerationItem item; |
|
1802 item.iItemId = aIDArray[i]; |
1502 TN_DEBUG2( "CThumbAGProcessor::RemoveFromQueues() - %d", aIDArray[i]); |
1803 TN_DEBUG2( "CThumbAGProcessor::RemoveFromQueues() - %d", aIDArray[i]); |
1503 |
1804 |
1504 itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare); |
1805 itemIndex = iGenerationQueue.FindInOrder(item, Compare); |
1505 if(itemIndex >= 0) |
1806 if(itemIndex >= 0) |
1506 { |
1807 { |
1507 iPlaceholderQueue.Remove(itemIndex); |
1808 delete iGenerationQueue[itemIndex].iUri; |
1508 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iPlaceholderQueue" ); |
1809 iGenerationQueue[itemIndex].iUri = NULL; |
|
1810 iGenerationQueue.Remove(itemIndex); |
|
1811 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iGenerationQueue" ); |
1509 } |
1812 } |
1510 |
1813 |
1511 itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare); |
1814 itemIndex = iQueryQueue.FindInOrder(aIDArray[i], CompareId); |
1512 if(itemIndex >= 0) |
|
1513 { |
|
1514 iAddQueue.Remove(itemIndex); |
|
1515 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iAddQueue" ); |
|
1516 } |
|
1517 |
|
1518 itemIndex = i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare); |
|
1519 if(itemIndex >= 0) |
|
1520 { |
|
1521 i2ndRoundGenerateQueue.Remove(itemIndex); |
|
1522 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - i2ndRoundGenerateQueue" ); |
|
1523 } |
|
1524 |
|
1525 itemIndex = iModifyQueue.FindInOrder(aIDArray[i], Compare); |
|
1526 if(itemIndex >= 0) |
|
1527 { |
|
1528 iModifyQueue.Remove(itemIndex); |
|
1529 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iModifyQueue" ); |
|
1530 |
|
1531 if( iModifyQueue.Count() == 0) |
|
1532 { |
|
1533 SetForceRun( EFalse ); |
|
1534 } |
|
1535 } |
|
1536 |
|
1537 itemIndex = iQueryQueue.FindInOrder(aIDArray[i], Compare); |
|
1538 if(itemIndex >= 0) |
1815 if(itemIndex >= 0) |
1539 { |
1816 { |
1540 iQueryQueue.Remove(itemIndex); |
1817 iQueryQueue.Remove(itemIndex); |
1541 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iQueryQueue" ); |
1818 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iQueryQueue" ); |
1542 } |
1819 } |
1543 |
1820 } |
1544 itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare); |
1821 |
1545 if(itemIndex >= 0) |
1822 ActivateAO(); |
1546 { |
|
1547 iPlaceholderQueue.Remove(itemIndex); |
|
1548 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iPlaceholderQueue" ); |
|
1549 } |
|
1550 } |
|
1551 |
1823 |
1552 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - end" ); |
1824 TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - end" ); |
1553 } |
1825 } |
1554 |
1826 |
1555 // --------------------------------------------------------------------------- |
1827 // --------------------------------------------------------------------------- |
1778 // --------------------------------------------------------------------------- |
2050 // --------------------------------------------------------------------------- |
1779 // CThumbAGProcessor::UpdateItemsLeft |
2051 // CThumbAGProcessor::UpdateItemsLeft |
1780 // Update KItemsleft PS value if changed |
2052 // Update KItemsleft PS value if changed |
1781 // --------------------------------------------------------------------------- |
2053 // --------------------------------------------------------------------------- |
1782 // |
2054 // |
1783 void CThumbAGProcessor::UpdatePSValues(const TBool aDefine) |
2055 void CThumbAGProcessor::UpdatePSValues(const TBool aDefine, const TBool aForce) |
1784 { |
2056 { |
1785 TInt itemsLeft = iModifyQueue.Count() + iAddQueue.Count(); |
2057 TInt itemsLeft(KErrNotReady); |
1786 TBool daemonProcessing = EFalse; |
2058 TBool daemonProcessing = ETrue; |
1787 |
2059 |
1788 if(itemsLeft + i2ndRoundGenerateQueue.Count() + iRemoveQueue.Count() > 0 ) |
2060 if(iShutdown) |
1789 { |
2061 { |
1790 daemonProcessing = ETrue; |
2062 RProperty::Set(KTAGDPSNotification, KDaemonProcessing, EFalse); |
1791 } |
2063 RProperty::Set(KTAGDPSNotification, KItemsleft, 0 ); |
1792 |
2064 return; |
1793 //adjust items left to containing also items not yet processed but removed from queue under processing |
2065 } |
1794 if((iLastQueue == &iModifyQueue || iLastQueue == &iAddQueue) && !i2ndRound) |
2066 |
1795 { |
|
1796 itemsLeft +=iQueryQueue.Count(); |
|
1797 } |
|
1798 |
|
1799 //cancel 2nd round generarion when there is items in 1st round queues |
|
1800 if(itemsLeft && i2ndRound) |
|
1801 { |
|
1802 DeleteAndCancelQuery(ETrue); |
|
1803 i2ndRound = EFalse; |
|
1804 } |
|
1805 |
|
1806 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() KItemsleft == %d", itemsLeft); |
|
1807 |
|
1808 if(aDefine) |
2067 if(aDefine) |
1809 { |
2068 { |
1810 TN_DEBUG1( "CThumbAGProcessor::UpdatePSValues() define"); |
2069 TInt ret = RProperty::Define(KTAGDPSNotification, KDaemonProcessing, RProperty::EInt); |
1811 RProperty::Define(KTAGDPSNotification, KDaemonProcessing, RProperty::EInt); |
2070 |
1812 RProperty::Set(KTAGDPSNotification, KDaemonProcessing, 0); |
2071 if( ret != KErrNone ) |
1813 daemonProcessing = EFalse; |
2072 { |
1814 RProperty::Define(KTAGDPSNotification, KItemsleft, RProperty::EInt); |
2073 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() define KDaemonProcessing ret = %d", ret); |
1815 RProperty::Set(KTAGDPSNotification, KItemsleft, 0); |
2074 } |
1816 iPreviousItemsLeft = 0; |
2075 |
1817 } |
2076 ret = RProperty::Define(KTAGDPSNotification, KItemsleft, RProperty::EInt); |
1818 |
2077 |
1819 if( daemonProcessing != iPreviousDaemonProcessing) |
2078 if( ret != KErrNone ) |
1820 { |
2079 { |
1821 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KDaemonProcessing == %d", daemonProcessing); |
2080 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() define KItemsleft ret = %d", ret); |
1822 iPreviousDaemonProcessing = daemonProcessing; |
2081 } |
1823 RProperty::Set(KTAGDPSNotification, KDaemonProcessing, daemonProcessing); |
2082 } |
1824 } |
2083 |
1825 |
2084 // set itemsleft = KErrNotReady (-18) and daemonProcessing = ETrue if |
1826 if( itemsLeft != iPreviousItemsLeft) |
2085 // - key is initalized |
1827 { |
2086 // - mount timer is pending |
1828 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft); |
2087 // - harvester observer is not yet activated |
1829 iPreviousItemsLeft = itemsLeft; |
2088 // - single unknown item exists in processing queue |
1830 RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft ); |
2089 // - forced |
1831 } |
2090 if( iMountTimer->IsActive() || aForce || aDefine || iUnknownItemCount |
|
2091 || !iHarvesterActivated ) |
|
2092 { |
|
2093 daemonProcessing = ETrue; |
|
2094 itemsLeft = KErrNotReady; |
|
2095 } |
|
2096 else |
|
2097 { |
|
2098 itemsLeft = iAddItemCount + iModifyItemCount; |
|
2099 } |
|
2100 |
|
2101 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() KItemsleft == %d", itemsLeft); |
|
2102 |
|
2103 //cancel 2nd round generarion when there is items in 1st round queues |
|
2104 if(iAddItemCount && i2ndRound) |
|
2105 { |
|
2106 DeleteAndCancelQuery(ETrue); |
|
2107 i2ndRound = EFalse; |
|
2108 } |
|
2109 |
|
2110 if( iGenerationQueue.Count() ) |
|
2111 { |
|
2112 daemonProcessing = ETrue; |
|
2113 } |
|
2114 else |
|
2115 { |
|
2116 daemonProcessing = EFalse; |
|
2117 } |
|
2118 |
|
2119 if( daemonProcessing != iPreviousDaemonProcessing) |
|
2120 { |
|
2121 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KDaemonProcessing == %d", daemonProcessing); |
|
2122 iPreviousDaemonProcessing = daemonProcessing; |
|
2123 TInt ret = RProperty::Set(KTAGDPSNotification, KDaemonProcessing, daemonProcessing); |
|
2124 |
|
2125 if(ret != KErrNone ) |
|
2126 { |
|
2127 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KDaemonProcessing %d failed %d", daemonProcessing, ret); |
|
2128 } |
|
2129 } |
|
2130 |
|
2131 if( itemsLeft != iPreviousItemsLeft) |
|
2132 { |
|
2133 TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft); |
|
2134 iPreviousItemsLeft = itemsLeft; |
|
2135 TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft ); |
|
2136 |
|
2137 if(ret != KErrNone ) |
|
2138 { |
|
2139 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KItemsleft %d failed %d", itemsLeft, ret); |
|
2140 } |
|
2141 } |
|
2142 |
1832 } |
2143 } |
1833 |
2144 |
1834 // --------------------------------------------------------------------------- |
2145 // --------------------------------------------------------------------------- |
1835 // CThumbAGProcessor::Compare |
2146 // CThumbAGProcessor::Compare |
1836 // Comparison function for logaritmic use of queue arrays |
2147 // Comparison function for logaritmic use of queue arrays |
1837 // --------------------------------------------------------------------------- |
2148 // --------------------------------------------------------------------------- |
1838 // |
2149 // |
1839 TInt CThumbAGProcessor::Compare(const TItemId& aLeft, const TItemId& aRight) |
2150 |
|
2151 TInt CThumbAGProcessor::Compare(const TThumbnailGenerationItem& aLeft, const TThumbnailGenerationItem& aRight) |
|
2152 { |
|
2153 return (aLeft.iItemId - aRight.iItemId); |
|
2154 } |
|
2155 |
|
2156 TInt CThumbAGProcessor::CompareId(const TItemId& aLeft, const TItemId& aRight) |
1840 { |
2157 { |
1841 return (aLeft - aRight); |
2158 return (aLeft - aRight); |
1842 } |
2159 } |
1843 |
2160 |
|
2161 void CThumbAGProcessor::UpdateItemCounts() |
|
2162 { |
|
2163 TN_DEBUG1( "CThumbAGProcessor::UpdateItemCounts()"); |
|
2164 iModifyItemCount = 0; |
|
2165 iDeleteItemCount = 0; |
|
2166 iAddItemCount = 0; |
|
2167 iUnknownItemCount = 0; |
|
2168 i2ndAddItemCount = 0; |
|
2169 iPlaceholderItemCount=0; |
|
2170 iCameraItemCount =0; |
|
2171 iImageItemCount=0; |
|
2172 iVideoItemCount=0; |
|
2173 iAudioItemCount=0; |
|
2174 |
|
2175 for(TInt i=0; i < iGenerationQueue.Count(); i++) |
|
2176 { |
|
2177 TThumbnailGenerationItem& item = iGenerationQueue[i]; |
|
2178 |
|
2179 if(item.iItemAction == EGenerationItemActionModify) |
|
2180 { |
|
2181 iModifyItemCount++; |
|
2182 } |
|
2183 |
|
2184 if(item.iItemAction == EGenerationItemActionDelete) |
|
2185 { |
|
2186 iDeleteItemCount++; |
|
2187 } |
|
2188 |
|
2189 if(item.iItemType == EGenerationItemTypeUnknown) |
|
2190 { |
|
2191 iUnknownItemCount++; |
|
2192 } |
|
2193 if(item.iItemAction == EGenerationItemAction2ndAdd) |
|
2194 { |
|
2195 i2ndAddItemCount++; |
|
2196 } |
|
2197 if(item.iPlaceholder) |
|
2198 { |
|
2199 iPlaceholderItemCount++; |
|
2200 } |
|
2201 if(item.iItemType == EGenerationItemTypeCamera) |
|
2202 { |
|
2203 iCameraItemCount++; |
|
2204 } |
|
2205 if(item.iItemAction == EGenerationItemActionAdd ) |
|
2206 { |
|
2207 iAddItemCount++; |
|
2208 } |
|
2209 if(item.iItemType == EGenerationItemTypeAudio) |
|
2210 { |
|
2211 iAudioItemCount++; |
|
2212 } |
|
2213 if(item.iItemType == EGenerationItemTypeVideo) |
|
2214 { |
|
2215 iVideoItemCount++; |
|
2216 } |
|
2217 if(item.iItemType == EGenerationItemTypeImage) |
|
2218 { |
|
2219 iImageItemCount++; |
|
2220 } |
|
2221 } |
|
2222 |
|
2223 TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iActiveCount = %d", |
|
2224 iActiveCount); |
|
2225 TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iPreviousItemsLeft = %d", |
|
2226 iPreviousItemsLeft); |
|
2227 TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iHarvesting == %d, iMMCHarvesting == %d, iPHHarvesting == %d, iMPXHarvesting == %d", |
|
2228 iHarvesting, iMMCHarvesting, iPHHarvesting, iMPXHarvesting); |
|
2229 TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iIdle = %d, iForegroundRun = %d, timer = %d, iForceRun = %d", |
|
2230 iIdle, iForegroundRun, iPeriodicTimer->IsActive(), iForceRun); |
|
2231 TN_DEBUG4( "CThumbAGProcessor::UpdateItemCounts() iModify = %d, iQueryReady = %d, iProcessingCount = %d", |
|
2232 iModify, iQueryReady, iProcessingCount); |
|
2233 TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iMountTimer = %d", iMountTimer->IsActive()); |
|
2234 TN_DEBUG3( "CThumbAGProcessor::UpdateItemCounts() iGenerationQueue = %d, iQueryQueue = %d", |
|
2235 iGenerationQueue.Count(), iQueryQueue.Count()); |
|
2236 TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iAddItemCount=%d, i2ndAddItemCount=%d, iModifyItemCount=%d, iDeleteItemCount=%d", |
|
2237 iAddItemCount, i2ndAddItemCount, iModifyItemCount, iDeleteItemCount ); |
|
2238 TN_DEBUG3( "CThumbAGProcessor::UpdateItemCounts() iUnknownItemCount=%d, iPlaceholderItemCount=%d", |
|
2239 iUnknownItemCount, iPlaceholderItemCount); |
|
2240 TN_DEBUG4( "CThumbAGProcessor::UpdateItemCounts() iAudioItemCount=%d, iVideoItemCount=%d, iImageItemCount=%d", |
|
2241 iAudioItemCount, iVideoItemCount, iImageItemCount); |
|
2242 TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iCameraItemCount=%d", iCameraItemCount); |
|
2243 |
|
2244 //compress queues when empty |
|
2245 if(!iGenerationQueue.Count()) |
|
2246 { |
|
2247 iGenerationQueue.Compress(); |
|
2248 } |
|
2249 |
|
2250 if(!iQueryQueue.Count()) |
|
2251 { |
|
2252 iQueryQueue.Compress(); |
|
2253 } |
|
2254 } |
|
2255 |
|
2256 |
|
2257 // --------------------------------------------------------------------------- |
|
2258 // CThumbAGProcessor::MountTimerCallBack() |
|
2259 // --------------------------------------------------------------------------- |
|
2260 // |
|
2261 TInt CThumbAGProcessor::MountTimerCallBack(TAny* aAny) |
|
2262 { |
|
2263 TN_DEBUG1( "CThumbAGProcessor::MountTimerCallBack()"); |
|
2264 CThumbAGProcessor* self = static_cast<CThumbAGProcessor*>( aAny ); |
|
2265 |
|
2266 self->iMountTimer->Cancel(); |
|
2267 |
|
2268 //activate timeout if overall or mmc harvestig is not active |
|
2269 if(!self->iHarvesting && !self->iMMCHarvesting ) |
|
2270 { |
|
2271 self->ActivateAO(); |
|
2272 } |
|
2273 |
|
2274 return KErrNone; // Return value ignored by CPeriodic |
|
2275 } |
|
2276 |
|
2277 // --------------------------------------------------------------------------- |
|
2278 // CThumbAGProcessor::SetGenerationItemAction() |
|
2279 // --------------------------------------------------------------------------- |
|
2280 // |
|
2281 void CThumbAGProcessor::SetGenerationItemAction( TThumbnailGenerationItem& aGenerationItem, TThumbnailGenerationItemType aItemType ) |
|
2282 { |
|
2283 switch( aItemType ) |
|
2284 { |
|
2285 case EGenerationItemTypeAudio: |
|
2286 aGenerationItem.iItemAction = EGenerationItemAction2ndAdd; |
|
2287 break; |
|
2288 case EGenerationItemTypeCamera: |
|
2289 aGenerationItem.iItemAction = EGenerationItemAction2ndAdd; |
|
2290 aGenerationItem.iPlaceholder = ETrue; |
|
2291 break; |
|
2292 case EGenerationItemTypeImage: |
|
2293 aGenerationItem.iItemAction = EGenerationItemActionAdd; |
|
2294 break; |
|
2295 case EGenerationItemTypeVideo: |
|
2296 //S^3 EGenerationItemActionAdd |
|
2297 //S^4 EGenerationItemAction2ndAdd |
|
2298 aGenerationItem.iItemAction = EGenerationItemAction2ndAdd; |
|
2299 break; |
|
2300 default: |
|
2301 aGenerationItem.iItemAction = EGenerationItemActionResolveType; |
|
2302 } |
|
2303 } |
|
2304 |
|
2305 // --------------------------------------------------------------------------- |
|
2306 // CThumbAGProcessor::SetGenerationItemType() |
|
2307 // --------------------------------------------------------------------------- |
|
2308 // |
|
2309 void CThumbAGProcessor::SetGenerationItemType( TThumbnailGenerationItem& aGenerationItem, const TDefId aDefId ) |
|
2310 { |
|
2311 if(aDefId == iImageObjectDef->Id()) |
|
2312 { |
|
2313 aGenerationItem.iItemType = EGenerationItemTypeImage; |
|
2314 } |
|
2315 else if(aDefId == iAudioObjectDef->Id()) |
|
2316 { |
|
2317 aGenerationItem.iItemType = EGenerationItemTypeAudio; |
|
2318 } |
|
2319 else if(aDefId == iVideoObjectDef->Id()) |
|
2320 { |
|
2321 aGenerationItem.iItemType = EGenerationItemTypeVideo; |
|
2322 } |
|
2323 else |
|
2324 { |
|
2325 aGenerationItem.iItemType = EGenerationItemTypeUnknown; |
|
2326 } |
|
2327 |
|
2328 SetGenerationItemAction( aGenerationItem, aGenerationItem.iItemType ); |
|
2329 } |
|
2330 |
|
2331 |
|
2332 // ----------------------------------------------------------------------------- |
|
2333 // CThumbAGProcessor::AppendProcessingQueue() |
|
2334 // ----------------------------------------------------------------------------- |
|
2335 // |
|
2336 void CThumbAGProcessor::AppendProcessingQueue( TThumbnailGenerationItem& item ) |
|
2337 { |
|
2338 |
|
2339 TInt itemIndex = iGenerationQueue.FindInOrder( item, Compare ); |
|
2340 |
|
2341 if(itemIndex >= 0) |
|
2342 { |
|
2343 iGenerationQueue[itemIndex].iPlaceholder = item.iPlaceholder; |
|
2344 iGenerationQueue[itemIndex].iItemType = item.iItemType; |
|
2345 iGenerationQueue[itemIndex].iItemAction = item.iItemAction; |
|
2346 } |
|
2347 else |
|
2348 { |
|
2349 iGenerationQueue.InsertInOrder(item, Compare); |
|
2350 } |
|
2351 } |
|
2352 |
1844 |
2353 |
1845 // End of file |
2354 // End of file |