engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp
changeset 36 6481344a6d67
parent 24 99ad1390cd33
child 54 0f0f3f26f787
--- a/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp	Thu May 27 12:51:42 2010 +0300
+++ b/engine/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsthumbnail.cpp	Fri Jun 11 13:38:23 2010 +0300
@@ -156,14 +156,17 @@
 void CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL()
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL()") 
+#ifdef _DEBUG
+    iStartTime.HomeTime(); 
+#endif
     CGlxThumbnailRequest* request = static_cast<CGlxThumbnailRequest*>(iRequest);
     
     TGlxThumbnailRequest tnReq;
     request->ThumbnailRequest(tnReq);
-#ifdef _DEBUG
-	RDebug::Print(_L("==> CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL - FetchThumbnailL(Id=%d), W(%d), H(%d)"), request->ItemId().Value(), tnReq.iSizeClass.iWidth, tnReq.iSizeClass.iHeight);
-	iStartTime.HomeTime(); // Get home time
-#endif
+    GLX_DEBUG4("*** CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL() Id=%d, TN Size w(%d) h(%d) ***", tnReq.iId.Value(),
+    						tnReq.iSizeClass.iWidth, tnReq.iSizeClass.iHeight);
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::ExecuteRequestL() iPriorityMode=%d", tnReq.iPriorityMode);
+	
 #ifdef USE_S60_TNM
 	if(request->ThumbnailInfo())
 		{
@@ -173,7 +176,7 @@
 			}
 		else
 			{
-			ThumbnailFetchComplete(KErrNone);
+			ThumbnailFetchComplete(KErrNone, ETrue);
 			}
 		}
 	else
@@ -241,11 +244,13 @@
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL()")
     __ASSERT_DEBUG(dynamic_cast<CGlxThumbnailRequest*>(iRequest), Panic(EGlxPanicLogicError));
+    CGlxThumbnailRequest* req = static_cast<CGlxThumbnailRequest*>(iRequest);
+    GLX_DEBUG2("*** CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL() Id=%d ***", req->ItemId().Value());
 #ifdef _DEBUG
-    iStopTime.HomeTime(); // Get home time
-	RDebug::Print(_L("==> ThumbnailFetchComplete <%d> us"), (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
-#endif
-    CGlxThumbnailRequest* req = static_cast<CGlxThumbnailRequest*>(iRequest);
+    iStopTime.HomeTime(); 
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail:HandleThumbnailFetchCompleteL() took %d us",
+                     (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64());
+#endif    
     delete iResponse;
     iResponse = NULL;
     iResponse = CMPXMedia::NewL();
@@ -257,6 +262,7 @@
     tnAttribute->iDimensions = size;
     tnAttribute->iCroppingRect = tnRequest.iCroppingRect;
     tnAttribute->iThumbnailQuality = aQuality;
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::HandleThumbnailFetchCompleteL() aQuality=%d", aQuality);
 
     TUint attributeId = req->AttributeId();
     if ( GlxIsFullThumbnailAttribute(attributeId) )
@@ -273,7 +279,8 @@
     }
 
 #ifdef USE_S60_TNM
-void CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TInt aError)
+void CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TInt aError, 
+                                                            TBool aQuality)
 	{
     TRACER("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete(TNM)")
     CGlxThumbnailRequest* request = static_cast<CGlxThumbnailRequest*>(iRequest);
@@ -282,7 +289,12 @@
     TInt err = aError;
     if(!err)
         {
-        TRAP(err, HandleThumbnailFetchCompleteL(tnRequest.iId, EGlxThumbnailQualityHigh));
+        TGlxThumbnailQuality tnQuality = EGlxThumbnailQualityHigh;
+        if (!aQuality)
+            {
+            tnQuality = EGlxThumbnailQualityLow;
+            }
+        TRAP(err, HandleThumbnailFetchCompleteL(tnRequest.iId, tnQuality));
         }
     HandleRequestComplete(err);
 	}
@@ -297,6 +309,7 @@
     const TGlxMediaId& aItemId, TGlxThumbnailQuality aQuality, TInt aErrorCode)
     {
     TRACER("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete()")
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::ThumbnailFetchComplete() aErrorCode=%d", aErrorCode);
     iTnRequestInProgress = EFalse;
     TInt err = aErrorCode;
     if(!err)
@@ -368,18 +381,19 @@
         
         /// @todo: use default filter so we can ensure we always get correct first item if filters change
         iFilterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
-        iFilterProperties.iSortDirection = EGlxFilterSortDirectionAscending;
+        iFilterProperties.iSortDirection = EGlxFilterSortDirectionOverrideToDescendingIfDate;
         iFilterProperties.iLastCaptureDate = ETrue;
 
         if( CGlxDataSource::EContainerTypeMonth == containerType )
             {
-            iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+            iFilterProperties.iOrigin = EGlxFilterOriginAll;
             AddMonthFilterL(item, iFilterProperties);
             container = TGlxMediaId(KGlxCollectionRootId);
             objectDef = &DataSource()->ObjectDef();
             }
             
-        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  EQueryResultModeObjectWithFreetexts, container);        
+        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  
+                EQueryResultModeItem, container);        
         }
     else
         {
@@ -433,7 +447,8 @@
         }
 
     CMdEProperty* lastModifiedDateProperty;
-    CMdEPropertyDef& lastModifiedDatePropertyDef = aItem->Def().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
+    CMdEPropertyDef& lastModifiedDatePropertyDef = aItem->Def().GetPropertyDefL(
+            KPropertyDefNameLastModifiedDate);
 
 #ifdef _DEBUG
     TInt index = // This variable is only required for the assert debug below. If it is not wrapped in an  
@@ -467,7 +482,8 @@
         // i.e. background thumbnail generation
         // so we get status from CAF to avoid forcing second stage harvest
         TRAP(err, 
-            ContentAccess::CContent* content = ContentAccess::CContent::NewLC(iTnFileInfo->FilePath());
+            ContentAccess::CContent* content = ContentAccess::CContent::NewLC(
+                    iTnFileInfo->FilePath());
             content->GetAttribute(ContentAccess::EIsProtected, iTnFileInfo->iIsProtected);
             CleanupStack::PopAndDestroy(content);
             );
@@ -512,10 +528,11 @@
 void CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest(TInt aError)
 	{
     TRACER("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest(TInt aError)")
+    GLX_DEBUG2("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest  aError=%d", aError);
 #ifdef USE_S60_TNM
 	if (aError != KErrNone)
 		{
-		ThumbnailFetchComplete(aError);
+		ThumbnailFetchComplete(aError, EFalse);
 		}
 	else
 		{
@@ -526,11 +543,15 @@
 		if (tnReq.iSizeClass.iWidth > 0 && tnReq.iSizeClass.iHeight > 0 )
 			{
 		    request->SetThumbnailInfo(iTnFileInfo);
+		    //This function is called number of times as a callback ,
+            //hence not trapping the leaving function which costs time and memory.
+            //Ignoring this for code scanner warnings - Leaving functions called in non-leaving functions.
 			DataSource()->FetchThumbnailL(iRequest, *this);
 			}
 		else
 			{
-			ThumbnailFetchComplete(KErrArgument);
+		    GLX_LOG_INFO("CGlxDataSourceTaskMdeThumbnail::CompleteThumbnailRequest KErrArgument");
+			ThumbnailFetchComplete(KErrArgument, EFalse);
 			}
 			}
 #else
@@ -571,18 +592,19 @@
         
         /// @todo: use default filter so we can ensure we always get correct first item if filters change
         iFilterProperties.iSortOrder = EGlxFilterSortOrderCaptureDate;
-        iFilterProperties.iSortDirection = EGlxFilterSortDirectionAscending;
+        iFilterProperties.iSortDirection = EGlxFilterSortDirectionOverrideToDescendingIfDate;
         iFilterProperties.iLastCaptureDate = ETrue;
 
         if( CGlxDataSource::EContainerTypeMonth == containerType )
             {
-            iFilterProperties.iOrigin = EGlxFilterOriginCamera;
+            iFilterProperties.iOrigin = EGlxFilterOriginAll;
             AddMonthFilterL(item, iFilterProperties);
             container = TGlxMediaId(KGlxCollectionRootId);
             objectDef = &DataSource()->ObjectDef();
             }
             
-        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery,  EQueryResultModeObjectWithFreetexts, container);        
+        DoQueryL(*objectDef, ETrue, EContainerFirstItemQuery, 
+                EQueryResultModeItem, container);        
         }
     else
         {