--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/collectionframework/thumbnailcreator/inc/glxtnvolumedatabase.h Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,257 @@
+/*
+* Copyright (c) 2008-2009 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: Definition of CGlxtnVolumeDatabase
+*
+*/
+
+
+
+
+/**
+ * @internal reviewed 30/07/2007 by Simon Brooks
+ */
+
+#ifndef GLXTNVOLUMEDATABASE_H
+#define GLXTNVOLUMEDATABASE_H
+
+#include <e32base.h>
+#include <d32dbms.h> // For RDbStoreDatabase
+#include <f32file.h> // For TDriveName
+
+#include <glxmediaid.h>
+#include "glxtnstd.h" // For TGlxImageDataFormat
+#include "mglxtnvolumedatabaseobserver.h" // For TGlxtnThumbnailId
+
+class CFileStore;
+class CGlxtnFileInfo;
+class MGlxtnVolumeDatabaseObserver;
+
+const TInt KErrCorruptThumbnailDatabase = -10001;
+const TInt KErrEofThumbnailDatabase = -10002;
+
+/**
+ * CGlxtnVolumeDatabase implements the database for a single volume.
+ *
+ * @author Dan Rhodes
+ * @ingroup glx_thumbnail_creator
+ */
+NONSHARABLE_CLASS(CGlxtnVolumeDatabase) : public CActive
+ {
+public:
+ /**
+ * Static constructor.
+ * @param aObserver Observer of database operations.
+ * @param aFs File server handle.
+ * @param aPath Full path to the database file to use.
+ */
+ static CGlxtnVolumeDatabase* NewLC(MGlxtnVolumeDatabaseObserver& aObserver,
+ RFs& aFs,
+ const TDesC& aPath);
+
+ /**
+ * Destructor
+ */
+ ~CGlxtnVolumeDatabase();
+
+ /**
+ * Get the drive this database is stored on
+ */
+ const TDesC& Drive() const;
+
+ /**
+ * Look up thumbnail ID from Ids table
+ * @param aMediaId Media item ID.
+ */
+ void GetThumbnailIdL( const TGlxMediaId& aMediaId );
+
+ /**
+ * Look up thumbnail ID from Items table. If not found, add new record.
+ * @param aInfo File info for media item.
+ */
+ void GetThumbnailIdL(const CGlxtnFileInfo* aInfo);
+
+ /**
+ * Retrieve the thumbnail id to be assigned to the next thumbnail that gets stored in teh database.
+ * @param None.
+ */
+ TGlxtnThumbnailId GetThumbnailId();
+
+ /**
+ * Add record to Ids table
+ * @param aMediaId Media item ID.
+ * @param aThumbId Thumbnail ID.
+ */
+ void StoreThumbnailIdL( const TGlxMediaId& aMediaId,
+ const TGlxtnThumbnailId& aThumbId );
+ /**
+ * Look up thumbnail from Thumbnails table
+ * @param aThumbId Thumbnail ID.
+ * @param aSize Thumbnail size.
+ */
+ void GetThumbnailL( const TGlxtnThumbnailId& aThumbId, const TSize& aSize );
+ /**
+ * Check if a particular thumbnail is in Thumbnails table
+ * @param aThumbId Thumbnail ID.
+ * @param aSize Thumbnail size.
+ */
+ void CheckAvailableL( const TGlxtnThumbnailId& aThumbId, const TSize& aSize );
+ /**
+ * Add record to Thumbnails table
+ * @param aThumbId Thumbnail ID.
+ * @param aSize Thumbnail size.
+ * @param aFormat Thumbnail data format.
+ * @param aData Thumbnail binary data.
+ */
+ void StoreThumbnailL( const TGlxtnThumbnailId& aThumbId, const TSize& aSize,
+ TGlxImageDataFormat aFormat, const TDesC8& aData );
+
+ /**
+ * Add record to Items table, if not found.
+ * @param aThumbId Thumbnail Id.
+ * @param aInfo File info for media item.
+ */
+ void StoreItemsL( const TGlxtnThumbnailId& aThumbId, const CGlxtnFileInfo* aInfo );
+
+ /**
+ * Initialize thumbnail identifier to the last known value plus one.
+ */
+ void InitializeThumbIdL();
+
+ /**
+ * Delete a record from the Ids table
+ * @param aMediaId MediaId of record to delete.
+ */
+ void DeleteIdL( const TGlxMediaId& aMediaId );
+
+ /**
+ * Delete a record from the Thumbnails table
+ * @param aThumbId ThumbId of records to delete.
+ */
+ void DeleteThumbnailsL( const TGlxtnThumbnailId& aThumbId );
+
+ /**
+ * Delete a record from the Items table
+ * @param aThumbId ThumbId of record to delete.
+ */
+ void DeleteItemL( const TGlxtnThumbnailId& aThumbId );
+
+ /**
+ * Cleanup Database (remove entries that do not have corresponding file)
+ */
+ void CleanupDatabaseL();
+
+protected: // From CActive
+ void DoCancel();
+ void RunL();
+ TInt RunError(TInt aError);
+
+private:
+ /**
+ * Default constructor.
+ * @param aObserver Observer of database operations.
+ * @param aFs File server handle.
+ */
+ CGlxtnVolumeDatabase(MGlxtnVolumeDatabaseObserver& aObserver, RFs& aFs);
+ /**
+ * 2nd phase constructor.
+ * @param aPath Full path to the database file to use.
+ */
+ void ConstructL(const TDesC& aPath);
+
+ /**
+ * Open an existing database.
+ * @param aFs File server handle.
+ * @param aPath Full path to the database file to use.
+ */
+ void OpenDbL(RFs& aFs, const TDesC& aFilename);
+
+ /**
+ * Create a new database.
+ * @param aFs File server handle.
+ * @param aPath Full path to the database file to use.
+ */
+ void CreateDbL(RFs& aFs, const TDesC& aFilename);
+
+ /**
+ * Add record to Items table
+ * @return Thumbnail ID of new record.
+ */
+ TGlxtnThumbnailId DoAddItemL();
+
+ /**
+ * Evaluate a view based on a SQL query.
+ * @param aQuery The SQL select statement.
+ */
+ void EvaluateQueryL( const TDbQuery &aQuery );
+
+ /**
+ * Execute a SQL data update statement.
+ * @param aSql The SQL statement.
+ */
+ void UpdateDataL( const TDesC& aSql );
+
+ /**
+ * Test and cleanup a row in Items table
+ */
+ void CleanupRowL();
+
+ /**
+ * Modify SQL string to handle quotes correctly
+ * @param aText String to be modified
+ * @return New HBufC containing modified string
+ */
+ HBufC* QuoteSqlStringLC(const TDesC& aText);
+
+private:
+ enum TDatabaseState
+ {
+ EStateIdle,
+ EStateGettingIdFromMediaId,
+ EStateGettingIdFromFilename,
+ EStateGettingThumbnail,
+ EStateDeletingId,
+ EStateDeletingThumbnails,
+ EStateDeletingItem,
+ EStateCheckingAvailability,
+ EStateCleaning,
+ EStateCleaningDeletingThumbnails
+ };
+
+ /** Observer of this database */
+ MGlxtnVolumeDatabaseObserver& iObserver;
+ /** File server session */
+ RFs& iFs;
+ /** Drive name of the volume */
+ TDriveName iDrive;
+ /** Handle to the database */
+ RDbStoreDatabase iDatabase;
+ /** Store used by the database */
+ CFileStore* iStore;
+ /** ID for next stored thumbnail */
+ TUint iNextThumbId;
+ /** File info for media item current query relates to (not owned) */
+ const CGlxtnFileInfo* iInfo;
+ /** Current state */
+ TDatabaseState iState;
+ /** View used for current query */
+ RDbView iView;
+ /** Updater to update a table */
+ RDbUpdate iDbUpdater;
+ /** Table used for query/deletion of rows in table */
+ RDbTable iTable;
+ /** Flag to determine if cleanup operation did anything requiring compacting */
+ TBool iItemsCleaned;
+ };
+
+#endif // GLXTNVOLUMEDATABASE_H