diff -r 000000000000 -r 2014ca87e772 imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h Tue Jan 26 15:18:05 2010 +0200 @@ -0,0 +1,477 @@ +/* +* 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: Store for thumbnails. + * +*/ + + +#ifndef THUMBNAILSTORE_H +#define THUMBNAILSTORE_H + +#include +#include "thumbnailcenrep.h" +#include "thumbnailmanagerconstants.h" +#include "thumbnaillog.h" +#include "thumbnailserver.h" + +class RFs; +class CFbsBitmap; +class CThumbnailServer; + +/** + * Database transaction + * + * @since S60 v5.0 + */ +class RThumbnailTransaction + { + enum TState + { + EOpen, EError, EClosed + }; +public: + RThumbnailTransaction( RSqlDatabase& aDatabase ); + + void BeginL(); + void Close(); + void CommitL(); + TInt Rollback(); + +private: + RSqlDatabase& iDatabase; + TState iState; +}; + + +/** + * Store for thumbnails. + * + * @since S60 v5.0 + */ +class CThumbnailStore: public CBase + { + // Bitmasked Flags + typedef enum + { + KThumbnailDbFlagCropped = 1, + KThumbnailDbFlagBlacklisted = 2, + KThumbnailDbFlagDeleted = 4 + }TThumbnailDbFlags; + +public: + + /** + * Two-phased constructor. + * + * @since S60 v5.0 + * @param aFs File server. + * @param aDrive Drive the store used for + * @param aCenter Pointer to cenrep data handler + * @return New CThumbnailStore instance. + */ + static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ); + + /** + * Destructor + * + * @since S60 v5.0 + */ + virtual ~CThumbnailStore(); + + /** + * Stores thumbnail image. + * + * @since S60 v5.0 + * @param aPath Path of the image from which thumbnail was created. + * @param aThumbnail Thumbnail bitmap. + * @param aOriginalSize Original size of image. + * @param aCropped Enabled if image is cropped. + * @param aThumbnailSize Prededined size of requested thumbnail. + * @param aThumbFromPath Thumbnail created from associated path. + */ + void StoreThumbnailL( const TDesC& aPath, CFbsBitmap* aThumbnail, const + TSize& aOriginalSize, TBool aCropped, const TThumbnailSize aThumbnailSize, + const TThumbnailId aThumbnailId = 0, const TBool aThumbFromPath = ETrue, + TBool aBlackListed = EFalse ); + + /** + * Fetches thumbnail image. + * + * @since S60 v5.0 + * @param aPath Path of the media object whose thumbnail is + * to be retrieved. + * @param aThumbnail Pointer to get the fetched thumbnail bitmap. + * Caller assumes ownership. + * @param aData Pointer to get the fetched thumbnail JPEG. + * Caller assumes ownership. + + * @param aAllowUpscaling If enabled, allow fetching thumbnails that + * are smaller than requested. + * @param aThumbnailSize Prededined size of requested thumbnail. + * + * @param aThumbnailSize Reference to real size of TN. + */ + void FetchThumbnailL( const TDesC& aPath, + CFbsBitmap* & aThumbnail, + TDesC8* & aData, + const TThumbnailSize aThumbnailSize, + TSize &aThumbnailRealSize + ); + + /** + * Fetches thumbnail image. + * + * @since S60 v5.0 + * @param aThumbnailId Path of the media object whose thumbnail is + * to be retrieved. + * @param aThumbnail Pointer to get the fetched thumbnail bitmap. + * Caller assumes ownership. + * @param aData Pointer to get the fetched thumbnail JPEG. + * Caller assumes ownership. + * @param aThumbnailSize Minimum size of the thumbnail + * . + * @param aThumbnailSize Reference to real size of TN. + * + * @return KErrNone, otherwise KErrNotFound if thumbnail not found from DB + */ + TInt FetchThumbnailL( TThumbnailId aThumbnailId, + CFbsBitmap*& aThumbnail, + TDesC8* & aData, + TThumbnailSize aThumbnailSize, + TSize &aThumbnailRealSize + ); + + + /** + * Delete thumbnails. + * + * @since S60 v5.0 + * @param aPath Path of the media object whose thumbnail is + * to be deleted. + */ + void DeleteThumbnailsL( const TDesC& aPath ); + + /** + * Delete thumbnails. + * + * @since S60 TB9.1 + * @param aTNId Id of the media object whose thumbnail is + * to be deleted. + */ + void DeleteThumbnailsL( const TThumbnailId& aTNId ); + + /** + * Persistent sizes. + * + * @since S60 v5.0 + * @return List of thumbnail sizes (including othe parameters) which + * are stored for later access. + */ + void SetPersistentSizes(const RArray < TThumbnailPersistentSize > &aSizes); + + /** + * Get persistent sizes not yet in database + * + * @since S60 v5.0 + * @param aPath Path where missing sizes are associated + * @param aMissingSizes List of missing thumbnail sizes + */ + void GetMissingSizesAndIDsL( const TDesC& aPath, TInt aSourceType, RArray < + TThumbnailPersistentSize > & aMissingSizes, TBool& aMissingIDs ); + + /** + * Get persistent sizes not yet in database + * + * @since S60 TB9.1 + * @param aId Id of TN where missing sizes are associated + * @param aMissingSizes List of missing thumbnail sizes + */ + void GetMissingSizesL( const TThumbnailId aId, RArray < + TThumbnailPersistentSize > & aMissingSizes ); + + /** + * Find store for thumbnails. + * + * @since S60 TB9.1 + * @param aThumbnailId Id of thumbnails to be updated. + */ + void FindStoreL(TThumbnailId aThumbnailId); + + /** + * Updates path for thumbnails in current store. + * + * @since S60 v5.0 + * @param aItemId Id for thumbnails to be updated. + * @param aNewPath New path for thumbnails. + * @return ETrue, if path was updated + */ + TBool UpdateStoreL( TThumbnailId aItemId, const TDesC& aNewPath ); + + /** + * Updates path for thumbnails in current store. + * + * @since S60 v5.0 + * @param aItemId Id for thumbnails to be updated. + * @param aNewPath New path for thumbnails. + */ + void UpdateStoreL( const TDesC& aPath, TThumbnailId aNewId ); + + /** + * Check modification timestamp + * + * @since S60 v5.0 + * @param aItemId Id for thumbnails to be updated. + * @param aModified new MDS timestamp + * @return ETrue, if given timestamp was newer than in DB + */ + TBool CheckModifiedL( const TThumbnailId aItemId, const TInt64 aModified ); + + /** + * Fetches thumbnails from store to be moved. + * + * @since S60 v5.0 + * @param aItemId Id for thumbnails to be updated. + * @param aThumbnails Array for thumbnails to be moved. + */ + void FetchThumbnailsL(TThumbnailId aItemId, RArray < TThumbnailDatabaseData* >& aThumbnails); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + void StoreThumbnailsL(const TDesC& aNewPath, RArray < TThumbnailDatabaseData* >& aThumbnails); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + TInt CheckImeiL(); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + TInt CheckVersionL(); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + TInt CheckMediaIDL(); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + void AddVersionAndImeiL(); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + void ResetThumbnailIDs(); + + /** + * Stores thumbnails in to new store. + * + * @since S60 v5.0 + * @param aNewPath New path for thumbnails. + * @param aThumbnails Array for thumbnails to be moved. + */ + void UpdateImeiL(); + + /** + * Checks that database rowids match. + * + * @since S60 v5.0 + */ + + TInt CheckRowIDsL(); + +private: + /** + * C++ default constructor + * + * @since S60 v5.0 + * @param aFs File server. + * @param aDrive Drive the store used for + * @return New CThumbnailStore instance. + */ + CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer); + + /** + * Symbian 2nd phase constructor can leave. + * + * @since S60 v5.0 + */ + void ConstructL(); + + /** + * Create database tables. + * + * @since S60 v5.0 + */ + void CreateTablesL(); + + /** + * Stores thumbnail image. + * + * @since S60 v5.0 + * @param aPath Path of the image from which thumbnail was created. + * @param aData Data. + * @param aSize Size of thumbnail. + * @param aOriginalSize Original size of image. + * @param aFormat Format of the image. + * @param aFlags Flags. + * @param aThumbnailSize Associated size of the thumbnail to be deleted + * @param aThumbFromPath Thumbnail created from associated path. + */ + void StoreThumbnailL( const TDesC& aPath, const TDes8& aData, const TSize& + aSize, const TSize& aOriginalSize, const TThumbnailFormat& aFormat, TInt aFlags, + const TThumbnailSize& aThumbnailSize, const TThumbnailId aThumbnailId = 0, + const TBool aThumbFromPath = ETrue); + + /** + * Finds possible existing duplicate thumbnail. + * + * @since S60 v5.0 + * @param aPath Path of the image from which thumbnail was created. + * @param aThumbnailId ID of the thumbnail + * @param aThumbnailSize Associated size of the thumbnail to be deleted + */ + TBool FindDuplicateL( const TDesC& aPath, const TThumbnailId aThumbnailId, + const TThumbnailSize& aThumbnailSize ); + + /** + * Flush RAM cache containing generated TNs to persistent storage. + * + * @since S60 TB9.1 + * @param aForce which forces logic to flush cache table. + */ + void FlushCacheTable( TBool aForce = EFalse ); + + /** + * Start db auto flush timer + * + * @since S60 TB9.1 + */ + void StartAutoFlush(); + + /** + * Stop db auto flush timer + * + * @since S60 TB9.1 + */ + void StopAutoFlush(); + + /** + * Callback for harvesting complete timer + * + * @since S60 v5.0 + */ + static TInt AutoFlushTimerCallBack(TAny* aAny); + + /** + * Checks timestamp of blacklisted entry to timestamp of file, from + * which thumbnail entry was created, in filesystem + * + * @param aPath Path from which thumbnail created + * @param aTempTable Indication whether data in temp table + * @param aModified On return contains indication whether file modified + */ + void CheckModifiedByPathL( const TDesC& aPath, TBool aTempTable, TBool& aModified ); + + /** + * Checks timestamp of blacklisted entry to timestamp of file, from + * which thumbnail entry was created, in filesystem + * + * @param aId Thumbnail id + * @param aTempTable Indication whether data in temp table + * @param aModified On return contains indication whether file modified + */ + void CheckModifiedByIdL( TUint32 aId, TBool aTempTable, TBool& aModified ); + + /** + * Removes blacklisted flag from all entrys + * + */ + void RemoveDbFlagL(TThumbnailDbFlags aFlag); + +private: + // data + + /** + * Fileserver. + */ + RFs& iFs; + + /** + * Drive number + */ + TInt iDrive; + + /** + * Thumbnail database. + */ + RSqlDatabase iDatabase; + + /** + * Persistent sizes. + */ + RArray < TThumbnailPersistentSize > iPersistentSizes; + + /** + * Count of cached TNs not yet committed to db + */ + TInt iBatchItemCount; + + /** + * Phones IMEI code + */ + TDesC& iImei; + + /** + * ThumbnailServer + */ + + CThumbnailServer* iServer; + +#ifdef _DEBUG + TUint32 iThumbCounter; +#endif + /** + * Periodic timer handling automatic flushing of db cache + */ + CPeriodic* iAutoFlushTimer; +}; + +#endif // THUMBNAILSTORE_H