imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailmanagerimpl.cpp
changeset 0 2014ca87e772
child 11 dea39715fc05
equal deleted inserted replaced
-1:000000000000 0:2014ca87e772
       
     1 /*
       
     2 * Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation class of Thumbnail Manager.
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 #include <e32base.h>
       
    20 #include <akniconconfig.h>
       
    21 #include <fbs.h>
       
    22 #include <badesca.h>
       
    23 #include <centralrepository.h>
       
    24 
       
    25 #include <thumbnailmanager.h>
       
    26 
       
    27 #include "thumbnailmanagerimpl.h"
       
    28 #include "thumbnailrequestactive.h"
       
    29 #include "thumbnailprovider.h"
       
    30 #include "thumbnailsession.h"
       
    31 #include "thumbnailmanageruids.hrh"
       
    32 #include "thumbnailmanagerprivatecrkeys.h"
       
    33 #include "thumbnailpanic.h"
       
    34 
       
    35 #include "thumbnaildata.h"
       
    36 
       
    37 
       
    38 const TInt KThumbnailMimeTypeListGranularity = 8;
       
    39 
       
    40 
       
    41 // ======== MEMBER FUNCTIONS ========
       
    42 
       
    43 // ---------------------------------------------------------------------------
       
    44 // CThumbnailManagerImpl::~CThumbnailManagerImpl()
       
    45 // Destructor.
       
    46 // ---------------------------------------------------------------------------
       
    47 //
       
    48 CThumbnailManagerImpl::~CThumbnailManagerImpl()
       
    49     {
       
    50     delete iRequestQueue;   
       
    51     iSession.Close();
       
    52     iFs.Close();
       
    53 
       
    54     // Check if we need to disconnect Fbs
       
    55     TInt sessionCount = (TInt)Dll::Tls(); 
       
    56     if ( sessionCount > 0)
       
    57         { 
       
    58         if( --sessionCount == 0 )
       
    59             {
       
    60 		    TN_DEBUG1( "CThumbnailManagerImpl::~CThumbnailManagerImpl() - Disconnect FBS" );
       
    61             iFbsSession.Disconnect();
       
    62             }
       
    63 	    TN_DEBUG2( "CThumbnailManagerImpl::~CThumbnailManagerImpl() - update sessionCount == %d to TLS", sessionCount );
       
    64         Dll::SetTls( (TAny*)sessionCount );
       
    65         }
       
    66 
       
    67     delete iMimeTypeList;
       
    68     }
       
    69 
       
    70 
       
    71 // ---------------------------------------------------------------------------
       
    72 // CThumbnailManagerImpl::NewLC()
       
    73 // Two-phased constructor.
       
    74 // ---------------------------------------------------------------------------
       
    75 //
       
    76 CThumbnailManagerImpl* CThumbnailManagerImpl::NewLC( MThumbnailManagerObserver&
       
    77     aObserver )
       
    78     {
       
    79     CThumbnailManagerImpl* self = new( ELeave )CThumbnailManagerImpl( aObserver );
       
    80     CleanupStack::PushL( self );
       
    81     self->ConstructL();
       
    82     return self;
       
    83     }
       
    84 
       
    85 
       
    86 // ---------------------------------------------------------------------------
       
    87 // CThumbnailManagerImpl::CThumbnailManagerImpl()
       
    88 // C++ default constructor can NOT contain any code, that might leave.
       
    89 // ---------------------------------------------------------------------------
       
    90 //
       
    91 CThumbnailManagerImpl::CThumbnailManagerImpl( MThumbnailManagerObserver&
       
    92     aObserver ): iObserver( aObserver ), iDisplayMode(
       
    93     KThumbnailDefaultDisplayMode ), iFlags( EDefaultFlags ), iQualityPreference
       
    94     ( EOptimizeForQuality ), iRequestId( 0 )
       
    95     {
       
    96     // No implementation required
       
    97     }
       
    98 
       
    99 
       
   100 // ---------------------------------------------------------------------------
       
   101 // CThumbnailManagerImpl::ConstructL()
       
   102 // Symbian 2nd phase constructor can leave.
       
   103 // ---------------------------------------------------------------------------
       
   104 //
       
   105 void CThumbnailManagerImpl::ConstructL()
       
   106     {
       
   107     User::LeaveIfError( iSession.Connect());
       
   108     User::LeaveIfError( iFs.Connect());
       
   109     User::LeaveIfError( iFs.ShareProtected());
       
   110 
       
   111     if ( !RFbsSession::GetSession() )
       
   112             {
       
   113             // We need to connect to Fbs (first user in this thread)
       
   114             // Maintain a reference count in TLS
       
   115             User::LeaveIfError( iFbsSession.Connect()); 
       
   116             Dll::SetTls( (TAny*)1 ); 
       
   117 		    TN_DEBUG2( "CThumbnailManagerImpl::ConstructL() - update sessionCount == %d to TLS", 1 );
       
   118             }
       
   119         else
       
   120             {
       
   121             TInt sessionCount = (TInt)Dll::Tls(); 
       
   122             if( sessionCount++ > 0 )
       
   123                 {
       
   124                 // Increase the reference count in TLS
       
   125                 Dll::SetTls( (TAny*)sessionCount );
       
   126 			    TN_DEBUG2( "CThumbnailManagerImpl::ConstructL() - update sessionCount == %d to TLS", sessionCount );
       
   127                 } 
       
   128             else
       
   129                 {
       
   130                 // Fbs connection was available in the beginning, no need to
       
   131                 // increase the reference count
       
   132                 }
       
   133             }
       
   134     
       
   135     // request processor
       
   136     iRequestQueue = CThumbnailRequestQueue::NewL();
       
   137     }
       
   138 
       
   139 
       
   140 // ---------------------------------------------------------------------------
       
   141 // CThumbnailManagerImpl::GetThumbnailL
       
   142 // Get a thumbnail for an object file.
       
   143 // ---------------------------------------------------------------------------
       
   144 //
       
   145 TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL(
       
   146     CThumbnailObjectSource& aObjectSource, TAny* aClientData /*= NULL*/, const
       
   147     TInt aPriority, TBool aGeneratePersistentSizesOnly)
       
   148     {
       
   149     iRequestId++;
       
   150     TN_DEBUG4( "CThumbnailManagerImpl::GetThumbnailL() URI==%S, iThumbnailSize==%d %d", &aObjectSource.Uri(), iThumbnailSize, iRequestId );
       
   151     
       
   152     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   153 
       
   154     CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   155         ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   156     CleanupStack::PushL( getThumbnailActive );
       
   157     
       
   158     if(aObjectSource.Id() > 0)
       
   159         {
       
   160         getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
       
   161             iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
       
   162             KNullDesC, iThumbnailSize);
       
   163         }
       
   164     else if ( aObjectSource.Uri().Length())
       
   165         {
       
   166         getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
       
   167             iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
       
   168             KNullDesC, iThumbnailSize );
       
   169         }
       
   170     else
       
   171         {
       
   172         getThumbnailActive->GetThumbnailL( aObjectSource.FileHandle(), aObjectSource.Id(), iFlags,
       
   173             iQualityPreference, iSize, iDisplayMode, aPriority, aClientData, aGeneratePersistentSizesOnly,
       
   174             KNullDesC, iThumbnailSize );
       
   175         }
       
   176     
       
   177     iRequestQueue->AddRequestL( getThumbnailActive );
       
   178     CleanupStack::Pop( getThumbnailActive );
       
   179     
       
   180     iRequestQueue->Process();
       
   181     
       
   182     TN_DEBUG2( "CThumbnailManagerImpl::GetThumbnailL() - request ID: %d", iRequestId );
       
   183     
       
   184     return iRequestId;
       
   185     }
       
   186     
       
   187 // ---------------------------------------------------------------------------
       
   188 // CThumbnailManagerImpl::GetThumbnailL
       
   189 // Get a thumbnail for an object file.
       
   190 // ---------------------------------------------------------------------------
       
   191 //
       
   192 TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL(
       
   193     CThumbnailObjectSource& aObjectSource, TAny* aClientData /*= NULL*/, const
       
   194     TInt aPriority )
       
   195     {
       
   196     return GetThumbnailL( aObjectSource, aClientData, aPriority, EFalse );
       
   197     }    
       
   198 
       
   199 
       
   200 // ---------------------------------------------------------------------------
       
   201 // CThumbnailManagerImpl::GetThumbnailL
       
   202 // Get a thumbnail for an object file.
       
   203 // ---------------------------------------------------------------------------
       
   204 //
       
   205 TThumbnailRequestId CThumbnailManagerImpl::GetThumbnailL( const TThumbnailId
       
   206     aThumbnailId, TAny* aClientData /*= NULL*/, TInt aPriority)
       
   207     {
       
   208     iRequestId++;
       
   209     TN_DEBUG5( "CThumbnailManagerImpl::GetThumbnailL() reqid==%d, aThumbnailId==%d, iThumbnailSize==%d %d", iRequestId, aThumbnailId, iThumbnailSize, iRequestId );
       
   210 
       
   211     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   212 
       
   213     CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   214         ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   215     CleanupStack::PushL( getThumbnailActive );
       
   216     
       
   217     getThumbnailActive->GetThumbnailL( KNullDesC, aThumbnailId, iFlags,
       
   218                        iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
       
   219                        EFalse, KNullDesC, iThumbnailSize );
       
   220     
       
   221     iRequestQueue->AddRequestL( getThumbnailActive );
       
   222     CleanupStack::Pop( getThumbnailActive );
       
   223     
       
   224     iRequestQueue->Process();
       
   225     
       
   226     TN_DEBUG2( "CThumbnailManagerImpl::GetThumbnailL() - request ID: %d", iRequestId );
       
   227     
       
   228     return iRequestId;
       
   229     }
       
   230 
       
   231 
       
   232 // ---------------------------------------------------------------------------
       
   233 // CThumbnailManagerImpl::ImportThumbnailL
       
   234 // Import an image to be used as thumbnail for an object.
       
   235 // ---------------------------------------------------------------------------
       
   236 //
       
   237 TThumbnailRequestId CThumbnailManagerImpl::ImportThumbnailL(
       
   238     CThumbnailObjectSource& aObjectSource, const TDesC& aTargetUri,
       
   239     TAny* aClientData /*= NULL*/, const TInt aPriority)
       
   240     {
       
   241     iRequestId++;
       
   242 
       
   243     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   244 
       
   245     CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   246         ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   247     CleanupStack::PushL( getThumbnailActive );
       
   248 
       
   249     if ( aObjectSource.Uri().Length())
       
   250         {
       
   251         getThumbnailActive->GetThumbnailL( aObjectSource.Uri(), aObjectSource.Id(), iFlags,
       
   252             iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
       
   253             EFalse, aTargetUri, iThumbnailSize );
       
   254         }
       
   255     else
       
   256         {
       
   257         getThumbnailActive->GetThumbnailL( aObjectSource.FileHandle(), aObjectSource.Id(), 
       
   258             iFlags, iQualityPreference, iSize, iDisplayMode, aPriority, aClientData,
       
   259             EFalse, aTargetUri, iThumbnailSize );
       
   260         }
       
   261     
       
   262     iRequestQueue->AddRequestL( getThumbnailActive );
       
   263     CleanupStack::Pop( getThumbnailActive );
       
   264     
       
   265     iRequestQueue->Process();
       
   266     
       
   267     TN_DEBUG2( "CThumbnailManagerImpl::ImportThumbnailL() - request ID: %d", iRequestId );
       
   268     
       
   269     return iRequestId;
       
   270     }
       
   271 
       
   272 // ---------------------------------------------------------------------------
       
   273 // CThumbnailManagerImpl::SetThumbnailL
       
   274 // Import an image to be used as thumbnail for an object.
       
   275 // ---------------------------------------------------------------------------
       
   276 //
       
   277 TThumbnailRequestId CThumbnailManagerImpl::SetThumbnailL( CThumbnailObjectSource& aObjectSource,
       
   278     TAny* aClientData, TInt aPriority )
       
   279     {
       
   280     iRequestId++;
       
   281 
       
   282     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   283 
       
   284     CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   285         ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   286     CleanupStack::PushL( getThumbnailActive );
       
   287     
       
   288     if ( aObjectSource.Uri().Length() &&
       
   289          aObjectSource.Buffer() != NULL &&
       
   290          aObjectSource.MimeType() != KNullDesC8)
       
   291         {
       
   292         getThumbnailActive->SetThumbnailL( aObjectSource.GetBufferOwnership(), aObjectSource.Id(),
       
   293             aObjectSource.MimeType(), iFlags, iQualityPreference, iSize, iDisplayMode,
       
   294             aPriority, aClientData, EFalse, aObjectSource.Uri(), iThumbnailSize);
       
   295         }
       
   296     
       
   297     iRequestQueue->AddRequestL( getThumbnailActive );
       
   298     CleanupStack::Pop( getThumbnailActive );
       
   299 
       
   300     iRequestQueue->Process();
       
   301     
       
   302     TN_DEBUG2( "CThumbnailManagerImpl::SetThumbnailL() - request ID: %d", iRequestId );
       
   303     
       
   304     return iRequestId;
       
   305     }
       
   306 
       
   307 // ---------------------------------------------------------------------------
       
   308 // CThumbnailManagerImpl::CreateThumbnails
       
   309 // Create persistent size thumbnails for an object.
       
   310 // ---------------------------------------------------------------------------
       
   311 //
       
   312 TThumbnailRequestId CThumbnailManagerImpl::CreateThumbnails(
       
   313 	CThumbnailObjectSource& aObjectSource, TInt aPriority )
       
   314 	{
       
   315 	TRAPD(err,
       
   316 		TN_DEBUG2( "CThumbnailManagerImpl::CreateThumbnails() aObjectSource==%S ", &aObjectSource.Uri() );
       
   317 		iRequestId++;
       
   318 
       
   319 		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   320 
       
   321 		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   322 			( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   323 		
       
   324 		CleanupStack::PushL( getThumbnailActive );
       
   325 		
       
   326 		if (aObjectSource.Bitmap())
       
   327 			{
       
   328 			// from bitmap
       
   329 			getThumbnailActive->SetThumbnailL( aObjectSource.GetBitmapOwnership(),
       
   330 						 aObjectSource.Id(), KBmpMime, iFlags, iQualityPreference,
       
   331 						 iSize, iDisplayMode, aPriority, NULL, ETrue,
       
   332 						 aObjectSource.Uri(), EUnknownThumbnailSize);
       
   333 			}
       
   334 		else if( !aObjectSource.Buffer() )
       
   335 			{        
       
   336 			getThumbnailActive->GetThumbnailL( aObjectSource.Id(), 
       
   337 						 aObjectSource.Uri(), iFlags, iQualityPreference, iSize,
       
   338 						 iDisplayMode, aPriority, NULL, ETrue, aObjectSource.Uri(), 
       
   339 						 EUnknownThumbnailSize);      
       
   340 			}
       
   341 		else
       
   342 			{
       
   343 			// from buffer
       
   344 			getThumbnailActive->SetThumbnailL( aObjectSource.GetBufferOwnership(),
       
   345 						 aObjectSource.Id(), aObjectSource.MimeType(), iFlags,
       
   346 						 iQualityPreference, iSize, iDisplayMode, aPriority, NULL,
       
   347 						 ETrue, aObjectSource.Uri(), EUnknownThumbnailSize);
       
   348 			}
       
   349 		
       
   350 		iRequestQueue->AddRequestL( getThumbnailActive );
       
   351 		
       
   352 		CleanupStack::Pop( getThumbnailActive );
       
   353 		
       
   354 		iRequestQueue->Process();
       
   355 		
       
   356 		TN_DEBUG2( "CThumbnailManagerImpl::CreateThumbnails() - request ID: %d", iRequestId );
       
   357 	);
       
   358 	
       
   359 	if( err != KErrNone)
       
   360 	    {
       
   361 	    return err;
       
   362 	    }
       
   363     
       
   364     return iRequestId;		
       
   365 	}
       
   366 
       
   367 
       
   368 // ---------------------------------------------------------------------------
       
   369 // CThumbnailManagerImpl::DisplayMode()
       
   370 // Get the current display mode for thumbnail bitmaps.
       
   371 // ---------------------------------------------------------------------------
       
   372 //
       
   373 TDisplayMode CThumbnailManagerImpl::DisplayMode()const
       
   374     {
       
   375     return iDisplayMode;
       
   376     }
       
   377 
       
   378 
       
   379 // ---------------------------------------------------------------------------
       
   380 // CThumbnailManagerImpl::SetDisplayModeL()
       
   381 // Set the current display mode for thumbnail bitmaps.
       
   382 // ---------------------------------------------------------------------------
       
   383 //
       
   384 void CThumbnailManagerImpl::SetDisplayModeL( const TDisplayMode aDisplayMode )
       
   385     {
       
   386     iDisplayMode = aDisplayMode;
       
   387     }
       
   388 
       
   389 
       
   390 // ---------------------------------------------------------------------------
       
   391 // CThumbnailManagerImpl::QualityPreference()
       
   392 // Get the current quality versus performance preference.
       
   393 // ---------------------------------------------------------------------------
       
   394 //
       
   395 CThumbnailManager::TThumbnailQualityPreference CThumbnailManagerImpl
       
   396     ::QualityPreference()const
       
   397     {
       
   398     return iQualityPreference;
       
   399     }
       
   400 
       
   401 
       
   402 // ---------------------------------------------------------------------------
       
   403 // CThumbnailManagerImpl::SetQualityPreferenceL()
       
   404 // Set quality versus performance preference.
       
   405 // ---------------------------------------------------------------------------
       
   406 //
       
   407 void CThumbnailManagerImpl::SetQualityPreferenceL( const
       
   408     TThumbnailQualityPreference aQualityPreference )
       
   409     {
       
   410     iQualityPreference = aQualityPreference;
       
   411     }
       
   412 
       
   413 
       
   414 // ---------------------------------------------------------------------------
       
   415 // CThumbnailManagerImpl::ThumbnailSize()
       
   416 // Get the current desired size for thumbnail bitmaps.
       
   417 // ---------------------------------------------------------------------------
       
   418 //
       
   419 const TSize& CThumbnailManagerImpl::ThumbnailSize()const
       
   420     {
       
   421     return iSize;
       
   422     }
       
   423 
       
   424 
       
   425 // ---------------------------------------------------------------------------
       
   426 // CThumbnailManagerImpl::SetThumbnailSizeL()
       
   427 // Set desired size for thumbnail bitmaps.
       
   428 // ---------------------------------------------------------------------------
       
   429 //
       
   430 void CThumbnailManagerImpl::SetThumbnailSizeL( const TSize& aThumbnailSize )
       
   431     {
       
   432     iSize = aThumbnailSize;
       
   433     iThumbnailSize = ECustomThumbnailSize;
       
   434     }
       
   435 
       
   436 // ---------------------------------------------------------------------------
       
   437 // CThumbnailManagerImpl::SetThumbnailSizeL()
       
   438 // Set desired size for thumbnail bitmaps.
       
   439 // ---------------------------------------------------------------------------
       
   440 //
       
   441 void CThumbnailManagerImpl::SetThumbnailSizeL( const TThumbnailSize aThumbnailSize )
       
   442     {
       
   443     iThumbnailSize = aThumbnailSize;
       
   444     }
       
   445 
       
   446 // ---------------------------------------------------------------------------
       
   447 // CThumbnailManagerImpl::Flags()
       
   448 // Get current flags for thumbnail generation.
       
   449 // ---------------------------------------------------------------------------
       
   450 //
       
   451 CThumbnailManager::TThumbnailFlags CThumbnailManagerImpl::Flags()const
       
   452     {
       
   453     return iFlags;
       
   454     }
       
   455 
       
   456 
       
   457 // ---------------------------------------------------------------------------
       
   458 // CThumbnailManagerImpl::SetFlagsL()
       
   459 // Set flags for thumbnail generation. Several flags may be enabled
       
   460 // by combining the values using bitwise or.
       
   461 // ---------------------------------------------------------------------------
       
   462 //
       
   463 void CThumbnailManagerImpl::SetFlagsL( const TThumbnailFlags aFlags )
       
   464     {
       
   465     iFlags = aFlags;
       
   466     }
       
   467 
       
   468 
       
   469 // ---------------------------------------------------------------------------
       
   470 // CThumbnailManagerImpl::DeleteThumbnails()
       
   471 // Delete all thumbnails for a given object.
       
   472 // ---------------------------------------------------------------------------
       
   473 //
       
   474 void CThumbnailManagerImpl::DeleteThumbnails( CThumbnailObjectSource&
       
   475     aObjectSource )
       
   476     {
       
   477 	TRAP_IGNORE(
       
   478 		iRequestId++;
       
   479 		TN_DEBUG2( "CThumbnailManagerImpl::DeleteThumbnails() URI==%S ", &aObjectSource.Uri() );
       
   480 
       
   481 		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   482 		
       
   483 		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   484 			( iFs, iSession, iObserver, iRequestId, CActive::EPriorityIdle, iRequestQueue );
       
   485 
       
   486 		CleanupStack::PushL( getThumbnailActive );
       
   487 		
       
   488 		const TDesC& uri = aObjectSource.Uri();
       
   489 		
       
   490 		if ( uri.Length())
       
   491 			{
       
   492 			getThumbnailActive->DeleteThumbnails( uri, 0, CActive::EPriorityIdle );
       
   493 			}
       
   494 		else
       
   495 			{
       
   496 			TInt err = aObjectSource.FileHandle().FullName( iFileNameBuf );
       
   497 			if ( !err )
       
   498 				{
       
   499 				getThumbnailActive->DeleteThumbnails( iFileNameBuf, 0, CActive::EPriorityIdle );
       
   500 				}
       
   501 			}
       
   502 		
       
   503 		iRequestQueue->AddRequestL( getThumbnailActive );
       
   504 		
       
   505 		CleanupStack::Pop( getThumbnailActive );
       
   506 		 
       
   507 		iRequestQueue->Process();   
       
   508 	);
       
   509     }
       
   510     
       
   511 
       
   512 // ---------------------------------------------------------------------------
       
   513 // CThumbnailManagerImpl::DeleteThumbnailsL()
       
   514 // Delete thumbnails by TThumbnailId.
       
   515 // ---------------------------------------------------------------------------
       
   516 //
       
   517 void CThumbnailManagerImpl::DeleteThumbnails( const TThumbnailId aItemId )
       
   518     {
       
   519 	TRAP_IGNORE(
       
   520 		iRequestId++;
       
   521 		TN_DEBUG2( "CThumbnailManagerImpl::DeleteThumbnails() aItemId==%d ", aItemId );
       
   522 		
       
   523 		__ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   524 		
       
   525 		CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   526 			( iFs, iSession, iObserver, iRequestId, CActive::EPriorityIdle, iRequestQueue );
       
   527 		
       
   528 		CleanupStack::PushL( getThumbnailActive );
       
   529 		
       
   530 		getThumbnailActive->DeleteThumbnails( KNullDesC, aItemId, CActive::EPriorityIdle );
       
   531 		
       
   532 		iRequestQueue->AddRequestL( getThumbnailActive );
       
   533 		
       
   534 		CleanupStack::Pop( getThumbnailActive );
       
   535 		
       
   536 		iRequestQueue->Process();
       
   537 	);
       
   538     }
       
   539 
       
   540 
       
   541 // ---------------------------------------------------------------------------
       
   542 // CThumbnailManagerImpl::CancelRequest()
       
   543 // Cancel a thumbnail operation.
       
   544 // ---------------------------------------------------------------------------
       
   545 //
       
   546 TInt CThumbnailManagerImpl::CancelRequest( const TThumbnailRequestId aId )
       
   547     {
       
   548     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   549     
       
   550     TN_DEBUG2( "CThumbnailManagerImpl::CancelRequest() - request ID: %d", aId );
       
   551     
       
   552     return iRequestQueue->CancelRequest(aId);
       
   553     }
       
   554 
       
   555 
       
   556 // ---------------------------------------------------------------------------
       
   557 // CThumbnailManagerImpl::ChangePriority()
       
   558 // Change the priority of a queued thumbnail operation.
       
   559 // ---------------------------------------------------------------------------
       
   560 //
       
   561 TInt CThumbnailManagerImpl::ChangePriority( const TThumbnailRequestId aId,
       
   562     const TInt aNewPriority )
       
   563     {
       
   564     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   565     
       
   566     TN_DEBUG2( "CThumbnailManagerImpl::ChangePriority() - request ID: %d", aId );
       
   567     
       
   568     return iRequestQueue->ChangePriority(aId, aNewPriority);
       
   569     }
       
   570 
       
   571 // ---------------------------------------------------------------------------
       
   572 // Get the list of supported file systems from server
       
   573 // ---------------------------------------------------------------------------
       
   574 //
       
   575 const CDesCArray& CThumbnailManagerImpl::GetSupportedMimeTypesL()
       
   576     {
       
   577     if ( !iMimeTypeList )
       
   578         {
       
   579         iMimeTypeList = new( ELeave )CDesCArraySeg(
       
   580             KThumbnailMimeTypeListGranularity );
       
   581         HBufC* buf = iSession.GetMimeTypeListL();
       
   582         CleanupStack::PushL( buf );
       
   583         TLex lex( *buf );
       
   584         while ( !lex.Eos())
       
   585             {
       
   586             iMimeTypeList->AppendL( lex.NextToken());
       
   587             }
       
   588         CleanupStack::PopAndDestroy( buf );
       
   589         }
       
   590     return * iMimeTypeList;
       
   591     }
       
   592 
       
   593 
       
   594 // ---------------------------------------------------------------------------
       
   595 // CThumbnailManagerImpl::UpdateThumbnails()
       
   596 // Update thumbnails by given ID
       
   597 // ---------------------------------------------------------------------------
       
   598 //
       
   599 void CThumbnailManagerImpl::UpdateThumbnailsL( const TThumbnailId aItemId, const TDesC& aPath,
       
   600                                                const TInt aOrientation, const TInt64 aModified, 
       
   601                                                TInt aPriority )
       
   602     {
       
   603     iRequestId++;
       
   604     TN_DEBUG4( "CThumbnailManagerImpl::UpdateThumbnailsL() URI==%S, aItemId==%d %d", &aPath, aItemId, iRequestId); 
       
   605     
       
   606     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
       
   607     
       
   608     CThumbnailRequestActive* getThumbnailActive = CThumbnailRequestActive::NewL
       
   609         ( iFs, iSession, iObserver, iRequestId, aPriority, iRequestQueue );
       
   610     CleanupStack::PushL( getThumbnailActive );
       
   611     
       
   612     getThumbnailActive->UpdateThumbnailsL( aPath, aItemId, iFlags, iQualityPreference,
       
   613             iDisplayMode, aPriority, aOrientation, aModified );
       
   614     
       
   615     iRequestQueue->AddRequestL( getThumbnailActive );
       
   616     CleanupStack::Pop( getThumbnailActive );
       
   617     
       
   618     iRequestQueue->Process();
       
   619     }
       
   620 
       
   621 // End of file