imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailmanagerimpl.cpp
changeset 0 2014ca87e772
child 11 dea39715fc05
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailmanagerimpl.cpp	Tue Jan 26 15:18:05 2010 +0200
@@ -0,0 +1,621 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation class of Thumbnail Manager.
+ *
+*/
+
+
+#include <e32base.h>
+#include <akniconconfig.h>
+#include <fbs.h>
+#include <badesca.h>
+#include <centralrepository.h>
+
+#include <thumbnailmanager.h>
+
+#include "thumbnailmanagerimpl.h"
+#include "thumbnailrequestactive.h"
+#include "thumbnailprovider.h"
+#include "thumbnailsession.h"
+#include "thumbnailmanageruids.hrh"
+#include "thumbnailmanagerprivatecrkeys.h"
+#include "thumbnailpanic.h"
+
+#include "thumbnaildata.h"
+
+
+const TInt KThumbnailMimeTypeListGranularity = 8;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::~CThumbnailManagerImpl()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CThumbnailManagerImpl::~CThumbnailManagerImpl()
+    {
+    delete iRequestQueue;   
+    iSession.Close();
+    iFs.Close();
+
+    // Check if we need to disconnect Fbs
+    TInt sessionCount = (TInt)Dll::Tls(); 
+    if ( sessionCount > 0)
+        { 
+        if( --sessionCount == 0 )
+            {
+		    TN_DEBUG1( "CThumbnailManagerImpl::~CThumbnailManagerImpl() - Disconnect FBS" );
+            iFbsSession.Disconnect();
+            }
+	    TN_DEBUG2( "CThumbnailManagerImpl::~CThumbnailManagerImpl() - update sessionCount == %d to TLS", sessionCount );
+        Dll::SetTls( (TAny*)sessionCount );
+        }
+
+    delete iMimeTypeList;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CThumbnailManagerImpl* CThumbnailManagerImpl::NewLC( MThumbnailManagerObserver&
+    aObserver )
+    {
+    CThumbnailManagerImpl* self = new( ELeave )CThumbnailManagerImpl( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::CThumbnailManagerImpl()
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CThumbnailManagerImpl::CThumbnailManagerImpl( MThumbnailManagerObserver&
+    aObserver ): iObserver( aObserver ), iDisplayMode(
+    KThumbnailDefaultDisplayMode ), iFlags( EDefaultFlags ), iQualityPreference
+    ( EOptimizeForQuality ), iRequestId( 0 )
+    {
+    // No implementation required
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::ConstructL()
+    {
+    User::LeaveIfError( iSession.Connect());
+    User::LeaveIfError( iFs.Connect());
+    User::LeaveIfError( iFs.ShareProtected());
+
+    if ( !RFbsSession::GetSession() )
+            {
+            // We need to connect to Fbs (first user in this thread)
+            // Maintain a reference count in TLS
+            User::LeaveIfError( iFbsSession.Connect()); 
+            Dll::SetTls( (TAny*)1 ); 
+		    TN_DEBUG2( "CThumbnailManagerImpl::ConstructL() - update sessionCount == %d to TLS", 1 );
+            }
+        else
+            {
+            TInt sessionCount = (TInt)Dll::Tls(); 
+            if( sessionCount++ > 0 )
+                {
+                // Increase the reference count in TLS
+                Dll::SetTls( (TAny*)sessionCount );
+			    TN_DEBUG2( "CThumbnailManagerImpl::ConstructL() - update sessionCount == %d to TLS", sessionCount );
+                } 
+            else
+                {
+                // Fbs connection was available in the beginning, no need to
+                // increase the reference count
+                }
+            }
+    
+    // request processor
+    iRequestQueue = CThumbnailRequestQueue::NewL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::GetThumbnailL
+// Get a thumbnail for an object file.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL(
+    CThumbnailObjectSource& aObjectSource, TAny* aClientData /*= NULL*/, const
+    TInt aPriority, TBool aGeneratePersistentSizesOnly)
+    {
+    iRequestId++;
+    TN_DEBUG4( "CThumbnailManagerImpl::GetThumbnailL() URI==%S, iThumbnailSize==%d %d", &aObjectSource.Uri(), iThumbnailSize, iRequestId );
+    
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+
+    CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+        ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+    CleanupStack::PushL( getThumbnailActive );
+    
+    if(aObjectSource.Id() > 0)
+        {
+        getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
+            iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
+            KNullDesC, iThumbnailSize);
+        }
+    else if ( aObjectSource.Uri().Length())
+        {
+        getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
+            iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
+            KNullDesC, iThumbnailSize );
+        }
+    else
+        {
+        getThumbnailActive->GetThumbnailL( aObjectSource.FileHandle(), aObjectSource.Id(), iFlags,
+            iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
+            KNullDesC, iThumbnailSize );
+        }
+    
+    iRequestQueue->AddRequestL( getThumbnailActive );
+    CleanupStack::Pop( getThumbnailActive );
+    
+    iRequestQueue->Process();
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::GetThumbnailL() - request ID: %d", iRequestId );
+    
+    return iRequestId;
+    }
+    
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::GetThumbnailL
+// Get a thumbnail for an object file.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL(
+    CThumbnailObjectSource& aObjectSource, TAny* aClientData /*= NULL*/, const
+    TInt aPriority )
+    {
+    return GetThumbnailL( aObjectSource, aClientData, aPriority, EFalse );
+    }    
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::GetThumbnailL
+// Get a thumbnail for an object file.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL( const TThumbnailId
+    aThumbnailId, TAny* aClientData /*= NULL*/, TInt aPriority)
+    {
+    iRequestId++;
+    TN_DEBUG5( "CThumbnailManagerImpl::GetThumbnailL() reqid==%d, aThumbnailId==%d, iThumbnailSize==%d %d", iRequestId, aThumbnailId, iThumbnailSize, iRequestId );
+
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+
+    CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+        ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+    CleanupStack::PushL( getThumbnailActive );
+    
+    getThumbnailActive->GetThumbnailL( KNullDesC, aThumbnailId, iFlags,
+                       iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
+                       EFalse, KNullDesC, iThumbnailSize );
+    
+    iRequestQueue->AddRequestL( getThumbnailActive );
+    CleanupStack::Pop( getThumbnailActive );
+    
+    iRequestQueue->Process();
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::GetThumbnailL() - request ID: %d", iRequestId );
+    
+    return iRequestId;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::ImportThumbnailL
+// Import an image to be used as thumbnail for an object.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::ImportThumbnailL(
+    CThumbnailObjectSource& aObjectSource, const TDesC& aTargetUri,
+    TAny* aClientData /*= NULL*/, const TInt aPriority)
+    {
+    iRequestId++;
+
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+
+    CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+        ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+    CleanupStack::PushL( getThumbnailActive );
+
+    if ( aObjectSource.Uri().Length())
+        {
+        getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
+            iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
+            EFalse, aTargetUri, iThumbnailSize );
+        }
+    else
+        {
+        getThumbnailActive->GetThumbnailL( aObjectSource.FileHandle(), aObjectSource.Id(), 
+            iFlags, iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
+            EFalse, aTargetUri, iThumbnailSize );
+        }
+    
+    iRequestQueue->AddRequestL( getThumbnailActive );
+    CleanupStack::Pop( getThumbnailActive );
+    
+    iRequestQueue->Process();
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::ImportThumbnailL() - request ID: %d", iRequestId );
+    
+    return iRequestId;
+    }
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetThumbnailL
+// Import an image to be used as thumbnail for an object.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::SetThumbnailL( CThumbnailObjectSource& aObjectSource,
+    TAny* aClientData, TInt aPriority )
+    {
+    iRequestId++;
+
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+
+    CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+        ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+    CleanupStack::PushL( getThumbnailActive );
+    
+    if ( aObjectSource.Uri().Length() &&
+         aObjectSource.Buffer() != NULL &&
+         aObjectSource.MimeType() != KNullDesC8)
+        {
+        getThumbnailActive->SetThumbnailL( aObjectSource.GetBufferOwnership(), aObjectSource.Id(),
+            aObjectSource.MimeType(), iFlags, iQualityPreference, iSize, iDisplayMode,
+            aPriority, aClientData, EFalse, aObjectSource.Uri(), iThumbnailSize);
+        }
+    
+    iRequestQueue->AddRequestL( getThumbnailActive );
+    CleanupStack::Pop( getThumbnailActive );
+
+    iRequestQueue->Process();
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::SetThumbnailL() - request ID: %d", iRequestId );
+    
+    return iRequestId;
+    }
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::CreateThumbnails
+// Create persistent size thumbnails for an object.
+// ---------------------------------------------------------------------------
+//
+TThumbnailRequestId CThumbnailManagerImpl::CreateThumbnails(
+	CThumbnailObjectSource& aObjectSource, TInt aPriority )
+	{
+	TRAPD(err,
+		TN_DEBUG2( "CThumbnailManagerImpl::CreateThumbnails() aObjectSource==%S ", &aObjectSource.Uri() );
+		iRequestId++;
+
+		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+
+		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+			( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+		
+		CleanupStack::PushL( getThumbnailActive );
+		
+		if (aObjectSource.Bitmap())
+			{
+			// from bitmap
+			getThumbnailActive->SetThumbnailL( aObjectSource.GetBitmapOwnership(),
+						 aObjectSource.Id(), KBmpMime, iFlags, iQualityPreference,
+						 iSize, iDisplayMode, aPriority, NULL, ETrue,
+						 aObjectSource.Uri(), EUnknownThumbnailSize);
+			}
+		else if( !aObjectSource.Buffer() )
+			{        
+			getThumbnailActive->GetThumbnailL( aObjectSource.Id(), 
+						 aObjectSource.Uri(), iFlags, iQualityPreference, iSize,
+						 iDisplayMode, aPriority, NULL, ETrue, aObjectSource.Uri(), 
+						 EUnknownThumbnailSize);      
+			}
+		else
+			{
+			// from buffer
+			getThumbnailActive->SetThumbnailL( aObjectSource.GetBufferOwnership(),
+						 aObjectSource.Id(), aObjectSource.MimeType(), iFlags,
+						 iQualityPreference, iSize, iDisplayMode, aPriority, NULL,
+						 ETrue, aObjectSource.Uri(), EUnknownThumbnailSize);
+			}
+		
+		iRequestQueue->AddRequestL( getThumbnailActive );
+		
+		CleanupStack::Pop( getThumbnailActive );
+		
+		iRequestQueue->Process();
+		
+		TN_DEBUG2( "CThumbnailManagerImpl::CreateThumbnails() - request ID: %d", iRequestId );
+	);
+	
+	if( err != KErrNone)
+	    {
+	    return err;
+	    }
+    
+    return iRequestId;		
+	}
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::DisplayMode()
+// Get the current display mode for thumbnail bitmaps.
+// ---------------------------------------------------------------------------
+//
+TDisplayMode CThumbnailManagerImpl::DisplayMode()const
+    {
+    return iDisplayMode;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetDisplayModeL()
+// Set the current display mode for thumbnail bitmaps.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::SetDisplayModeL( const TDisplayMode aDisplayMode )
+    {
+    iDisplayMode = aDisplayMode;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::QualityPreference()
+// Get the current quality versus performance preference.
+// ---------------------------------------------------------------------------
+//
+CThumbnailManager::TThumbnailQualityPreference CThumbnailManagerImpl
+    ::QualityPreference()const
+    {
+    return iQualityPreference;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetQualityPreferenceL()
+// Set quality versus performance preference.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::SetQualityPreferenceL( const
+    TThumbnailQualityPreference aQualityPreference )
+    {
+    iQualityPreference = aQualityPreference;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::ThumbnailSize()
+// Get the current desired size for thumbnail bitmaps.
+// ---------------------------------------------------------------------------
+//
+const TSize& CThumbnailManagerImpl::ThumbnailSize()const
+    {
+    return iSize;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetThumbnailSizeL()
+// Set desired size for thumbnail bitmaps.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::SetThumbnailSizeL( const TSize& aThumbnailSize )
+    {
+    iSize = aThumbnailSize;
+    iThumbnailSize = ECustomThumbnailSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetThumbnailSizeL()
+// Set desired size for thumbnail bitmaps.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::SetThumbnailSizeL( const TThumbnailSize aThumbnailSize )
+    {
+    iThumbnailSize = aThumbnailSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::Flags()
+// Get current flags for thumbnail generation.
+// ---------------------------------------------------------------------------
+//
+CThumbnailManager::TThumbnailFlags CThumbnailManagerImpl::Flags()const
+    {
+    return iFlags;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::SetFlagsL()
+// Set flags for thumbnail generation. Several flags may be enabled
+// by combining the values using bitwise or.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::SetFlagsL( const TThumbnailFlags aFlags )
+    {
+    iFlags = aFlags;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::DeleteThumbnails()
+// Delete all thumbnails for a given object.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::DeleteThumbnails( CThumbnailObjectSource&
+    aObjectSource )
+    {
+	TRAP_IGNORE(
+		iRequestId++;
+		TN_DEBUG2( "CThumbnailManagerImpl::DeleteThumbnails() URI==%S ", &aObjectSource.Uri() );
+
+		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+		
+		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+			( iFs, iSession, iObserver, iRequestId, CActive::EPriorityIdle, iRequestQueue );
+
+		CleanupStack::PushL( getThumbnailActive );
+		
+		const TDesC& uri = aObjectSource.Uri();
+		
+		if ( uri.Length())
+			{
+			getThumbnailActive->DeleteThumbnails( uri, 0, CActive::EPriorityIdle );
+			}
+		else
+			{
+			TInt err = aObjectSource.FileHandle().FullName( iFileNameBuf );
+			if ( !err )
+				{
+				getThumbnailActive->DeleteThumbnails( iFileNameBuf, 0, CActive::EPriorityIdle );
+				}
+			}
+		
+		iRequestQueue->AddRequestL( getThumbnailActive );
+		
+		CleanupStack::Pop( getThumbnailActive );
+		 
+		iRequestQueue->Process();   
+	);
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::DeleteThumbnailsL()
+// Delete thumbnails by TThumbnailId.
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::DeleteThumbnails( const TThumbnailId aItemId )
+    {
+	TRAP_IGNORE(
+		iRequestId++;
+		TN_DEBUG2( "CThumbnailManagerImpl::DeleteThumbnails() aItemId==%d ", aItemId );
+		
+		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+		
+		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+			( iFs, iSession, iObserver, iRequestId, CActive::EPriorityIdle, iRequestQueue );
+		
+		CleanupStack::PushL( getThumbnailActive );
+		
+		getThumbnailActive->DeleteThumbnails( KNullDesC, aItemId, CActive::EPriorityIdle );
+		
+		iRequestQueue->AddRequestL( getThumbnailActive );
+		
+		CleanupStack::Pop( getThumbnailActive );
+		
+		iRequestQueue->Process();
+	);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::CancelRequest()
+// Cancel a thumbnail operation.
+// ---------------------------------------------------------------------------
+//
+TInt CThumbnailManagerImpl::CancelRequest( const TThumbnailRequestId aId )
+    {
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::CancelRequest() - request ID: %d", aId );
+    
+    return iRequestQueue->CancelRequest(aId);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::ChangePriority()
+// Change the priority of a queued thumbnail operation.
+// ---------------------------------------------------------------------------
+//
+TInt CThumbnailManagerImpl::ChangePriority( const TThumbnailRequestId aId,
+    const TInt aNewPriority )
+    {
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+    
+    TN_DEBUG2( "CThumbnailManagerImpl::ChangePriority() - request ID: %d", aId );
+    
+    return iRequestQueue->ChangePriority(aId, aNewPriority);
+    }
+
+// ---------------------------------------------------------------------------
+// Get the list of supported file systems from server
+// ---------------------------------------------------------------------------
+//
+const CDesCArray& CThumbnailManagerImpl::GetSupportedMimeTypesL()
+    {
+    if ( !iMimeTypeList )
+        {
+        iMimeTypeList = new( ELeave )CDesCArraySeg(
+            KThumbnailMimeTypeListGranularity );
+        HBufC* buf = iSession.GetMimeTypeListL();
+        CleanupStack::PushL( buf );
+        TLex lex( *buf );
+        while ( !lex.Eos())
+            {
+            iMimeTypeList->AppendL( lex.NextToken());
+            }
+        CleanupStack::PopAndDestroy( buf );
+        }
+    return * iMimeTypeList;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CThumbnailManagerImpl::UpdateThumbnails()
+// Update thumbnails by given ID
+// ---------------------------------------------------------------------------
+//
+void CThumbnailManagerImpl::UpdateThumbnailsL( const TThumbnailId aItemId, const TDesC& aPath,
+                                               const TInt aOrientation, const TInt64 aModified, 
+                                               TInt aPriority )
+    {
+    iRequestId++;
+    TN_DEBUG4( "CThumbnailManagerImpl::UpdateThumbnailsL() URI==%S, aItemId==%d %d", &aPath, aItemId, iRequestId); 
+    
+    __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
+    
+    CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
+        ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
+    CleanupStack::PushL( getThumbnailActive );
+    
+    getThumbnailActive->UpdateThumbnailsL( aPath, aItemId, iFlags, iQualityPreference,
+            iDisplayMode, aPriority, aOrientation, aModified );
+    
+    iRequestQueue->AddRequestL( getThumbnailActive );
+    CleanupStack::Pop( getThumbnailActive );
+    
+    iRequestQueue->Process();
+    }
+
+// End of file