photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp
branchRCL_3
changeset 13 bcb43dc84c44
parent 11 71da52165949
child 19 420f6808bf21
--- a/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Mon Mar 15 12:40:30 2010 +0200
+++ b/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Wed Mar 31 21:31:03 2010 +0300
@@ -20,25 +20,23 @@
 #include <glxthumbnailcontext.h>
 #include <glxfilterfactory.h>                         // For TGlxFilterFactory
 #include <glxthumbnailattributeinfo.h>
-#include "glxpreviewthumbnailbinding.h"
-#include "glxgeneraluiutilities.h"
 #include <glxuiutility.h>                               // For UiUtility instance
-
+#include <glxcollectionpluginmonths.hrh>
 #include <glxtracer.h>
 #include <glxlog.h>
-
+#include <glxerrormanager.h>             // For CGlxErrormanager
 #include <glxuistd.h>                    // Fetch context priority def'ns
 #include <mglxcache.h> 
 #include <ganes/HgDoubleGraphicList.h>
 
+#include "glxpreviewthumbnailbinding.h"
+#include "glxgeneraluiutilities.h"
 
-const TInt KInitialThumbnailsTimeDelay(100000);
-const TInt KWaitCount(10);
-const TInt KThumbnailStartTimeDelay(250000);
+const TInt KThumbnailsTimeTimeDelay(50000);
+const TInt KWaitCount(30);
 const TInt KPreviewThumbnailFetchCount(1);
 
 
-
 // ----------------------------------------------------------------------------
 // NewL
 // ----------------------------------------------------------------------------
@@ -85,11 +83,12 @@
     TRACER("CGlxPreviewThumbnailBinding::ConstructL");
     iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
     CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    CleanupClosePushL(*uiUtility);
     iGridIconSize = uiUtility->GetGridIconSize();
-    uiUtility->Close() ;
+    CleanupStack::PopAndDestroy(uiUtility);
     
     // Filter that filters out any GIF, corrupted images     
-    iPreviewFilter = TGlxFilterFactory::CreatePreviewFilterL();    
+    iPreviewFilter = TGlxFilterFactory::CreatePreviewTNFilterL();
     iThumbnailIterator.SetRange(KPreviewThumbnailFetchCount);
     iThumbnailContext = new (ELeave) CGlxAttributeContext(&iThumbnailIterator); 
     TMPXAttribute tnAttr( KGlxMediaIdThumbnail,
@@ -123,8 +122,7 @@
 	    iTimer->Cancel();
 	    }
 	delete iTimer;
-	iTimer = NULL;
-	iPreviewItemCount.Close();	
+	iTimer = NULL;	
 	}
 
 // ----------------------------------------------------------------------------
@@ -135,70 +133,55 @@
 void CGlxPreviewThumbnailBinding::TimerTickedL()
     {
     TRACER("CGlxPreviewThumbnailBinding::TimerTickedL");
-    
-    if(iMediaList && iMediaList->Count() && iPreviewItemCount.Count() )
-       	{
-    	TInt thumbnailIndex = iPreviewItemCount[iProgressIndex];
-    	if(thumbnailIndex < iMediaList->Count())
-    	    {
-            const TGlxMedia& item = iMediaList->Item(thumbnailIndex);
-            TMPXAttribute thumbnailAttribute(KGlxMediaIdThumbnail, 
-                GlxFullThumbnailAttributeId( ETrue,  iGridIconSize.iWidth,
-                        iGridIconSize.iHeight ) );
-            
+
+    if (!iMediaList)
+        {
+        GLX_LOG_INFO("TimerTickedL() iMediaList == NULL!");
+        return;
+        }
+
+    if (iMediaList->IsPopulated())
+        {
+        if (iMediaList->Count())
+            {
+            const TGlxMedia& item = iMediaList->Item(0);
+            TMPXAttribute thumbnailAttribute(KGlxMediaIdThumbnail,
+                    GlxFullThumbnailAttributeId(ETrue, iGridIconSize.iWidth,
+                            iGridIconSize.iHeight));
+
             const CGlxThumbnailAttribute* value = item.ThumbnailAttribute(
-                    thumbnailAttribute );
+                    thumbnailAttribute);
             if (value)
                 {
                 CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
                 ScaleBitmapToListSizeL(value->iBitmap, bitmap);
-                GLX_LOG_INFO1("iObserver.PreviewTNReadyL() iTrial=%d", iTrial);
-                iObserver.PreviewTNReadyL(bitmap, NULL,iPopulateListTNs);
+                GLX_LOG_INFO1("iObserver.PreviewTNReadyL() iTrialCount=%d", iTrialCount);
+                iObserver.PreviewTNReadyL(bitmap, NULL);
                 }
-    	    }
-       	}
-    else if (iPopulateListTNs && iMediaList && iMediaList->Count() == 0)
-	    {
-	    if (iTrial == KWaitCount)
-		    {		   
-		    iObserver.PreviewTNReadyL(NULL, NULL, iPopulateListTNs);
-		    iTrial=0;
-		    return;
-		    }
-	    iTrial++;
-	    }
-    else if(iMediaList && iMediaList->Count() )
-    	{
-		if(iProgressIndex > iMediaList->Count()-1 )
-			{
-			iProgressIndex = 0;
-			}
-		const TGlxMedia& item = iMediaList->Item(iProgressIndex);
-		TMPXAttribute thumbnailAttribute(KGlxMediaIdThumbnail, 
-			GlxFullThumbnailAttributeId( ETrue,  iGridIconSize.iWidth, 
-			        iGridIconSize.iHeight ) );
-		
-		const CGlxThumbnailAttribute* value = item.ThumbnailAttribute( 
-		        thumbnailAttribute );
-		if (value)
-			{
-			CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
-		    ScaleBitmapToListSizeL(value->iBitmap, bitmap);
-			GLX_LOG_INFO1("iObserver.PreviewTNReadyL() iTrialCount=%d", iTrialCount);
-			iObserver.PreviewTNReadyL(bitmap, NULL,iPopulateListTNs);
-			}
-		else
-			{
-			if (iTrialCount == KWaitCount)
-				{				
-				iObserver.PreviewTNReadyL(NULL, NULL, iPopulateListTNs);
-				iTrialCount=0;
-				return;
-				}
-			iTrialCount++;
-			}
-    	}   
+            else
+                {
+                TInt tnError = GlxErrorManager::HasAttributeErrorL(
+                        item.Properties(), KGlxMediaIdThumbnail);
+                if (tnError != KErrNone || iTrialCount == KWaitCount)
+                    {
+                    GLX_LOG_INFO1("TimerTickedL() tnError(%d) / Max Trialcount reached", tnError);
+                    iObserver.PreviewTNReadyL(NULL, NULL);
+                    iTrialCount = 0;
+                    return;
+                    }
+                iTrialCount++;
+                }
+            }
+        else
+            {
+            // Media count is zero, 
+            // Notify immedialtely to jump to the next item in the list 
+            GLX_LOG_INFO("TimerTickedL() iMediaList->Count() = 0");
+            iObserver.PreviewTNReadyL(NULL, NULL);
+            }
+        }
     }
+
 // ----------------------------------------------------------------------------
 // IsTimeL callback function invoked when timer expires
 // ----------------------------------------------------------------------------
@@ -229,16 +212,16 @@
         TBool aPopulateListTNs, TBool  aIsRefreshNeeded, TBool aBackwardNavigation)
     {
     TRACER("CGlxPreviewThumbnailBinding::HandleItemChangedL");
+    GLX_LOG_INFO("CGlxPreviewThumbnailBinding::HandleItemChangedL()");
+    
     iTimerTicked = EFalse;
     iPopulateListTNs = aPopulateListTNs;
-    iProgressIndex = KErrNone;
     iIsRefreshNeeded = aIsRefreshNeeded;
 
     // remove and close old medialist   
     if( iMediaList )
 	    {
-	    // Reset the trial and the trialCount to 0 while deleting the medialist 
-	    iTrial = 0;
+	    // Reset the trialCount to 0 while deleting the medialist 
 	    iTrialCount = 0;
 	    iMediaList->RemoveMediaListObserver( this );
         iMediaList->RemoveContext(iThumbnailContext);
@@ -255,7 +238,7 @@
 	    {
 	    //On backward navigation start the timer manually, since we do not  
         //get the attribute callback.
-        StartTimer(iPopulateListTNs);        
+        StartTimer();        
         }
     }
 
@@ -265,12 +248,10 @@
 // are populated.
 // ----------------------------------------------------------------------------
 //    
-void CGlxPreviewThumbnailBinding::StartTimer(TBool aPopulateListTNs)
+void CGlxPreviewThumbnailBinding::StartTimer()
     {
     TRACER("CGlxPreviewThumbnailBinding::StartTimer");
     
-    iPopulateListTNs = aPopulateListTNs;
-    
     if (iTimer)
         {
         iTimer->Cancel();
@@ -278,8 +259,8 @@
         
     if (iPopulateListTNs)
         {
-         iTimer->Start(KThumbnailStartTimeDelay, 
-                    KInitialThumbnailsTimeDelay, TCallBack(IsTimeL,this));
+        iTimer->Start(KThumbnailsTimeTimeDelay, KThumbnailsTimeTimeDelay,
+                TCallBack(IsTimeL, this));
         }
      }
 
@@ -342,13 +323,13 @@
                 thumbnailAttribute );
         if (value)
 	        {
-            iPreviewItemCount.AppendL( aItemIndex );
+	        GLX_LOG_INFO("CGlxPreviewThumbnailBinding::HandleAttributesAvailableL()");
             // sometimes we get HandleAttributesAvailableL callback after some delay
             // when we do cache cleanup. 
             if(!iPopulateListTNs)
             	{
             	iPopulateListTNs = ETrue;
-            	StartTimer(iPopulateListTNs);
+            	StartTimer();
             	} 
             }
         }
@@ -433,6 +414,7 @@
 void CGlxPreviewThumbnailBinding::HandlePopulatedL( MGlxMediaList* /*aList*/ )
     {
 	TRACER("CGlxPreviewThumbnailBinding::HandlePopulatedL()");
+    GLX_LOG_INFO("CGlxPreviewThumbnailBinding::HandlePopulatedL()");
 
 	// Do cache cleanup. If iIsRefreshNeeded is set,
 	// then clean up the item at 0th index 
@@ -448,7 +430,7 @@
 			}
 		}
 	//Start the timer
-	StartTimer(iPopulateListTNs);
+	StartTimer();
 	}
 
 // ----------------------------------------------------------------------------