diff -r 2e2a89493e2b -r 48dd0f169f0d imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h Fri Sep 03 10:29:37 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,668 +0,0 @@ -/* -* 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 -#include -#include "thumbnailcenrep.h" -#include "thumbnailmanagerconstants.h" -#include "thumbnaillog.h" -#include "tmactivitymanager.h" - -class RFs; -class CFbsBitmap; -class CThumbnailServer; - -/** - * Database transaction - * - * @since S60 v5.0 - */ -class RThumbnailTransaction - { - enum TState - { - EOpen, EOldOpen, EError, EClosed - }; -public: - RThumbnailTransaction( RSqlDatabase& aDatabase ); - - void BeginL(); - void Close(); - void CommitL(); - TInt Rollback(); - -private: - RSqlDatabase& iDatabase; - TState iState; -}; - - -/** -* MThumbnailStoreDiskSpaceNotifierObserver -* Observer interface for a disk space notifier. -*/ -class MThumbnailStoreDiskSpaceNotifierObserver - { - public : - /** - * Called to notify the observer that disk space has crossed the specified threshold value. - * - * @param aDiskFull is disk full (freespace under specified threshold level) - */ - virtual void HandleDiskSpaceNotificationL(TBool aDiskFull) = 0; - - /** - * Called to if disk space notifier has an error situation. - * - * @param aError error code - */ - virtual void HandleDiskSpaceError(TInt aError) = 0; - - }; - -/** -* CThumbnailStoreDiskSpaceNotifierAO. -* A disk space notifier class -*/ -class CThumbnailStoreDiskSpaceNotifierAO : public CActive - { - public: - enum TDiskSpaceNotifierState - { - ENormal, - EIterate - }; - - public : // Constructors and destructors - /** - * Constructs a disk space notifier implementation. - * - * @param aThreshold minimum free disk space threshold level in bytes - * @param aFilename filename which defines monitored drive's number - * @return implementation - */ - static CThumbnailStoreDiskSpaceNotifierAO* NewL( - MThumbnailStoreDiskSpaceNotifierObserver& aObserver, - TInt64 aThreshold, const TDesC& aFilename); - - /** - * Constructs a disk space notifier implementation and leaves it - * in the cleanup stack. - * - * @param aThreshold minimum free disk space threshold level in bytes - * @return implementation - */ - static CThumbnailStoreDiskSpaceNotifierAO* NewLC( - MThumbnailStoreDiskSpaceNotifierObserver& aObserver, - TInt64 aThreshold, const TDesC& aFilename ); - - /** - * Destructor. - */ - virtual ~CThumbnailStoreDiskSpaceNotifierAO(); - - TBool DiskFull() const; - - protected: // Functions from base classes - /** - * From CActive - * Callback function. - * Invoked to handle responses from the server. - */ - void RunL(); - - /** - * From CActive - * Handles errors that occur during notifying the observer. - */ - TInt RunError(TInt aError); - - /** - * From CActive - * Cancels any outstanding operation. - */ - void DoCancel(); - - private: // Constructors and destructors - - /** - * constructor - */ - CThumbnailStoreDiskSpaceNotifierAO( - MThumbnailStoreDiskSpaceNotifierObserver& aObserver, - TInt64 aThreshold, TDriveNumber aDrive ); - - /** - * 2nd phase constructor - * @param aThreshold minimum free disk space threshold level in bytes - * @param aDrive monitored drive's number - */ - void ConstructL(); - - private: // New methods - - void StartNotifier(); - - static TDriveNumber GetDriveNumberL( const TDesC& aFilename ); - - private: // Data - - MThumbnailStoreDiskSpaceNotifierObserver& iObserver; - - RFs iFileServerSession; - - const TInt64 iThreshold; - - const TDriveNumber iDrive; - - TDiskSpaceNotifierState iState; - - TInt iIterationCount; - - TBool iDiskFull; - }; - - -/** - * Store for thumbnails. - * - * @since S60 v5.0 - */ -class CThumbnailStore: public CBase, - public MThumbnailStoreDiskSpaceNotifierObserver, - public MTMActivityManagerObserver - { - // 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 - * @param aReadOnly flag is store write protected - * @return New CThumbnailStore instance. - */ - static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly ); - - /** - * 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 TInt64 aModified, const TBool aThumbFromPath, TBool aBlackListed); - - /** - * 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 - ); - - /** - * Delete thumbnails. - * - * @since S60 v5.0 - * @param aPath Path of the media object whose thumbnail is - * to be deleted. - * @param aForce Force to delete instantly - * @param aTransaction Create a transaction - */ - void DeleteThumbnailsL( const TDesC& aPath, TBool aForce = EFalse, - TBool aTransaction = ETrue); - - /** - * Rename thumbnails. - * - * @since S60 v5.0 - * @param aCurrentPath Current path of the Thumbnail - * @param aNewPath New path for the Thumbnail - */ - void RenameThumbnailsL( const TDesC& aCurrentPath, const TDesC& aNewPath ); - - /** - * 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 - * @param aCheckGridSizeOnly check only is grid size missing - */ - void GetMissingSizesL( const TDesC& aPath, TInt aSourceType, RArray < - TThumbnailPersistentSize > & aMissingSizes, TBool aCheckGridSizeOnly ); - - /** - * Check IMEI (owner) of db - * - * @since S60 v5.0 - */ - TInt CheckImei(); - - /** - * Check version of db - * - * @since S60 v5.0 - */ - TInt CheckVersion(); - - /** - * Check mediaid of store - * - * @since S60 v5.0 - */ - TInt CheckMediaIDL(); - - /** - * Add version and IMEI to db - * - * @since S60 v5.0 - */ - void AddVersionAndImeiL(); - - /** - * Update IMEI to db - * - * @since S60 v5.0 - */ - void UpdateImeiL(); - - /** - * Checks that database rowids match. - * - * @since S60 v5.0 - */ - - TInt CheckRowIDs(); - - /** - * Check is disk full - * - * @since S60 v5.0 - */ - TBool IsDiskFull(); - - /** - * 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 aModified current timestampt - * @contains indication whether file modified - */ - TBool CheckModifiedByPathL( const TDesC& aPath, const TInt64 aModified, TBool& modifiedChanged); - - /** - * @return TBool is store write protected - */ - TBool IsReadOnly(); - -private: - /** - * C++ default constructor - * - * @since S60 v5.0 - * @param aFs File server. - * @param aDrive Drive the store used for - * @param aReadOnly set flag if store is write protected - * @return New CThumbnailStore instance. - */ - CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly); - - /** - * Symbian 2nd phase constructor can leave. - * - * @since S60 v5.0 - */ - void ConstructL(); - - /** - * Starts constructing database - * - * @since S60 v5.0 - */ - void PrepareDbL(); - - /** - * Open database - * - * @since S60 v5.0 - * @param aNewDatabase Delete existing before creating new - */ - TInt OpenDatabaseL( TBool aNewDatabase = EFalse); - - /** - * Open database - * - * @since S60 v5.0 - */ - TInt OpenDatabaseFileL(); - - /** - * Construct database tables - * - * @since S60 v5.0 - */ - void CreateTablesL(); - void CreateTempTablesL(); - - /** - * Delete and create database - * - * @since S60 v5.0 - * @param aDelete Delete old db - */ - void RecreateDatabaseL( const TBool aDelete ); - - /** - * Prepare, reset & close statements - * - * @since S60 v5.0 - */ - void PrepareStatementsL(); - static void ResetStatement( TAny* aStmt ); - void CloseStatements(); - - /** - * 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 TInt64 aModified, - const TBool aThumbFromPath); - - /** - * 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 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(); - - void StartMaintenance(); - - /** - * Callback for harvesting complete timer - * - * @since S60 v5.0 - */ - static TInt AutoFlushTimerCallBack(TAny* aAny); - - /** - * Callback for maintenance timer - * - * @since S60 v5.0 - */ - static TInt MaintenanceTimerCallBack(TAny* aAny); - - /** - * Touches blacklisted items - * - */ - void PrepareBlacklistedItemsForRetryL(); - - /** - * Deletes thumbs added to Deleted table - * - */ - TInt DeleteMarkedL(); - - /** - * Checks if thumbnail source files are still in the file system. - * If not, delete corresponding thumbs. - * - * @return ETrue, if finished. - */ - TBool FileExistenceCheckL(); - - /** - * Checks if thumbnail database is usable - * - * @return KErrNone, if no problems - */ - TInt CheckDbState(); - - /** - * Strips drive letter from URI. - * - * @since S60 v5.0 - * @param aPath Path. - */ - void StripDriveLetterL( TDes& aPath ); - -public : // From MThumbnailStoreDiskSpaceNotifierObserver - void HandleDiskSpaceNotificationL(TBool aDiskFull); - - void HandleDiskSpaceError(TInt aError); - -private: //From MTMActivityManagerObserver - void ActivityChanged(const TBool aActive); - -private: - // data - - /** - * Fileserver. - */ - RFs& iFs; - - /** - * Drive number & char - */ - TInt iDrive; - TChar iDriveChar; - - /** - * 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; - - /** - * Periodic timer handling db maintenance - */ - CPeriodic* iMaintenanceTimer; - - /** - * Notifier for situations where free disk space runs out. - */ - CThumbnailStoreDiskSpaceNotifierAO* iDiskFullNotifier; - - TBool iDiskFull; - - CTMActivityManager* iActivityManager; - - // device idle - TBool iIdle; - - // delete thumbs - TBool iDeleteThumbs; - - // check if thumb source files still exist - TBool iCheckFilesExist; - TInt64 iLastCheckedRowID; - - // store is in a state in which db can't be used - TBool iUnrecoverable; - - // prepared statements - RSqlStatement iStmt_KThumbnailSelectInfoByPath; - RSqlStatement iStmt_KThumbnailSelectTempInfoByPath; - RSqlStatement iStmt_KThumbnailInsertTempThumbnailInfo; - RSqlStatement iStmt_KThumbnailInsertTempThumbnailInfoData; - RSqlStatement iStmt_KThumbnailSelectModifiedByPath; - RSqlStatement iStmt_KThumbnailSelectTempModifiedByPath; - RSqlStatement iStmt_KThumbnailFindDuplicate; - RSqlStatement iStmt_KThumbnailTempFindDuplicate; - RSqlStatement iStmt_KThumbnailSqlFindDeleted; - RSqlStatement iStmt_KThumbnailSelectSizeByPath; - RSqlStatement iStmt_KThumbnailSelectTempSizeByPath; - RSqlStatement iStmt_KThumbnailSqlSelectRowIDInfoByPath; - RSqlStatement iStmt_KThumbnailSqlDeleteInfoByPath; - RSqlStatement iStmt_KThumbnailSqlDeleteInfoDataByPath; - RSqlStatement iStmt_KTempThumbnailSqlSelectRowIDInfoByPath; - RSqlStatement iStmt_KTempThumbnailSqlDeleteInfoByPath; - RSqlStatement iStmt_KTempThumbnailSqlDeleteInfoDataByPath; - RSqlStatement iStmt_KThumbnailSqlInsertDeleted; - RSqlStatement iStmt_KThumbnailSqlSelectMarked; - RSqlStatement iStmt_KThumbnailSqlDeleteInfoByRowID; - RSqlStatement iStmt_KThumbnailSqlDeleteInfoDataByRowID; - RSqlStatement iStmt_KThumbnailSelectAllPaths; - RSqlStatement iStmt_KThumbnailRename; - RSqlStatement iStmt_KThumbnailTempRename; - - /** - * Dynamic batch size - */ - TInt iBatchFlushItemCount; - - /** - * Measure time spend in flush - */ - TTime iStartFlush, iStopFlush; - /** - * How long previous flush took ms - */ - TInt iPreviousFlushDelay; - - /** - * is store write protected - */ - TBool iReadOnly; - -}; -// End of File - - -#endif // THUMBNAILSTORE_H