diff -r 000000000000 -r c53acadfccc6 harvester/harvesterplugins/AudioPlugin/src/harvesteraudiopluginutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/harvester/harvesterplugins/AudioPlugin/src/harvesteraudiopluginutils.cpp Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,335 @@ +/* +* Copyright (c) 2006-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: Harvester audio plugin +* +*/ + + +#include +#include // for RApaLsSession + +#include "harvesteraudiopluginutils.h" + +#include "mdsutils.h" +#include "harvesterlog.h" + +_LIT( KMimeTypeMpeg, "audio/mpeg" ); +_LIT( KMimeTypeAac, "audio/aac" ); +_LIT( KMimeTypeAmr, "audio/amr" ); +_LIT( KMimeTypeAwb, "audio/amr-wb" ); +_LIT( KMimeTypeMidi, "audio/midi" ); +_LIT( KMimeTypeSpMidi, "audio/sp-midi" ); +_LIT( KMimeTypeRng, "application/vnd.nokia.ringing-tone" ); +_LIT( KMimeTypeMxmf, "audio/vnd.nokia.mobile-xmf" ); +_LIT( KMimeTypeWav, "audio/wav" ); +_LIT( KMimeTypeAu, "audio/au" ); +_LIT( KMimeTypeWma, "audio/x-ms-wma"); +_LIT( KMimeTypeAudioMatroska, "audio/x-matroska"); + +_LIT( KExtensionMp3, "mp3" ); +_LIT( KExtensionAac, "aac" ); +_LIT( KExtensionAmr, "amr" ); +_LIT( KExtensionAwb, "awb" ); +_LIT( KExtensionMid, "mid" ); +_LIT( KExtensionMidi, "midi" ); +_LIT( KExtensionSpMid, "spmid" ); +_LIT( KExtensionRng, "rng" ); +_LIT( KExtensionMxmf, "mxmf" ); +_LIT( KExtensionWav, "wav" ); +_LIT( KExtensionAu, "au" ); +_LIT( KExtensionWma, "wma" ); +_LIT( KExtensionNrt, "nrt" ); +_LIT( KExtensionMka, "mka" ); + +// ----------------------------------------------------------------------------- +// CAudioMDParser::NewL +// +// ----------------------------------------------------------------------------- +// +CAudioMDParser* CAudioMDParser::NewL( const TBool aAlbumArt ) + { + CAudioMDParser* self = new ( ELeave ) CAudioMDParser(); + CleanupStack::PushL( self ); + self->ConstructL( aAlbumArt ); + CleanupStack::Pop( self ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +// +CAudioMDParser::~CAudioMDParser() + { + delete iMetaDataUtility; + + iWantedMetadataFields.Close(); + } + + +// ----------------------------------------------------------------------------- +// CAudioMDParser::CAudioMDParser +// +// ----------------------------------------------------------------------------- +// +CAudioMDParser::CAudioMDParser() : + iMetaDataUtility( NULL ), iLastParsedFileMimeType( 0 ) + { + } + + +// ----------------------------------------------------------------------------- +// CAudioMDParser::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CAudioMDParser::ConstructL( const TBool aAlbumArt ) + { + iMetaDataUtility = CMetaDataUtility::NewL(); + + // initialize metadata field list for CMetaDataUtility (iMetaDataUtility) + iWantedMetadataFields.AppendL( EMetaDataSongTitle ); + iWantedMetadataFields.AppendL( EMetaDataArtist ); + iWantedMetadataFields.AppendL( EMetaDataAlbum ); + iWantedMetadataFields.AppendL( EMetaDataGenre ); + iWantedMetadataFields.AppendL( EMetaDataComposer ); + iWantedMetadataFields.AppendL( EMetaDataRating ); + iWantedMetadataFields.AppendL( EMetaDataAlbumTrack ); + iWantedMetadataFields.AppendL( EMetaDataOriginalArtist ); + iWantedMetadataFields.AppendL( EMetaDataDuration ); + iWantedMetadataFields.AppendL( EMetaDataCopyright ); + iWantedMetadataFields.AppendL( EMetaDataDate ); + + if( aAlbumArt ) + { + iWantedMetadataFields.AppendL( EMetaDataJpeg ); + } + + TLinearOrder< TMimeTypeMapping > cmp( + TMimeTypeMapping::CompareFunction); + + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionMp3(), KMimeTypeMpeg(), + EMetaDataUtilityHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionAac(), KMimeTypeAac(), + EMetaDataUtilityHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionAmr(), KMimeTypeAmr(), + EMetaDataUtilityHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionAwb(), KMimeTypeAwb(), + EMetaDataUtilityHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionWma(), KMimeTypeWma(), + EMetaDataUtilityHandling ), cmp ) ); + + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionMid(), KMimeTypeMidi(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionMidi(), KMimeTypeMidi(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionSpMid(), KMimeTypeSpMidi(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionRng(), KMimeTypeRng(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionMxmf(), KMimeTypeMxmf(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionWav(), KMimeTypeWav(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionAu(), KMimeTypeAu(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionNrt(), KMimeTypeRng(), + EFileSystemHandling ), cmp ) ); + User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping( + KExtensionMka(), KMimeTypeAudioMatroska(), + EMetaDataUtilityHandling ), cmp ) ); + + } + + +// ----------------------------------------------------------------------------- +// CAudioMDParser::ParseMimeType +// +// ----------------------------------------------------------------------------- +// +const TMimeTypeMapping* CAudioMDParser::ParseMimeType( + const TDesC& aFileName ) + { + TPtrC ext; + if( MdsUtils::GetExt( aFileName, ext ) ) + { + TMimeTypeMapping finder(ext); + + TLinearOrder< TMimeTypeMapping > cmp( + TMimeTypeMapping::CompareFunction); + + TInt pos = iMimeTypeMappings.FindInOrder( finder, cmp ); + + if( KErrNotFound != pos ) + { + iLastParsedFileMimeType = pos; + return &iMimeTypeMappings[ pos ]; + } + } + + return NULL; + } + + +// ----------------------------------------------------------------------------- +// CAudioMDParser::ParseL +// +// ----------------------------------------------------------------------------- +// +TBool CAudioMDParser::ParseL( const TDesC& aFileName ) + { + TBuf8 mime; + mime.Copy( iMimeTypeMappings[ iLastParsedFileMimeType ].iMimeType ); + iMetaDataUtility->OpenFileL( aFileName, iWantedMetadataFields, mime ); + + return iMetaDataUtility->MetaDataCount() > 0; + } + + +// ----------------------------------------------------------------------------- +// CAudioMDParser::MetaDataFieldL +// +// ----------------------------------------------------------------------------- +// +TPtrC CAudioMDParser::MetaDataFieldL( TInt aFieldId ) + { + const CMetaDataFieldContainer& metaCont = iMetaDataUtility->MetaDataFieldsL(); + + TMetaDataFieldId id = MapFieldId( aFieldId ); + return metaCont.Field( id ); // returns KNullDesC if not found + } + +// ----------------------------------------------------------------------------- +// CAudioMDParser::MetaDataFieldL +// +// ----------------------------------------------------------------------------- +// +TPtrC8 CAudioMDParser::MetaDataField8L( TInt aFieldId ) + { + const CMetaDataFieldContainer& metaCont = iMetaDataUtility->MetaDataFieldsL(); + + TMetaDataFieldId id = MapFieldId( aFieldId ); + return metaCont.Field8( id ); // returns KNullDesC if not found + } + +// ----------------------------------------------------------------------------- +// CAudioMDParser::ResetL +// +// ----------------------------------------------------------------------------- +// +void CAudioMDParser::ResetL() + { + iMetaDataUtility->ResetL(); + } + +// ----------------------------------------------------------------------------- +// CAudioMDParser::MapFieldId +// +// ----------------------------------------------------------------------------- +// +TMetaDataFieldId CAudioMDParser::MapFieldId( TInt aFieldId ) + { + TMetaDataFieldId id = EMetaDataSongTitle; + + switch ( aFieldId ) + { + case EAudioMDFieldSong: + { + id = EMetaDataSongTitle; + break; + } + case EAudioMDFieldArtist: + { + id = EMetaDataArtist; + break; + } + case EAudioMDFieldAlbum: + { + id = EMetaDataAlbum; + break; + } + case EAudioMDFieldGenre: + { + id = EMetaDataGenre; + break; + } + case EAudioMDFieldComposer: + { + id = EMetaDataComposer; + break; + } + case EAudioMDFieldRating: + { + id = EMetaDataRating; + break; + } + case EAudioMDFieldTrack: + { + id = EMetaDataAlbumTrack; + break; + } + case EAudioMDFieldOriginalArtist: + { + id = EMetaDataOriginalArtist; + break; + } + case EAudioMDFieldDuration: + { + id = EMetaDataDuration; + break; + } + case EAudioMDFieldCopyright: + { + id = EMetaDataCopyright; + break; + } + case EAudioMDFieldDate: + { + id = EMetaDataDate; + break; + } + case EAudioMDFieldJpeg: + { + id = EMetaDataJpeg; + break; + } + + default: + { +#ifdef _DEBUG + _LIT( KPanicCategory,"HarvesterAudioPlugin" ); + __ASSERT_DEBUG( EFalse, User::Panic( KPanicCategory, KErrArgument ) ); +#endif + break; + } + } + + return id; + }