diff -r 000000000000 -r 71ca22bcf22a mmserv/metadatautility/Src/MetaDataUtilityBody.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/metadatautility/Src/MetaDataUtilityBody.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,329 @@ +/* +* Copyright (c) 2004 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: This class provides implementation body for the API specified +* by CMetaDataUtility. +* +*/ + + + +#ifndef CMETADATAUTILITYBODY_H +#define CMETADATAUTILITYBODY_H + +// INCLUDES +#include +#include +#include +#include + +// FORWARD DECLARATION +class CMetaDataFieldContainer; +class CMetaDataParser; +class CMetaDataSource; +class MMDUChunkDataObserver; +class CMetaDataBufferAgg; + +// LITERALS & CONSTANTS + +_LIT8(KAmrMimeType, "audio/amr"); +_LIT8(KAwbMimeType, "audio/amr-wb"); +_LIT8(KMpegMimeType, "audio/mpeg"); +_LIT8(KMp3MimeType, "audio/mp3"); +_LIT8(KMp4AudioMimeType, "audio/mp4"); +_LIT8(K3gpAudioMimeType, "audio/3gpp"); +_LIT8(K3g2AudioMimeType, "audio/3gpp2"); +_LIT8(KAacMimeType, "audio/aac"); +_LIT8(KMidiMimeType, "audio/midi"); +_LIT8(KWmaMimeType, "audio/x-ms-wma"); +_LIT8(KRmfMimeType, "audio/x-beatnik-rmf"); +_LIT8(KRApnMimeType, "audio/x-pn-realaudio"); +_LIT8(KRArnMimeType, "audio/vnd.rn-realaudio"); +_LIT8(KRAxMimeType, "audio/x-realaudio"); + +// CLASS DECLARATION + +/** +* This class implements the API specified by CMetaDataUtility. +* +* @lib MetaDataUtility.lib +* @since 3.0 +*/ +class CMetaDataUtilityBody : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @return A pointer to a new instance of this class + */ + static CMetaDataUtilityBody* NewL(); + + /** + * Destructor. + */ + virtual ~CMetaDataUtilityBody(); + + public: // New functions + + /** + * Opens and reads metadata from the specified file. + * @since 3.0 + * @param aFileName The name of the file + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @return void + */ + void OpenFileL( const TDesC& aFileName, const RArray& aWantedFields ); + + /** + * Opens and reads metadata from the specified file handle + * @since 3.0 + * @param aFile File handle already open + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @return void + */ + void OpenFileL(RFile& aFile, const RArray& aWantedFields ); + + /** + * Reads metadata from the specified descriptor. + * @since 3.0 + * @param aDes Source descriptor + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @return void + */ + void OpenDesL( const TDesC8& aDes, const RArray& aWantedFields ); + + /** + * Returns the number of metadata. + * @since 3.0 + * @return Number of metadata + */ + TInt MetaDataCount() const; + + /** + * Returns the metadata fields found in this source. + * Calling this function when MetaDataCount() returns 0, will result in + * User::Leave with KErrNotFound. + * @since 3.0 + * @return Metadata field container object + */ + const CMetaDataFieldContainer& MetaDataFieldsL(); + + /** + * Resets the utility. Must be called before OpenFileL or OpenDesL can be called again. + * @since 3.0 + * @return void + */ + void ResetL(); + + /** + * Returns the ID3 version if the file has ID3 metadata. + * @since 3.0 + * @return TID3Version + */ + TID3Version ID3Version(); + /** + * Opens and reads metadata from the specified file. + * @since 3.2 + * @param aFileName The name of the file + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @param aMimeType The MIME type of the file + * @return void + */ + void OpenFileL( const TDesC& aFileName, const RArray& aWantedFields, const TDesC8& aMimeType ); + + /** + * Opens and reads metadata from the specified file handle + * @since 3.2 + * @param aFile File handle already open + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @param aMimeType The MIME type of the file + * @return void + */ + void OpenFileL(RFile& aFile, const RArray& aWantedFields, const TDesC8& aMimeType ); + + /** + * Reads metadata from the specified descriptor. + * @since 3.2 + * @param aDes Source descriptor + * @param aWantedFields An array of TMetaDataFieldId's. Empty array is interpreted as all fields. + * @param aMimeType The MIME type of the file + * @return void + */ + void OpenDesL( const TDesC8& aDes, const RArray& aWantedFields, const TDesC8& aMimeType ); + + /** + * Inititalization for parsing Chunk Data. + * @since 5.0 + * @param aMimeType The MIME type + * @param aObserver should not be NULL + * @return value + * KErrNone + * KErrInvalidArgument invalid mime type or null observer + */ + TInt InitChunkData( TDesC8& aMimeType, + MMDUChunkDataObserver& aObserver ); + + /** + * Process the chunk data. + * @since 5.0 + * Max size of buffer passed in is N bytes for performance optimization + * Buffer overflow (out of memory) results in callback with error. + * invalid chunk data results in callback with error + * parsing APIs are invoked before callback is received results in 0 count or empty container + * parsing APIs are invoked after callback is received results in positive count and full container + * @param aChunk the data chunk to be processed + * @return value + * KErrNone + * KErrNotReady Buffer is still being used + * KErrArgument Chunk size exceeds maximum + * KErrCompletion Stop sending data. Meta-data has been captured and is being parsed. + */ + TInt ProcessChunkData( TDesC8& aChunk, + TBool aFinalChunk = EFalse ); + + /** + * Parse the aggregated metadata. + * @since 5.0 + * This is a request from the user to start parsing + * @return value + * KErrNone + * KErrNotReady Buffer is still being used + */ + TInt ParseChunkData(); + + + /** + * Verify whether it is in Chunk Data mode. + * @since 5.0 + * @return value + * ETrue + * EFalse + */ + TBool IsChunkDataMode(); + + /** + * Close and clean up the Chunk Data mode. + * Need to kill the MetadataUtility since it wasn't designed to be reused. + * @since 5.0 + * @return void + */ + void CloseChunkData(); + + /** + * Parses the aggregated metadata. + * @since 5.0 + * This is a callback from the "Buffer Aggregator" to start parsing after all + * meta-data has been aggregated. + * @param aChunk The aggregated metadata + * @param aMimeType The MIME type + * @return void + */ + void DoParseChunkDataL(TDesC8& aChunk, TDesC8& aMimeType); + + + private: + + /** + * C++ default constructor. + */ + CMetaDataUtilityBody(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Finds the metadata parser that can interpret the specified file. + * @param aFileName The name of the file + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserFileL( const TDesC& aFileName ); + + /** + * Finds the metadata parser that can interpret the specified file handle. + * @param aFile File Handle + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserFileL( RFile& aFile ); + + /** + * Implemetation of finding a file parser, used by FindParserFileL + * @param none + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* DoFindParserFileL(); + /** + * Finds the metadata parser that can interpret the specified descriptor. + * @param aDes Source descriptor + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserDesL( const TDesC8& aDes ); + /** + * Finds the metadata parser that can interpret the specified file. + * @param aFileName The name of the file + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserFileL( const TDesC& aFileName, const TDesC8& aMimeType ); + /** + * Finds the metadata parser that can interpret the specified file handle. + * @since 3.2 + * @param aFile File Handle + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserFileL( RFile& aFile, const TDesC8& aMimeType ); + /** + * Implemetation of finding a file parser, used by FindParserFileL + * @since 3.2 + * @param aMimeType + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* DoFindParserFileL( const TDesC8& aMimeType); + + /** + * Finds the metadata parser that can interpret the specified descriptor. + * @since 3.2 + * @param aDes Source descriptor + * @return Pointer to parser; NULL if unable to find one. + */ + CMetaDataParser* FindParserDesL( const TDesC8& aDes, const TDesC8& aMimeType ); + + /** + * Implemetation of + * @since 3.2 + * @param aMimeType + * @return TInt 0(KErrNone) if supported MIME Type else KErrNotSupported(-5) + */ + TInt IsSupportedMimeType( const TDesC8& aMimeType); + + private: // Data + + // Metadata container + CMetaDataFieldContainer* iContainer; + // Metadata parser + CMetaDataParser* iParser; + // Metadata source + CMetaDataSource* iSource; + // ID3 Version + TInt iID3Version; + // Operate in chunk data mode + TBool iChunkMode; + // Metadata Async + CMetaDataBufferAgg* iBufferAgg; + + }; + +#endif // CMETADATAUTILITYBODY_H + +// End of File