imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h
changeset 54 48dd0f169f0d
parent 42 2e2a89493e2b
equal deleted inserted replaced
42:2e2a89493e2b 54:48dd0f169f0d
     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:  Thumbnail server
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef THUMBNAILSERVER_H
       
    20 #define THUMBNAILSERVER_H
       
    21 
       
    22 #include <e32base.h>
       
    23 #include <fbs.h>
       
    24 #include <w32std.h>
       
    25 #include <apmrec.h>
       
    26 #include <apgcli.h>
       
    27 #include <e32hashtab.h>
       
    28 
       
    29 #include <mdesession.h>
       
    30 
       
    31 #include "thumbnailmanager.h"
       
    32 #include "thumbnailmanagerconstants.h" // TThumbnailServerRequestId
       
    33 #include "thumbnailstore.h"     // TThumbnailPersistentSize
       
    34 #include "tmshutdownobserver.h"
       
    35 #include "tmformatobserver.h"
       
    36 
       
    37 // Needed for creating server thread.
       
    38 const TUint KDefaultHeapSize = 160 * 1024;
       
    39 
       
    40 class CThumbnailTaskProcessor;
       
    41 class CThumbnailProvider;
       
    42 class CThumbnailTask;
       
    43 class CThumbnailStore;
       
    44 class MIHLScaler;
       
    45 class CThumbnailServerSession;
       
    46 class CThumbnailDiskUnmountObserver;
       
    47 class CThumbnailMemoryCardObserver;
       
    48 class CThumbnailFetchedChecker;
       
    49 
       
    50 /**
       
    51  * Helper function to destroy all objects which are referred to
       
    52  * by pointers in a hash table.
       
    53  * @since S60 v5.0
       
    54  * @param aHashMap Reference to hash map
       
    55  */
       
    56 template <class K, class V> void ResetAndDestroyHashMap( RHashMap<K, V* > &
       
    57     aHashMap )
       
    58     {
       
    59     THashMapIter<K, V* > iter( aHashMap );
       
    60 
       
    61     // const pointer to a non-const object
       
    62     V* const * item = iter.NextValue();
       
    63 
       
    64     while ( item )
       
    65         {
       
    66         delete *item;
       
    67         item = iter.NextValue();
       
    68         }
       
    69     aHashMap.Close();
       
    70     }
       
    71 
       
    72 /**
       
    73  *  Thumbnail server.
       
    74  *
       
    75  *  @since S60 v5.0
       
    76  */
       
    77 NONSHARABLE_CLASS( CThumbnailServer ): public CPolicyServer,
       
    78                                        public MMdESessionObserver,
       
    79                                        public MTMShutdownObserver,
       
    80                                        public MTMFormatObserver
       
    81     {
       
    82 public:
       
    83 
       
    84     /**
       
    85      * Two-phased constructor
       
    86      *
       
    87      * @since S60 v5.0
       
    88      * @return New CThumbnailServer server.
       
    89      */
       
    90     static CThumbnailServer* NewL();
       
    91 
       
    92     /**
       
    93      * Destructor
       
    94      *
       
    95      * @since S60 v5.0
       
    96      */
       
    97     virtual ~CThumbnailServer();
       
    98 
       
    99 public:
       
   100 
       
   101     /**
       
   102      * Creates new server session.
       
   103      *
       
   104      * @since S60 v5.0
       
   105      * @param aVersion Version info.
       
   106      * @param aMessage Message to be passed.
       
   107      * @return New session.
       
   108      */
       
   109     CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage
       
   110         )const;
       
   111 
       
   112     /**
       
   113      * ThreadFunctionL
       
   114      *
       
   115      * @since S60 v5.0
       
   116      */
       
   117     static void ThreadFunctionL();
       
   118 
       
   119     /**
       
   120      * AddSession
       
   121      *
       
   122      * @since S60 v5.0
       
   123      */
       
   124     void AddSession();
       
   125 
       
   126     /**
       
   127      * DropSession
       
   128      *
       
   129      * @since S60 v5.0
       
   130      */
       
   131     void DropSession(CThumbnailServerSession* aSession);
       
   132     
       
   133     // from MMdESessionObserver
       
   134     void HandleSessionOpened( CMdESession& aSession, TInt aError );
       
   135     void HandleSessionError( CMdESession& aSession, TInt aError );    
       
   136     
       
   137     // from MTMShutdownObserver
       
   138     void ShutdownNotification();
       
   139 
       
   140     //From MTMFormatObserver
       
   141     void FormatNotification(TBool aFormat);    
       
   142     
       
   143     /**
       
   144      * Adds bitmap to bitmap pool. Server assumes ownership of the bitmap and
       
   145      * implements reference counting to know when it is safe to delete
       
   146      * the object. Reference count is increased if the bitmap already
       
   147      * exists in the pool.
       
   148      *
       
   149      * @since S60 v5.0
       
   150      * @param aSession Server side session which owns the bitmap.
       
   151      * @param aBitmap Bitmap to be added to pool.
       
   152      * @param aRequestId Session specific thumbnail request ID.
       
   153      */
       
   154     void AddBitmapToPoolL( CThumbnailServerSession* aSession, CFbsBitmap*
       
   155         aBitmap, TThumbnailServerRequestId aRequestId );
       
   156 
       
   157     /**
       
   158      * Store thumbnail.
       
   159      *
       
   160      * @since S60 v5.0
       
   161      * @param aPath Image path.
       
   162      * @param aBitmap Thumbnail image.
       
   163      * @param aOriginalSize Original size of image.
       
   164      * @param aCropped Enabled if the thumbnail was cropped.
       
   165      * @param aThumbnailSize Prededined size of requested thumbnail.
       
   166      * @param aThumbFromPath Thumbnail created from associated path.
       
   167      * @param aThumbFromPath Check first if source uri exists.
       
   168      */
       
   169     void StoreThumbnailL( const TDesC& aPath, CFbsBitmap* aBitmap, const TSize&
       
   170         aOriginalSize, const TBool aCropped, const TThumbnailSize aThumbnailSize,
       
   171         const TInt64 aModified, const TBool aThumbFromPath,
       
   172         const TBool aCheckExist);
       
   173 
       
   174     /**
       
   175      * Fetch thumbnail image.
       
   176      *
       
   177      * @since S60 v5.0
       
   178      * @param aPath Path of the media object whose thumbnail is to be
       
   179      *              retrieved.
       
   180      * @param aThumbnail Pointer to get the fetched thumbnail bitmap.
       
   181      *                   Caller assumes ownership.
       
   182      * @param aMinimumSize Minimum size of the thumbnail.
       
   183      * @param aOriginalSize Original size of the object file in pixels
       
   184      * @param aCropped If true, match cropped images only.
       
   185      * @param aAllowUpscaling If enabled, allow fetching thumbnails that
       
   186      *                        are smaller than requested.
       
   187      * @param aThumbnailSize Prededined size of requested thumbnail.
       
   188      */
       
   189     void FetchThumbnailL( const TDesC& aPath, CFbsBitmap* & aThumbnail, 
       
   190              TDesC8* & aData, const TThumbnailSize aThumbnailSize, TSize &aOriginalSize );
       
   191     
       
   192     /**
       
   193      * Delete thumbnails.
       
   194      *
       
   195      * @since S60 v5.0
       
   196      * @param aPath           Path of the media object whose thumbnail is
       
   197      *                        to be deleted.
       
   198      */
       
   199     void DeleteThumbnailsL( const TDesC& aPath );
       
   200 
       
   201     /**
       
   202      * Delete thumbnails by Id.
       
   203      *
       
   204      * @since S60 v5.0
       
   205      * @param aItemId         Id of item whose thumbnails are to be deleted.
       
   206      */
       
   207     void DeleteThumbnailsByIdL( TThumbnailId aItemId );    
       
   208     
       
   209     /**
       
   210      * Resolve the MIME-type of given file using recognizer framework.
       
   211      *
       
   212      * @since S60 v5.0
       
   213      * @param aFile File to be recognized.
       
   214      * @return MIME-type
       
   215      */
       
   216     TDataType ResolveMimeTypeL( RFile64& aFile );
       
   217 
       
   218     /**
       
   219      * Removes bitmap from bitmap pool. Reference count is decremented
       
   220      * and if it reaches zero, the bitmap object is deleted.
       
   221      *
       
   222      * @since S60 v5.0
       
   223      * @param aHandle Bitmap handle.
       
   224      */
       
   225     void DeleteBitmapFromPool( TInt aHandle );
       
   226 
       
   227     /**
       
   228      * Resolve plugin to be used in thumbnail creation by mime type.
       
   229      *
       
   230      * @since S60 v5.0
       
   231      * @param aMimeType Mime type of the file from which a thumbnail is to be
       
   232      *                  created.
       
   233      * @return Thumbnail provider.
       
   234      */
       
   235     CThumbnailProvider* ResolveProviderL( const TDesC8& aMimeType );
       
   236     
       
   237     /**
       
   238      * Preload provider plugins
       
   239      *
       
   240      * @since S^3
       
   241      */
       
   242     void PreLoadProviders();
       
   243     
       
   244 
       
   245     /**
       
   246      * Add thumbnailtask to processor queue.
       
   247      *
       
   248      * @since S60 v5.0
       
   249      * @param aTask Task to be added to queue.
       
   250      */
       
   251     void QueueTaskL( CThumbnailTask* aTask );
       
   252 
       
   253     /**
       
   254      * Remove thumbnailtask from processor queue.
       
   255      *
       
   256      * @since S60 v5.0
       
   257      * @param aRequestId ID of the task to be removed from queue.
       
   258      * @return Error code.
       
   259      */
       
   260     TInt DequeTask( const TThumbnailServerRequestId& aRequestId );
       
   261 
       
   262     /**
       
   263      * Change priority of specific task.
       
   264      *
       
   265      * @since S60 v5.0
       
   266      * @param aRequestId ID of the task to be assigned new priority.
       
   267      * @param aNewPriority New priority for the task.
       
   268      * @return Error code.
       
   269      */
       
   270     TInt ChangeTaskPriority( const TThumbnailServerRequestId& aRequestId, TInt
       
   271         aNewPriority );
       
   272 
       
   273     /**
       
   274      * Scale bitmap
       
   275      *
       
   276      * @since S60 v5.0
       
   277      * @param aStatus      Request status.
       
   278      * @param aSource      Source bitmap.
       
   279      * @param aDest        Destination bitmap.
       
   280      * @param aSourceRect  Source rectangle for cropping.
       
   281      */
       
   282     void ScaleBitmapL( TRequestStatus& aStatus, const CFbsBitmap& aSource,
       
   283         CFbsBitmap& aDest, const TRect& aSourceRect );
       
   284 
       
   285     /**
       
   286      * Cancel scaling operation
       
   287      *
       
   288      * @since S60 v5.0
       
   289      */
       
   290     void CancelScale();
       
   291 
       
   292     /**
       
   293      * Returns processor.
       
   294      *
       
   295      * @since S60 v5.0
       
   296      * @return Reference to processor instance.
       
   297      */
       
   298     CThumbnailTaskProcessor& Processor();
       
   299 
       
   300     /**
       
   301      * Get persistent size.
       
   302      *
       
   303      * @since S60 v5.0
       
   304      * @param aThumbnailSize Relative thumbnail size 
       
   305      * @return Persistent size object
       
   306      */    
       
   307     TThumbnailPersistentSize & PersistentSizeL( TThumbnailSize
       
   308             aThumbnailSize ); 
       
   309     
       
   310     /**
       
   311      * Persistent sizes.
       
   312      *
       
   313      * @since S60 v5.0
       
   314      * @return List of thumbnail sizes (including othe parameters) which
       
   315      *         are stored for later access.
       
   316      */
       
   317     RArray < TThumbnailPersistentSize > PersistentSizesL();
       
   318 
       
   319     /**
       
   320      * Get missing thumbnail sizes.
       
   321      *
       
   322      * @since S60 v5.0
       
   323      * @param aPath Path associated to missing thumbnails
       
   324      * @param aMissingSizes Returns a list of thumbnail sizes not yet create related to the path
       
   325 	 * @param aCheckGridSizeOnly check only is Grid size missing
       
   326      */
       
   327     void GetMissingSizesL( const TDesC& aPath, TInt aSourceType, RArray <
       
   328         TThumbnailPersistentSize > & aMissingSizes, TBool aCheckGridSizeOnly);
       
   329 
       
   330     /**
       
   331      * Fileserver
       
   332      *
       
   333      * @since S60 v5.0
       
   334      * @return File server
       
   335      */
       
   336     RFs& Fs();
       
   337 
       
   338     /**
       
   339      * Get the required size (in characters) for a buffer that contains the
       
   340      * list of supported MIME types
       
   341      * 
       
   342      * @since S60 v5.0
       
   343      */
       
   344     TInt GetMimeTypeBufferSize()const;
       
   345 
       
   346     /**
       
   347      * Get the list of supported MIME types and store them in the buffer.
       
   348      *
       
   349      * @since S60 v5.0
       
   350      * @param aBuffer A buffer to receive the space delimited list of MIME
       
   351      *                types. Must be as least as large as the size returned
       
   352      *                by GetMimeTypeBufferSizeL()
       
   353      */
       
   354     void GetMimeTypeList( TDes& aBuffer )const;
       
   355     
       
   356     /**
       
   357      * Close store instance for given drive.
       
   358      *
       
   359      * @since S60 v5.0
       
   360      * @param aDrive Drive for which the store is used, such as EDriveC,
       
   361      *               EDriveE, etc.
       
   362      */
       
   363     void CloseStoreForDriveL( const TInt aDrive );     
       
   364     
       
   365     /**
       
   366      * React to change in memory card status.
       
   367      *
       
   368      * @since S60 v5.0     
       
   369      */
       
   370     void MemoryCardStatusChangedL();
       
   371 
       
   372     /**
       
   373      * Update thumbnails in database
       
   374      *
       
   375      * @since S60 v5.0
       
   376      * @param aPath         (New) path for the Thumbnail
       
   377      * @param aOrientation  Thumbnail orientation
       
   378      * @param aModified     Last modified
       
   379      * @param TBool         EFalse, if new thumbs need to be created
       
   380      */  
       
   381     TBool UpdateThumbnailsL( const TDesC& aPath,
       
   382                              const TInt aOrientation, const TInt64 aModified );
       
   383     
       
   384     /**
       
   385      * Rename thumbnails.
       
   386      *
       
   387      * @since S60 v5.0
       
   388      * @param aCurrentPath     Current path of the Thumbnail
       
   389      * @param aNewPath         New path for the Thumbnail
       
   390      */
       
   391     void RenameThumbnailsL( const TDesC& aCurrentPath, const TDesC& aNewPath );
       
   392     
       
   393     /** 
       
   394      * Resolve mime type from file extension
       
   395      *
       
   396      * @since S60 v5.0     
       
   397      * @param aFileName Image file
       
   398      * @param aMimeType Mime type
       
   399      * @return TInt KErrNone/KErrNotFound
       
   400      */
       
   401     TInt MimeTypeFromFileExt( const TDesC& aFileName, TDataType& aMimeType );
       
   402     
       
   403     /** 
       
   404      * Resolve source type from mime type
       
   405      *
       
   406      * @since S60 v5.0     
       
   407      * @param aMimeType Mime type
       
   408      * @return TInt TThumbnailPersistentSize enum
       
   409      */
       
   410     TInt SourceTypeFromMimeType( const TDataType& aMimeType );
       
   411     
       
   412     /** 
       
   413      * Resolve source type from size type
       
   414      *
       
   415      * @since S60 v5.0     
       
   416      * @param aSizeType size type enum
       
   417      * @return TInt TThumbnailPersistentSize enum
       
   418      */
       
   419     TInt SourceTypeFromSizeType( const TInt aSizeType );
       
   420     
       
   421     /** 
       
   422      * Is mime type supported
       
   423      *
       
   424      * @since S60 v5.0     
       
   425      * @param aMimeType Mime type
       
   426      * @return TBool supported
       
   427      */
       
   428     TBool SupportedMimeType( const TDataType& aMimeType );    
       
   429     
       
   430     /** 
       
   431      * Get MDS session
       
   432      *
       
   433      * @since S60 v5.0     
       
   434      * @return CMdESession
       
   435      */
       
   436     CMdESession* GetMdESession();
       
   437     
       
   438     /**
       
   439      * Get store instance for given path.
       
   440      *
       
   441      * @since S60 v5.0
       
   442      * @param aPath Path to a file
       
   443      * @return CThumbnailStore object
       
   444      */
       
   445     CThumbnailStore* StoreForPathL( const TDesC& aPath );  
       
   446     
       
   447     /**
       
   448      * Close Removable Stores
       
   449      *
       
   450      * @since S60 v5.0
       
   451      */  
       
   452     
       
   453     void CloseRemovableDrivesL();
       
   454     
       
   455     /**
       
   456      * Open Removable Stores
       
   457      *
       
   458      * @since S60 v5.o
       
   459      */  
       
   460     
       
   461     void OpenRemovableDrivesL();
       
   462     
       
   463     /**
       
   464      * Checks if formatting is ongoing
       
   465      *
       
   466      * @since S60 v5.o
       
   467      */ 
       
   468     
       
   469     TBool IsFormatting();
       
   470   
       
   471     inline CThumbnailFetchedChecker& FetchedChecker() const { return *iFetchedChecker; }
       
   472     
       
   473     /**
       
   474      * Check is path in public folder
       
   475      *
       
   476      * @param aPath
       
   477      * @ret 
       
   478      */
       
   479     TBool IsPublicPath( const TDesC& aPath );
       
   480     
       
   481 protected: // Functions from base classes
       
   482 
       
   483     /**
       
   484     * From CPolicyServer.
       
   485     * Handles capability checking for certain server requests.
       
   486     * @param aMsg  Message which was received from the client side
       
   487     * @param aAction  
       
   488     * @param aMissing
       
   489     * @result return one of TCustomResult set {EPass, EFail, EAsync}.
       
   490     */
       
   491     CPolicyServer::TCustomResult CustomSecurityCheckL( 
       
   492         const RMessage2 &aMsg, TInt &aAction, TSecurityInfo &aMissing );
       
   493 
       
   494     /**
       
   495     * From CPolicyServer.
       
   496     * Handles failure
       
   497     * @param aMsg  Message which was received from the client side
       
   498     * @param aAction  
       
   499     * @param aMissing
       
   500     * @result return one of TCustomResult set {EPass, EFail, EAsync}.
       
   501     */
       
   502     CPolicyServer::TCustomResult CustomFailureActionL(
       
   503         const RMessage2 &aMsg, TInt aAction, const TSecurityInfo &aMissing );
       
   504     
       
   505 private:
       
   506 
       
   507     /**
       
   508      * Get a provider plug-in by the given UID
       
   509      *
       
   510      * @since S60 v5.0
       
   511      * @param aImplUid UID of the provider plug-in.
       
   512      * @return Provider instance.
       
   513      */
       
   514     CThumbnailProvider* GetProviderL( const TUid& aImplUid );
       
   515 
       
   516     /**
       
   517      * Get store instance for given drive.
       
   518      *
       
   519      * @since S60 v5.0
       
   520      * @param aDrive Drive for which the store is used, such as EDriveC,
       
   521      *               EDriveE, etc.
       
   522      * @return CThumbnailStore object
       
   523      */
       
   524     CThumbnailStore* StoreForDriveL( const TInt aDrive );
       
   525  
       
   526     
       
   527     /**
       
   528      * Add unmount observer for each unmountable drive.
       
   529      *
       
   530      * @since S60 v5.0
       
   531      */
       
   532     void AddUnmountObserversL();
       
   533     
       
   534     /** 
       
   535      * Open store for each mounted drive.
       
   536      *
       
   537      * @since S60 v5.0     
       
   538      */
       
   539     void OpenStoresL();
       
   540     
       
   541     /**
       
   542      * Callback for reconnect timer
       
   543      *
       
   544      * @since S60 v5.0
       
   545      */
       
   546     static TInt ReconnectCallBack(TAny* aAny);
       
   547     
       
   548     /**
       
   549      * Start unmount timer
       
   550      *
       
   551      * @since S60 S^3
       
   552      */
       
   553     void StartUnmountTimeout( const TInt aDrive);
       
   554     
       
   555     /**
       
   556      * Callback for unmount timer
       
   557      *
       
   558      * @since S60 S^3
       
   559      */
       
   560     static TInt UnmountCallBack(TAny* aAny);
       
   561     
       
   562 private:
       
   563 
       
   564     /**
       
   565      * C++ default constructor
       
   566      *
       
   567      * @since S60 v5.0
       
   568      * @return New CThumbnailServer instance.
       
   569      */
       
   570     CThumbnailServer();
       
   571 
       
   572     /**
       
   573      * Symbian 2nd phase constructor can leave.
       
   574      *
       
   575      * @since S60 v5.0
       
   576      */
       
   577     void ConstructL();
       
   578 
       
   579 private:
       
   580     /**
       
   581      * Reference counted pointer to a CFbsBitmap object used for the bitmap
       
   582      * pool.
       
   583      */
       
   584     struct TThumbnailBitmapRef
       
   585         {
       
   586 public:
       
   587         /**
       
   588          * CThumbnailServerSession can be used to identify which client
       
   589          * session is responsible for calling ReleaseBitmap() for this
       
   590          * bitmap. Not own.
       
   591          */
       
   592         CThumbnailServerSession* iSession;
       
   593 
       
   594         /**
       
   595          * Reference count for this bitmap. If reference count reaches zero,
       
   596          * the bitmap is deleted by the server.
       
   597          */
       
   598         TInt iRefCount;
       
   599 
       
   600         /**
       
   601          * Bitmap object. Not owned directly by TThumbnailBitmapRef, but by
       
   602          * the server.
       
   603          * Not own.
       
   604          */
       
   605         CFbsBitmap* iBitmap;
       
   606         
       
   607         /**
       
   608          * Request Id 
       
   609          */
       
   610         TThumbnailRequestId iRequestId;        
       
   611         
       
   612         };
       
   613 
       
   614 private:
       
   615     // data
       
   616 
       
   617     TBool iShutdown;
       
   618     CTMShutdownObserver* iShutdownObserver;
       
   619     
       
   620     /**
       
   621      * Fileserver, own.
       
   622      */
       
   623     RFs iFs;
       
   624 
       
   625     /**
       
   626      * Sessioncount.
       
   627      */
       
   628     TInt iSessionCount;
       
   629 
       
   630     /**
       
   631      * FbsSession.
       
   632      */
       
   633     RFbsSession iFbsSession;
       
   634 
       
   635     /**
       
   636      * Bitmap pool. Reference counted pointers to CFbsBitmaps stored
       
   637      * in a hash table with bitmap handle as the key.
       
   638      * Own.
       
   639      */
       
   640     RHashMap < TInt, TThumbnailBitmapRef > iBitmapPool;
       
   641 
       
   642     /**
       
   643      * Processor for running tasks.
       
   644      * Own.
       
   645      */
       
   646     CThumbnailTaskProcessor* iProcessor;
       
   647 
       
   648     /**
       
   649      * Central repository data handler
       
   650      * Own.
       
   651      */
       
   652     CThumbnailCenRep* iCenrep;
       
   653 
       
   654     /**
       
   655      * Recognizer.
       
   656      * Own.
       
   657      */
       
   658     RApaLsSession iRecognizer;
       
   659 
       
   660     /**
       
   661      * Result of recognition.
       
   662      */
       
   663     TDataRecognitionResult iResult;
       
   664 
       
   665     /**
       
   666      * Plug-in info.
       
   667      */
       
   668     RImplInfoPtrArray iPluginInfoArray;
       
   669 
       
   670     /**
       
   671      * Thumbnail providers. Stored in a hash table with the implementation
       
   672      * UID as the key.
       
   673      * Own.
       
   674      */
       
   675     RHashMap < TInt32, CThumbnailProvider*  > iProviders;
       
   676 
       
   677     /**
       
   678      * Scaler.
       
   679      * Own.
       
   680      */
       
   681     MIHLScaler* iScaler;
       
   682 
       
   683     /**
       
   684     * Array of unmount observers.
       
   685     */
       
   686     RPointerArray<CThumbnailDiskUnmountObserver> iUnmountObservers;
       
   687     
       
   688     CThumbnailMemoryCardObserver* iMMCObserver;
       
   689     
       
   690     CTMFormatObserver* iFormatObserver;
       
   691 
       
   692     /**
       
   693      * Databases for each drive, identified by drive (EDriveC, etc).
       
   694      * New databases and created on-the-fly as new requests are received.
       
   695      * Databases are closed when drives are dismounted.
       
   696      * Own.
       
   697      */
       
   698     RHashMap < TInt, CThumbnailStore*  > iStores;
       
   699     
       
   700     // own
       
   701     CMdESession* iMdESession;
       
   702     
       
   703     TBuf<KImeiBufferSize> iImei;
       
   704     
       
   705     /**
       
   706      * Persistent sizes.
       
   707      */
       
   708     RArray < TThumbnailPersistentSize > iPersistentSizes;
       
   709     
       
   710     TBool iFormatting;
       
   711     
       
   712     // reconnect timer
       
   713     CPeriodic* iReconnect;
       
   714 
       
   715     // unmount timer
       
   716     CPeriodic* iUnmount;
       
   717     
       
   718     // array of unmounte
       
   719     RArray < TInt > iUnmountedDrives;
       
   720     
       
   721 #ifdef _DEBUG
       
   722     TUint32 iPlaceholderCounter;
       
   723 #endif
       
   724     
       
   725     /**
       
   726      * Fetched checker.
       
   727      * Own.
       
   728      */
       
   729     CThumbnailFetchedChecker* iFetchedChecker;
       
   730     
       
   731     TBool iSessionError;
       
   732 };
       
   733 
       
   734 #endif // THUMBNAILSERVER_H