| changeset 14 | 2edacbf5d3f9 |
| parent 1 | 235a7fc86938 |
| child 15 | 7197e789b953 |
| 1:235a7fc86938 | 14:2edacbf5d3f9 |
|---|---|
190 { |
190 { |
191 break; |
191 break; |
192 } |
192 } |
193 } |
193 } |
194 |
194 |
195 iTimer->Cancel(); |
|
195 iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, |
196 iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, |
196 TCallBack(TimerCallBack, this)); |
197 TCallBack(TimerCallBack, this)); |
197 SetActive(); |
198 SetActive(); |
198 } |
199 } |
199 |
200 |
202 // CThumbnailRequestActive::RunL() |
203 // CThumbnailRequestActive::RunL() |
203 // --------------------------------------------------------------------------- |
204 // --------------------------------------------------------------------------- |
204 // |
205 // |
205 void CThumbnailRequestActive::RunL() |
206 void CThumbnailRequestActive::RunL() |
206 { |
207 { |
207 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - request ID: %d", iParams.iRequestId ); |
208 TN_DEBUG2( "CThumbnailRequestActive::RunL() - request ID: %d", iParams.iRequestId ); |
208 |
209 |
209 if ( iParams.iControlFlags == EThumbnailPreviewThumbnail ) |
210 if ( iParams.iControlFlags == EThumbnailPreviewThumbnail ) |
210 { |
211 { |
211 iRequestCompleted = EFalse; |
212 iRequestCompleted = EFalse; |
212 iProcessingPreview = ETrue; |
213 iProcessingPreview = ETrue; |
231 #endif |
232 #endif |
232 } |
233 } |
233 else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && |
234 else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && |
234 !( iParams.iFlags& CThumbnailManager::EDoNotCreate )) |
235 !( iParams.iFlags& CThumbnailManager::EDoNotCreate )) |
235 { |
236 { |
236 TN_DEBUG1( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle" ); |
237 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle %S", &iParams.iFileName ); |
237 iRequestCompleted = EFalse; |
238 iRequestCompleted = EFalse; |
238 |
239 |
239 // We tried to get thumbnail using file path, but it was not found in |
240 // We tried to get thumbnail using file path, but it was not found in |
240 // the database. We need to open the file now (on the client side) and |
241 // the database. We need to open the file now (on the client side) and |
241 // use file handle. |
242 // use file handle. |
242 User::LeaveIfError( iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters )); |
243 |
244 TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters ); |
|
245 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err ); |
|
246 User::LeaveIfError( err ); |
|
247 |
|
243 CleanupClosePushL( iFile ); |
248 CleanupClosePushL( iFile ); |
244 |
249 |
245 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName ); |
250 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName ); |
246 |
251 |
247 iSession.RequestThumbnailL( iFile, iParams.iTargetUri, iParamsPckg, iStatus ); |
252 iSession.RequestThumbnailL( iFile, iParams.iFileName, iParamsPckg, iStatus ); |
248 CleanupStack::PopAndDestroy( &iFile ); |
253 CleanupStack::PopAndDestroy( &iFile ); |
249 |
254 |
250 iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, |
255 iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, |
251 TCallBack(TimerCallBack, this)); |
256 TCallBack(TimerCallBack, this)); |
252 SetActive(); |
257 SetActive(); |
253 } |
258 } |
254 else if ( iStatus.Int()) |
259 else if ( iStatus.Int()) |
255 { |
260 { |
256 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - error (%d) occured", iStatus.Int() ); |
261 TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() ); |
257 // An error occurred |
262 // An error occurred |
258 iError = iStatus.Int(); |
263 iError = iStatus.Int(); |
259 HandleError(); |
264 HandleError(); |
260 } |
265 } |
261 else if (iParams.iControlFlags == EThumbnailGeneratePersistentSizesOnly) |
266 //1st round thumb ready from exif (stored) |
267 else if (iParams.iOriginalControlFlags == EThumbnailGeneratePersistentSizesOnly && !iProcessingPreview) |
|
262 { |
268 { |
263 TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes" ); |
269 TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes thumbnailready" ); |
264 iBitmapHandle = iParams.iBitmapHandle; |
270 iBitmapHandle = iParams.iBitmapHandle; |
265 |
271 |
266 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId ); |
272 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId ); |
267 iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId ); |
273 iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId ); |
268 |
274 |
269 ReleaseServerBitmap(); |
275 ReleaseServerBitmap(); |
270 iRequestQueue->RequestComplete(this); |
276 iRequestQueue->RequestComplete(this); |
271 |
277 |
272 #ifdef _DEBUG |
278 #ifdef _DEBUG |
273 TTime stop; |
279 TTime stop; |
274 stop.UniversalTime(); |
280 stop.UniversalTime(); |
275 TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms", |
281 TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms", |
276 iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 ); |
282 iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 ); |
277 #endif |
283 #endif |
278 } |
284 } |
285 //1st round preview ready from too low quality exif/exif not found (not-stored) |
|
286 //relauch using normal decoding |
|
287 else if (iParams.iOriginalControlFlags == EThumbnailGeneratePersistentSizesOnly && iProcessingPreview) |
|
288 { |
|
289 TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes thumbnailpreviewready" ); |
|
290 iBitmapHandle = iParams.iBitmapHandle; |
|
291 |
|
292 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId ); |
|
293 iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId ); |
|
294 |
|
295 iProcessingPreview = EFalse; |
|
296 |
|
297 ReleaseServerBitmap(); |
|
298 |
|
299 //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes |
|
300 iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality; |
|
301 iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly; |
|
302 iRequestType = EReqUpdateThumbnails; |
|
303 |
|
304 //increase priority |
|
305 this->SetPriority(this->Priority() + 1); |
|
306 iParams.iPriority++; |
|
307 |
|
308 iSession.UpdateThumbnails( iPath, iOrientation, iModified, iParamsPckg, iStatus ); |
|
309 |
|
310 SetActive(); |
|
311 |
|
312 #ifdef _DEBUG |
|
313 TTime stop; |
|
314 stop.UniversalTime(); |
|
315 TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms", |
|
316 iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 ); |
|
317 #endif |
|
318 } |
|
279 else |
319 else |
280 { |
320 { |
281 TN_DEBUG1( "CThumbnaiRequestActive::RunL() - succesful" ); |
321 TN_DEBUG1( "CThumbnailRequestActive::RunL() - succesful" ); |
282 |
322 |
283 // Success |
323 // Success |
284 iBitmapHandle = iParams.iBitmapHandle; |
324 iBitmapHandle = iParams.iBitmapHandle; |
285 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
325 |
286 CleanupStack::PushL( bitmap ); |
326 if( iBitmapHandle ) |
287 User::LeaveIfError( bitmap->Duplicate( iBitmapHandle )); |
327 { |
288 CleanupStack::Pop( bitmap ); |
328 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
289 |
329 CleanupStack::PushL( bitmap ); |
290 // reduce bpp value (displaymode to match reqested bits per pixel) |
330 User::LeaveIfError( bitmap->Duplicate( iBitmapHandle )); |
291 #ifdef _DEBUG |
331 CleanupStack::Pop( bitmap ); |
292 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode()); |
332 |
293 #endif |
333 // reduce bpp value (displaymode to match reqested bits per pixel) |
294 |
334 #ifdef _DEBUG |
295 if( bitmap->DisplayMode() > iParams.iDisplayMode ) |
335 TN_DEBUG2( "CThumbnailRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode()); |
296 { |
336 #endif |
297 bitmap->SetDisplayMode( iParams.iDisplayMode ); |
337 |
298 #ifdef _DEBUG |
338 if( bitmap->DisplayMode() > iParams.iDisplayMode ) |
299 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is now %d", bitmap->DisplayMode()); |
339 { |
300 #endif |
340 bitmap->SetDisplayMode( iParams.iDisplayMode ); |
341 #ifdef _DEBUG |
|
342 TN_DEBUG2( "CThumbnailRequestActive::RunL() - displaymode is now %d", bitmap->DisplayMode()); |
|
343 #endif |
|
344 } |
|
345 |
|
346 iCallbackThumbnail->Set( bitmap, iClientData ); |
|
347 bitmap = NULL; // Owned by iCallbackThumbnail or client now |
|
301 } |
348 } |
302 |
|
303 iCallbackThumbnail->Set( bitmap, iClientData ); |
|
304 bitmap = NULL; // Owned by iCallbackThumbnail or client now |
|
305 |
349 |
306 if ( iProcessingPreview ) |
350 if ( iProcessingPreview ) |
307 { |
351 { |
308 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId ); |
352 TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId ); |
353 //increase priority of 2nd round (both, AO and request itself) |
|
354 this->SetPriority(this->Priority() + 1); |
|
355 iParams.iPriority++; |
|
309 iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId ); |
356 iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId ); |
310 iProcessingPreview = EFalse; |
357 iProcessingPreview = EFalse; |
311 ReleaseServerBitmap(); |
358 ReleaseServerBitmap(); |
312 Get2ndPhaseThumbnailL(); |
359 Get2ndPhaseThumbnailL(); |
313 } |
360 } |
314 else |
361 else |
315 { |
362 { |
316 TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId ); |
363 TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId ); |
317 |
364 |
318 iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId ); |
365 iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId ); |
319 ReleaseServerBitmap(); |
366 ReleaseServerBitmap(); |
320 |
367 |
321 iRequestQueue->RequestComplete(this); |
368 iRequestQueue->RequestComplete(this); |
380 // Releases reserved bitmap. |
427 // Releases reserved bitmap. |
381 // --------------------------------------------------------------------------- |
428 // --------------------------------------------------------------------------- |
382 // |
429 // |
383 void CThumbnailRequestActive::ReleaseServerBitmap() |
430 void CThumbnailRequestActive::ReleaseServerBitmap() |
384 { |
431 { |
385 TN_DEBUG1( "CThumbnailRequestActive::ReleaseServerBitmap"); |
|
386 |
|
387 if ( iBitmapHandle && iSession.Handle()) |
432 if ( iBitmapHandle && iSession.Handle()) |
388 { |
433 { |
434 TN_DEBUG1( "CThumbnailRequestActive::ReleaseServerBitmap"); |
|
435 |
|
389 iSession.ReleaseBitmap( iBitmapHandle ); |
436 iSession.ReleaseBitmap( iBitmapHandle ); |
390 iBitmapHandle = 0; |
437 iBitmapHandle = 0; |
391 } |
438 } |
392 } |
439 } |
393 |
440 |
462 |
509 |
463 iClientData = aClientData; |
510 iClientData = aClientData; |
464 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
511 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
465 EThumbnailGeneratePersistentSizesOnly : |
512 EThumbnailGeneratePersistentSizesOnly : |
466 EThumbnailNoControlFlags); |
513 EThumbnailNoControlFlags); |
514 iParams.iOriginalControlFlags = iParams.iControlFlags; |
|
467 iParams.iBitmapHandle = 0; |
515 iParams.iBitmapHandle = 0; |
468 iParams.iSize = aSize; |
516 iParams.iSize = aSize; |
469 iParams.iDisplayMode = aDisplayMode; |
517 iParams.iDisplayMode = aDisplayMode; |
470 User::LeaveIfError( aFile.FullName( iParams.iFileName )); |
518 User::LeaveIfError( aFile.FullName( iParams.iFileName )); |
471 iParams.iRequestId = iRequestId; |
519 iParams.iRequestId = iRequestId; |
495 iRequestType = EReqGetThumbnailHandleLater; |
543 iRequestType = EReqGetThumbnailHandleLater; |
496 |
544 |
497 iClientData = aClientData; |
545 iClientData = aClientData; |
498 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
546 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
499 EThumbnailGeneratePersistentSizesOnly : |
547 EThumbnailGeneratePersistentSizesOnly : |
500 EThumbnailNoControlFlags); |
548 EThumbnailNoControlFlags); |
549 iParams.iOriginalControlFlags = iParams.iControlFlags; |
|
501 iParams.iBitmapHandle = 0; |
550 iParams.iBitmapHandle = 0; |
502 iParams.iSize = aSize; |
551 iParams.iSize = aSize; |
503 iParams.iDisplayMode = aDisplayMode; |
552 iParams.iDisplayMode = aDisplayMode; |
504 iParams.iFileName = aPath; |
553 iParams.iFileName = aPath; |
505 iParams.iRequestId = iRequestId; |
554 iParams.iRequestId = iRequestId; |
528 |
577 |
529 iClientData = aClientData; |
578 iClientData = aClientData; |
530 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
579 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
531 EThumbnailGeneratePersistentSizesOnly : |
580 EThumbnailGeneratePersistentSizesOnly : |
532 EThumbnailNoControlFlags); |
581 EThumbnailNoControlFlags); |
533 |
582 iParams.iOriginalControlFlags = iParams.iControlFlags; |
534 iParams.iBitmapHandle = 0; |
583 iParams.iBitmapHandle = 0; |
535 iParams.iSize = aSize; |
584 iParams.iSize = aSize; |
536 iParams.iDisplayMode = aDisplayMode; |
585 iParams.iDisplayMode = aDisplayMode; |
537 iParams.iRequestId = iRequestId; |
586 iParams.iRequestId = iRequestId; |
538 iParams.iPriority = aPriority; |
587 iParams.iPriority = aPriority; |
560 |
609 |
561 iClientData = aClientData; |
610 iClientData = aClientData; |
562 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
611 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
563 EThumbnailGeneratePersistentSizesOnly : |
612 EThumbnailGeneratePersistentSizesOnly : |
564 EThumbnailNoControlFlags); |
613 EThumbnailNoControlFlags); |
565 |
614 iParams.iOriginalControlFlags = iParams.iControlFlags; |
566 iParams.iMimeType = TDataType( aMimeType ); |
615 iParams.iMimeType = TDataType( aMimeType ); |
567 iParams.iBitmapHandle = 0; |
616 iParams.iBitmapHandle = 0; |
568 iParams.iSize = aSize; |
617 iParams.iSize = aSize; |
569 iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive()) |
618 iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive()) |
570 iParams.iThumbnailSize = aThumbnailSize; |
619 iParams.iThumbnailSize = aThumbnailSize; |
591 { |
640 { |
592 iClientData = aClientData; |
641 iClientData = aClientData; |
593 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
642 iParams.iControlFlags = (aGeneratePersistentSizesOnly ? |
594 EThumbnailGeneratePersistentSizesOnly : |
643 EThumbnailGeneratePersistentSizesOnly : |
595 EThumbnailNoControlFlags); |
644 EThumbnailNoControlFlags); |
596 |
645 iParams.iOriginalControlFlags = iParams.iControlFlags; |
597 iParams.iBitmapHandle = 0; |
646 iParams.iBitmapHandle = 0; |
598 iParams.iSize = aSize; |
647 iParams.iSize = aSize; |
599 iParams.iThumbnailSize = aThumbnailSize; |
648 iParams.iThumbnailSize = aThumbnailSize; |
600 iParams.iDisplayMode = aDisplayMode; |
649 iParams.iDisplayMode = aDisplayMode; |
601 iParams.iRequestId = iRequestId; |
650 iParams.iRequestId = iRequestId; |
642 const TInt64 aModified ) |
691 const TInt64 aModified ) |
643 { |
692 { |
644 iRequestType = EReqUpdateThumbnails; |
693 iRequestType = EReqUpdateThumbnails; |
645 |
694 |
646 iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly; |
695 iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly; |
696 iParams.iOriginalControlFlags = iParams.iControlFlags; |
|
647 iParams.iBitmapHandle = 0; |
697 iParams.iBitmapHandle = 0; |
648 iParams.iDisplayMode = aDisplayMode; |
698 iParams.iDisplayMode = aDisplayMode; |
649 iParams.iRequestId = iRequestId; |
699 iParams.iRequestId = iRequestId; |
650 iParams.iPriority = aPriority; |
700 iParams.iPriority = aPriority; |
651 iParams.iFlags = aFlags; |
701 iParams.iFlags = aFlags; |
728 TN_DEBUG1( "CThumbnailRequestActive::StartError"); |
778 TN_DEBUG1( "CThumbnailRequestActive::StartError"); |
729 |
779 |
730 iStartError = aErr; |
780 iStartError = aErr; |
731 iRequestActive = ETrue; |
781 iRequestActive = ETrue; |
732 |
782 |
733 iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, |
783 if (!iTimer->IsActive()) |
734 TCallBack(TimerCallBack, this)); |
784 { |
785 iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, |
|
786 TCallBack(TimerCallBack, this)); |
|
787 } |
|
735 } |
788 } |
736 |
789 |
737 // --------------------------------------------------------------------------- |
790 // --------------------------------------------------------------------------- |
738 // CThumbnailRequestActive::TimerCallBack() |
791 // CThumbnailRequestActive::TimerCallBack() |
739 // --------------------------------------------------------------------------- |
792 // --------------------------------------------------------------------------- |