41 aProcessor, CThumbnailServer& aServer, RFile64* aFile, TDesC8* aBuffer, |
41 aProcessor, CThumbnailServer& aServer, RFile64* aFile, TDesC8* aBuffer, |
42 const TDataType* aMimeType, CThumbnailManager::TThumbnailFlags aFlags, |
42 const TDataType* aMimeType, CThumbnailManager::TThumbnailFlags aFlags, |
43 const TSize& aSize, TDisplayMode aDisplayMode, TInt aPriority, |
43 const TSize& aSize, TDisplayMode aDisplayMode, TInt aPriority, |
44 RArray < TThumbnailPersistentSize >* aMissingSizes, const TDesC& aTargetUri, |
44 RArray < TThumbnailPersistentSize >* aMissingSizes, const TDesC& aTargetUri, |
45 TThumbnailSize aThumbnailSize, const TInt64 aModified, |
45 TThumbnailSize aThumbnailSize, const TInt64 aModified, |
46 const CThumbnailManager::TThumbnailQualityPreference aQualityPreference, |
46 const CThumbnailManager::TThumbnailQualityPreference aQualityPreference ): |
47 TBool aVirtualUri ): |
|
48 CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), |
47 CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), |
49 iFlags( aFlags ), iSize( aSize ), iDisplayMode( aDisplayMode ), |
48 iFlags( aFlags ), iSize( aSize ), iDisplayMode( aDisplayMode ), |
50 iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ), |
49 iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ), |
51 iThumbnailSize( aThumbnailSize ), iModified(aModified), |
50 iThumbnailSize( aThumbnailSize ), iModified(aModified), |
52 iQualityPreference( aQualityPreference ), iVirtualUri( aVirtualUri ) |
51 iQualityPreference( aQualityPreference ) |
53 { |
52 { |
54 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this); |
53 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this); |
55 |
54 |
56 if ( !aBuffer && aFile) |
55 if ( !aBuffer && aFile) |
57 { |
56 { |
125 |
123 |
126 #ifdef _DEBUG |
124 #ifdef _DEBUG |
127 aStart.UniversalTime(); |
125 aStart.UniversalTime(); |
128 #endif |
126 #endif |
129 |
127 |
130 TBuf8< KMaxDataTypeLength > mimeType; |
128 TParsePtrC parse(iFilename); |
131 |
129 TPtrC ext(parse.Ext()); |
132 if ( (!iVirtualUri && iFilename.Right(KExtLength).CompareF(KNonEmbeddedArtExt) == 0) || |
130 TBuf8< KMaxDataTypeLength > mimeType; |
133 (iVirtualUri && iTargetUri.Right(KExtLength).CompareF(KContactExt) == 0) ) // tparse panics with virtual URI |
131 if (ext.CompareF(KNonEmbeddedArtExt)== 0) |
134 { |
132 { |
135 mimeType.Copy( KImageMime ); |
133 mimeType.Copy( KImageMime ); |
136 } |
134 } |
137 else |
135 else |
138 { |
136 { |
139 mimeType = iMimeType.Des8(); |
137 mimeType = iMimeType.Des8(); |
140 } |
138 } |
141 iProvider = iServer.ResolveProviderL(mimeType); |
139 iProvider = iServer.ResolveProviderL(mimeType); |
142 |
140 |
143 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, iProvider->Uid()); |
141 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, |
|
142 iProvider->Uid()); |
144 |
143 |
145 __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer )); |
144 __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer )); |
146 |
145 |
147 iProvider->CancelGetThumbnail(); |
146 iProvider->CancelGetThumbnail(); |
148 iProvider->Reset(); |
147 iProvider->Reset(); |
328 CleanupStack::Pop( aBitmap ); |
326 CleanupStack::Pop( aBitmap ); |
329 |
327 |
330 // compTask is the scale task which returns the bitmap to the client |
328 // compTask is the scale task which returns the bitmap to the client |
331 CThumbnailScaleTask* complTask = NULL; |
329 CThumbnailScaleTask* complTask = NULL; |
332 |
330 |
333 TInt err1 = KErrNone; |
|
334 TInt err2 = KErrNone; |
|
335 TBool isPublic = ETrue; |
|
336 TBool isPublic2 = ETrue; |
|
337 |
|
338 if(iFilename != KNullDesC) |
|
339 { |
|
340 TRAP(err1, iServer.StoreForPathL(iFilename)); |
|
341 |
|
342 isPublic = iServer.IsPublicPath( iFilename ); |
|
343 } |
|
344 if(iTargetUri != KNullDesC ) |
|
345 { |
|
346 TRAP(err2, iServer.StoreForPathL(iTargetUri)); |
|
347 |
|
348 isPublic2 = iServer.IsPublicPath( iTargetUri ); |
|
349 } |
|
350 |
|
351 // check if need to create more than one scale task |
|
352 if ( iMissingSizes ) |
331 if ( iMissingSizes ) |
353 { |
332 { |
354 const TInt count = iMissingSizes->Count(); |
333 const TInt count = iMissingSizes->Count(); |
355 |
334 |
356 // scale small thumbs first, because fullscreen encoding takes longer |
335 for ( TInt i( 0 ); i < count; i++ ) |
357 for ( TInt i( count-1 ); i >= 0; i-- ) |
|
358 { |
336 { |
359 TThumbnailSize size = (*iMissingSizes)[ i ].iType; |
337 TThumbnailSize size = (*iMissingSizes)[ i ].iType; |
360 #ifdef _DEBUG |
338 #ifdef _DEBUG |
361 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size ); |
339 TN_DEBUG3( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() *iMissingSizes)[ i ].iType == %d", this, size ); |
362 #endif |
340 #endif |
364 if ( iPortrait ) |
342 if ( iPortrait ) |
365 { |
343 { |
366 if ( size == EFullScreenThumbnailSize || |
344 if ( size == EFullScreenThumbnailSize || |
367 size == EVideoFullScreenThumbnailSize || |
345 size == EVideoFullScreenThumbnailSize || |
368 size == EAudioFullScreenThumbnailSize || |
346 size == EAudioFullScreenThumbnailSize || |
369 size == EImageFullScreenThumbnailSize || |
347 size == EImageFullScreenThumbnailSize ) |
370 size == EContactFullScreenThumbnailSize ) |
|
371 { |
348 { |
372 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
349 TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); |
373 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
350 TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); |
374 TInt width = (*iMissingSizes)[ i ].iSize.iWidth; |
351 TInt width = (*iMissingSizes)[ i ].iSize.iWidth; |
375 (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight; |
352 (*iMissingSizes)[ i ].iSize.iWidth = (*iMissingSizes)[ i ].iSize.iHeight; |
380 } |
357 } |
381 |
358 |
382 CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
359 CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
383 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode, |
360 aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode, |
384 KMaxPriority, iTargetUri, (*iMissingSizes)[ i ].iType, iModified, iScaledBitmapToPool, iEXIF, |
361 KMaxPriority, iTargetUri, (*iMissingSizes)[ i ].iType, iModified, iScaledBitmapToPool, iEXIF, |
385 iRequestId, iVirtualUri); |
362 iRequestId); |
386 CleanupStack::PushL( complTask ); |
363 CleanupStack::PushL( complTask ); |
387 |
364 |
|
365 TInt err1 = KErrNone; |
|
366 TInt err2 = KErrNone; |
|
367 |
|
368 if(iFilename != KNullDesC) |
|
369 { |
|
370 TRAP(err1, iServer.StoreForPathL(iFilename)); |
|
371 } |
|
372 |
|
373 if(iTargetUri != KNullDesC ) |
|
374 { |
|
375 TRAP(err2, iServer.StoreForPathL(iTargetUri)); |
|
376 } |
388 // if trying to access Z drive, don't try to store |
377 // if trying to access Z drive, don't try to store |
389 // don't want to store custom sizes |
378 // don't want to store custom sizes |
390 // don't store if from private directory |
379 if( err1 == KErrAccessDenied || err2 == KErrAccessDenied || |
391 if( !isPublic || !isPublic2 || |
380 (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || |
392 err1 == KErrAccessDenied || err2 == KErrAccessDenied || |
381 (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) |
393 (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || |
|
394 (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) |
|
395 { |
382 { |
396 complTask->SetDoStore( EFalse ); |
383 complTask->SetDoStore( EFalse ); |
397 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
384 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
398 } |
385 } |
399 else |
386 else |
400 { |
387 { |
401 complTask->SetDoStore( ETrue ); |
388 if(iFilename != KNullDesC) |
|
389 { |
|
390 complTask->SetDoStore(iServer.IsPublicPath( iFilename )); |
|
391 } |
|
392 |
|
393 if(iTargetUri != KNullDesC) |
|
394 { |
|
395 complTask->SetDoStore(iServer.IsPublicPath( iTargetUri )); |
|
396 } |
402 } |
397 } |
403 |
398 |
404 iProcessor.AddTaskL( complTask ); |
399 iProcessor.AddTaskL( complTask ); |
405 CleanupStack::Pop( complTask ); |
400 CleanupStack::Pop( complTask ); |
406 |
401 |
418 if( iPortrait ) |
413 if( iPortrait ) |
419 { |
414 { |
420 if ( iThumbnailSize == EFullScreenThumbnailSize || |
415 if ( iThumbnailSize == EFullScreenThumbnailSize || |
421 iThumbnailSize == EVideoFullScreenThumbnailSize || |
416 iThumbnailSize == EVideoFullScreenThumbnailSize || |
422 iThumbnailSize == EAudioFullScreenThumbnailSize || |
417 iThumbnailSize == EAudioFullScreenThumbnailSize || |
423 iThumbnailSize == EImageFullScreenThumbnailSize || |
418 iThumbnailSize == EImageFullScreenThumbnailSize ) |
424 iThumbnailSize == EContactFullScreenThumbnailSize) |
|
425 { |
419 { |
426 TInt width = iSize.iWidth; |
420 TInt width = iSize.iWidth; |
427 iSize.iWidth = iSize.iHeight; |
421 iSize.iWidth = iSize.iHeight; |
428 iSize.iHeight = width; |
422 iSize.iHeight = width; |
429 } |
423 } |
430 } |
424 } |
431 |
425 |
432 complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
426 complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, |
433 aBitmap, iOriginalSize, iSize, iFlags& CThumbnailManager |
427 aBitmap, iOriginalSize, iSize, iFlags& CThumbnailManager |
434 ::ECropToAspectRatio, iDisplayMode, KMaxPriority, iTargetUri, |
428 ::ECropToAspectRatio, iDisplayMode, KMaxPriority, iTargetUri, |
435 iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId, |
429 iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId ); |
436 iVirtualUri); |
|
437 CleanupStack::PushL( complTask ); |
430 CleanupStack::PushL( complTask ); |
438 |
431 |
|
432 TInt err1 = KErrNone; |
|
433 TInt err2 = KErrNone; |
|
434 if(iFilename != KNullDesC) |
|
435 { |
|
436 TRAP(err1, iServer.StoreForPathL(iFilename)); |
|
437 } |
|
438 if(iTargetUri != KNullDesC) |
|
439 { |
|
440 TRAP(err2, iServer.StoreForPathL(iTargetUri)); |
|
441 } |
439 // if trying to access Z drive, don't try to store |
442 // if trying to access Z drive, don't try to store |
440 // don't want to store custom sizes |
443 // don't want to store custom sizes |
441 if( !isPublic || !isPublic2 || |
444 if( err1 == KErrAccessDenied || err2 == KErrAccessDenied || |
442 err1 == KErrAccessDenied || err2 == KErrAccessDenied || |
|
443 iThumbnailSize == ECustomThumbnailSize || |
445 iThumbnailSize == ECustomThumbnailSize || |
444 iThumbnailSize == EUnknownThumbnailSize ) |
446 iThumbnailSize == EUnknownThumbnailSize ) |
445 { |
447 { |
446 complTask->SetDoStore( EFalse ); |
448 complTask->SetDoStore( EFalse ); |
447 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
449 TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); |
448 } |
450 } |
449 else |
451 else |
450 { |
452 { |
451 complTask->SetDoStore( ETrue ); |
453 if(iFilename != KNullDesC) |
|
454 { |
|
455 complTask->SetDoStore(iServer.IsPublicPath( iFilename )); |
|
456 } |
|
457 |
|
458 if(iTargetUri != KNullDesC) |
|
459 { |
|
460 complTask->SetDoStore(iServer.IsPublicPath( iTargetUri )); |
|
461 } |
452 } |
462 } |
453 |
463 |
454 iProcessor.AddTaskL( complTask ); |
464 iProcessor.AddTaskL( complTask ); |
455 CleanupStack::Pop( complTask ); |
465 CleanupStack::Pop( complTask ); |
456 |
466 |
494 // of requested size only meaningful. |
504 // of requested size only meaningful. |
495 |
505 |
496 if(iFilename != KNullDesC) |
506 if(iFilename != KNullDesC) |
497 { |
507 { |
498 iServer.StoreForPathL( iFilename )->StoreThumbnailL( |
508 iServer.StoreForPathL( iFilename )->StoreThumbnailL( |
499 iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); |
509 iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue ); |
500 //remove result from fetched checker |
510 //remove result from fetched checker |
501 iServer.FetchedChecker().SetFetchResult( iFilename, iThumbnailSize, KErrNone ); |
511 iServer.FetchedChecker().SetFetchResult( iFilename, KErrNone ); |
502 } |
512 } |
503 else if(iTargetUri != KNullDesC) |
513 else if(iTargetUri != KNullDesC) |
504 { |
514 { |
505 iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( |
515 iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( |
506 iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); |
516 iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue ); |
507 //remove result from fetched checker |
517 //remove result from fetched checker |
508 iServer.FetchedChecker().SetFetchResult( iTargetUri, iThumbnailSize, KErrNone ); |
518 iServer.FetchedChecker().SetFetchResult( iTargetUri, KErrNone ); |
509 } |
519 } |
510 |
520 |
511 CleanupStack::PopAndDestroy( tempBitmap ); |
521 CleanupStack::PopAndDestroy( tempBitmap ); |
512 } |
522 } |
513 |
523 |