mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatavideoaccess.h
changeset 0 a2952bb97e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatavideoaccess.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 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:  Meta data video access
+*
+*/
+
+
+#ifndef CMMMTPDPMETADATAVIDEOACCESS_H
+#define CMMMTPDPMETADATAVIDEOACCESS_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <s32file.h>    // for CPermanentFileStore
+#include <d32dbms.h>
+
+/*
+* Mapping property code to db column name
+*/
+typedef struct
+    {
+    TMTPObjectPropertyCode iPropCode;
+    const TDesC& iDbColumnName;
+    } TColumnNameTable;
+
+class CMmMtpDpMetadataVideoAccess : public CBase
+    {
+public:
+    static CMmMtpDpMetadataVideoAccess* NewL( RFs& aRfs );
+
+    /**
+    * Destructor
+    */
+    ~CMmMtpDpMetadataVideoAccess();
+
+    /*
+    * Called when the MTP session is initialised
+    */
+    void OpenSessionL();
+
+    /*
+    * Cleanup db and notify CFL
+    */
+    void CloseSessionL();
+
+    /*
+    * Set root for db to manipulate relevant ".db" file
+    */
+    void SetStorageRootL( const TDesC& aStorageRoot );
+
+    /**
+    * Adds Video info to Video DB
+    * @param aFullFileName, full file name of Media file
+    */
+    void AddVideoL( const TDesC& aFullFileName );
+
+    /*
+    * Gets a piece of metadata from permanent store
+    * @aPropCode
+    * @aNewData, output param, store the value get from db
+    * @aObjectMetaData, source to get properties
+    */
+    void GetObjectMetadataValueL( const TUint16 aPropCode,
+        MMTPType& aNewData,
+        const CMTPObjectMetaData& aObjectMetaData );
+
+    /**
+    * Set object property and updated object in DB according property code,
+    * only for update, not for creation
+    * @param aPropCode, property code of aObjectMetaData
+    * @param aNewData, object property value which will be set into
+    *     aObjectMetaData
+    * @param aObjectMetaData, owner of the property which should be
+    *     updated into database
+    */
+    void SetObjectMetadataValueL( const TUint16 aPropCode,
+            const MMTPType& aNewData,
+            const CMTPObjectMetaData& aObjectMetaData );
+
+    /*
+    * Rename the record acording to full file name
+    * @aOldFileName, specify the object which need to be changed
+    * @aNewFileName, specify the new name which will be changed into
+    */
+    void RenameRecordL( const TDesC& aOldFileName, const TDesC& aNewFileName );
+
+    /**
+    * Remove the file from DB
+    * @param aFullFileName, the file to remove
+    */
+    void DeleteRecordL( const TDesC& aFullFileName );
+
+    /**
+    * Remove all records from DB
+    */
+    void DeleteAllRecordsL();    // Removes all metadata from the database
+
+    /**
+    * set image specific properties specific to videos
+    * @param aFullFileName, the fullFileName of object
+    * @param aWidth,  the width of an object in pixels to set
+    * @parem aHeight,  the height of an object in pixels to set
+    */
+    void SetImageObjPropL( const TDesC& aFullFileName,
+        const TUint32 aWidth,
+        const TUint32 aHeight );
+
+    /**
+    * get image specific properties specific to videos
+    * @param aFullFileName, the fullFileName of object
+    * @param aWidth,  the width of an object in pixels to get
+    * @parem aHeight,  the height of an object in pixels to get
+    */
+    void GetImageObjPropL( const TDesC& aFullFileName,
+            TUint32& aWidth,
+            TUint32& aHeight );
+
+    /**
+    * Cleanup Database
+    */
+    void CleanupDatabaseL();
+
+private:
+
+    enum TMtpDbState
+        {
+        ENoRecord,
+        ERecordRead,
+        ERecordWrite,
+        EFailedWrite
+        };
+
+    CMmMtpDpMetadataVideoAccess( RFs& aRfs );
+    void ConstructL();
+
+    TInt OpenDatabase();
+    void OpenDatabaseL();
+    void CreateDatabaseTablesL();
+    void CompactDbIfNecessaryL();
+    void CleanupDbIfNecessaryL();
+
+    void IdentifyDeletedFilesL();
+
+    HBufC* ReadLongTextL( const TDesC& aColumn);
+    void WriteLongTextL( const TDesC& aColumn, const TDesC& aValue);
+
+    void ExecuteQueryL( const TDesC& aSelectThese,
+    const TDesC& aFromTable,
+    const TDesC& aColumnToMatch = KNullDesC,
+    const TDesC& aMatchCriteria = KNullDesC,
+    const TBool aIfNot = EFalse,
+    const TBool aNeedQuote = ETrue );
+
+    void SetRecordL( const TDesC& aFullFileName, TMtpDbState aState ); // Updates the iRecord to the selected file
+    void SetMetadataL( const TUint16 aPropCode, const MMTPType& aNewData );
+
+    inline TBool IsDatabaseOpened()
+        {
+        return iDbOpened;
+        }
+
+    const TDesC& ColumnNameFromPropCodeL( const TUint16 aPropCode );
+
+    TBool FileExists( const TDesC& aFullFileName );
+
+private: // Data
+
+    RFs iRfs;
+
+    CPermanentFileStore* iFileStore;
+    TMtpDbState iDbState;
+    TFileName iCurrentFileName;
+
+    RDbs iDbsSession;
+    RDbView iRecordSet;
+    HBufC* iQueryText;
+    CDbColSet* iColSet;
+    RDbStoreDatabase iDatabase;
+    TBool iDbOpened;
+    TInt iRecordCount;  // Used to compact the database every KMtpCompactInterval
+    TInt iStoreNum;
+
+    };
+
+#endif // CMMMTPDPMETADATAVIDEOACCESS_H