--- /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 <e32base.h>
+#include <apgcli.h> // 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<TAudioMetadataHandling> > cmp(
+ TMimeTypeMapping<TAudioMetadataHandling>::CompareFunction);
+
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionMp3(), KMimeTypeMpeg(),
+ EMetaDataUtilityHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionAac(), KMimeTypeAac(),
+ EMetaDataUtilityHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionAmr(), KMimeTypeAmr(),
+ EMetaDataUtilityHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionAwb(), KMimeTypeAwb(),
+ EMetaDataUtilityHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionWma(), KMimeTypeWma(),
+ EMetaDataUtilityHandling ), cmp ) );
+
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionMid(), KMimeTypeMidi(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionMidi(), KMimeTypeMidi(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionSpMid(), KMimeTypeSpMidi(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionRng(), KMimeTypeRng(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionMxmf(), KMimeTypeMxmf(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionWav(), KMimeTypeWav(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionAu(), KMimeTypeAu(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionNrt(), KMimeTypeRng(),
+ EFileSystemHandling ), cmp ) );
+ User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
+ KExtensionMka(), KMimeTypeAudioMatroska(),
+ EMetaDataUtilityHandling ), cmp ) );
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAudioMDParser::ParseMimeType
+//
+// -----------------------------------------------------------------------------
+//
+const TMimeTypeMapping<TAudioMetadataHandling>* CAudioMDParser::ParseMimeType(
+ const TDesC& aFileName )
+ {
+ TPtrC ext;
+ if( MdsUtils::GetExt( aFileName, ext ) )
+ {
+ TMimeTypeMapping<TAudioMetadataHandling> finder(ext);
+
+ TLinearOrder< TMimeTypeMapping<TAudioMetadataHandling> > cmp(
+ TMimeTypeMapping<TAudioMetadataHandling>::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<KMaxDataTypeLength> 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;
+ }