harvester/harvesterplugins/AudioPlugin/src/harvesteraudiopluginutils.cpp
changeset 0 c53acadfccc6
child 14 646a02f170b9
equal deleted inserted replaced
-1:000000000000 0:c53acadfccc6
       
     1 /*
       
     2 * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Harvester audio plugin
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <e32base.h>
       
    20 #include <apgcli.h>  // for RApaLsSession
       
    21 
       
    22 #include "harvesteraudiopluginutils.h"
       
    23 
       
    24 #include "mdsutils.h"
       
    25 #include "harvesterlog.h"
       
    26 
       
    27 _LIT( KMimeTypeMpeg,   "audio/mpeg" );
       
    28 _LIT( KMimeTypeAac,    "audio/aac" );
       
    29 _LIT( KMimeTypeAmr,    "audio/amr" );
       
    30 _LIT( KMimeTypeAwb,    "audio/amr-wb" );
       
    31 _LIT( KMimeTypeMidi,   "audio/midi" );
       
    32 _LIT( KMimeTypeSpMidi, "audio/sp-midi" );
       
    33 _LIT( KMimeTypeRng,    "application/vnd.nokia.ringing-tone" );
       
    34 _LIT( KMimeTypeMxmf,   "audio/vnd.nokia.mobile-xmf" );
       
    35 _LIT( KMimeTypeWav,    "audio/wav" );
       
    36 _LIT( KMimeTypeAu,     "audio/au" );
       
    37 _LIT( KMimeTypeWma,    "audio/x-ms-wma");
       
    38 _LIT( KMimeTypeAudioMatroska, "audio/x-matroska");
       
    39 
       
    40 _LIT( KExtensionMp3,    "mp3" );
       
    41 _LIT( KExtensionAac,    "aac" );
       
    42 _LIT( KExtensionAmr,    "amr" );
       
    43 _LIT( KExtensionAwb,    "awb" );
       
    44 _LIT( KExtensionMid,    "mid" );
       
    45 _LIT( KExtensionMidi,   "midi" );
       
    46 _LIT( KExtensionSpMid,  "spmid" );
       
    47 _LIT( KExtensionRng,    "rng" );
       
    48 _LIT( KExtensionMxmf,   "mxmf" );
       
    49 _LIT( KExtensionWav,    "wav" );
       
    50 _LIT( KExtensionAu,     "au" );
       
    51 _LIT( KExtensionWma,    "wma" );
       
    52 _LIT( KExtensionNrt,    "nrt" );
       
    53 _LIT( KExtensionMka,    "mka" );
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CAudioMDParser::NewL
       
    57 // 
       
    58 // -----------------------------------------------------------------------------
       
    59 //
       
    60 CAudioMDParser* CAudioMDParser::NewL( const TBool aAlbumArt )
       
    61     {
       
    62     CAudioMDParser* self = new ( ELeave ) CAudioMDParser();
       
    63 	CleanupStack::PushL( self );
       
    64 	self->ConstructL( aAlbumArt );
       
    65 	CleanupStack::Pop( self );
       
    66 
       
    67 	return self;
       
    68     }
       
    69 
       
    70 
       
    71 // -----------------------------------------------------------------------------
       
    72 // Destructor
       
    73 // 
       
    74 // -----------------------------------------------------------------------------
       
    75 //
       
    76 CAudioMDParser::~CAudioMDParser()
       
    77     {
       
    78     delete iMetaDataUtility;
       
    79     
       
    80     iWantedMetadataFields.Close();
       
    81     }
       
    82 
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CAudioMDParser::CAudioMDParser
       
    86 // 
       
    87 // -----------------------------------------------------------------------------
       
    88 //
       
    89 CAudioMDParser::CAudioMDParser() :
       
    90 	iMetaDataUtility( NULL ), iLastParsedFileMimeType( 0 )
       
    91     {
       
    92     }
       
    93 
       
    94 
       
    95 // -----------------------------------------------------------------------------
       
    96 // CAudioMDParser::ConstructL
       
    97 // 
       
    98 // -----------------------------------------------------------------------------
       
    99 //
       
   100 void CAudioMDParser::ConstructL( const TBool aAlbumArt )
       
   101     {
       
   102     iMetaDataUtility = CMetaDataUtility::NewL();
       
   103 
       
   104     // initialize metadata field list for CMetaDataUtility (iMetaDataUtility)
       
   105     iWantedMetadataFields.AppendL( EMetaDataSongTitle );
       
   106     iWantedMetadataFields.AppendL( EMetaDataArtist );
       
   107     iWantedMetadataFields.AppendL( EMetaDataAlbum );
       
   108     iWantedMetadataFields.AppendL( EMetaDataGenre );
       
   109     iWantedMetadataFields.AppendL( EMetaDataComposer );
       
   110     iWantedMetadataFields.AppendL( EMetaDataRating );
       
   111     iWantedMetadataFields.AppendL( EMetaDataAlbumTrack );
       
   112     iWantedMetadataFields.AppendL( EMetaDataOriginalArtist );
       
   113     iWantedMetadataFields.AppendL( EMetaDataDuration );
       
   114     iWantedMetadataFields.AppendL( EMetaDataCopyright );
       
   115     iWantedMetadataFields.AppendL( EMetaDataDate );
       
   116     
       
   117     if( aAlbumArt )
       
   118         {
       
   119         iWantedMetadataFields.AppendL( EMetaDataJpeg );
       
   120         }
       
   121     
       
   122     TLinearOrder< TMimeTypeMapping<TAudioMetadataHandling> > cmp(
       
   123     		TMimeTypeMapping<TAudioMetadataHandling>::CompareFunction);
       
   124 
       
   125     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   126     		KExtensionMp3(), KMimeTypeMpeg(), 
       
   127     		EMetaDataUtilityHandling ), cmp ) );
       
   128     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   129     		KExtensionAac(), KMimeTypeAac(), 
       
   130     		EMetaDataUtilityHandling ), cmp ) );
       
   131     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   132     		KExtensionAmr(), KMimeTypeAmr(), 
       
   133     		EMetaDataUtilityHandling ), cmp ) );
       
   134     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   135     		KExtensionAwb(), KMimeTypeAwb(), 
       
   136     		EMetaDataUtilityHandling ), cmp ) );
       
   137     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   138         	KExtensionWma(), KMimeTypeWma(), 
       
   139         	EMetaDataUtilityHandling ), cmp ) );
       
   140 
       
   141     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   142     		KExtensionMid(), KMimeTypeMidi(), 
       
   143     		EFileSystemHandling ), cmp ) );
       
   144     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   145     		KExtensionMidi(), KMimeTypeMidi(), 
       
   146     		EFileSystemHandling ), cmp ) );
       
   147     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   148     		KExtensionSpMid(), KMimeTypeSpMidi(), 
       
   149     		EFileSystemHandling ), cmp ) );
       
   150     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   151     		KExtensionRng(), KMimeTypeRng(), 
       
   152     		EFileSystemHandling ), cmp ) );
       
   153     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   154     		KExtensionMxmf(), KMimeTypeMxmf(), 
       
   155     		EFileSystemHandling ), cmp ) );
       
   156     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   157     		KExtensionWav(), KMimeTypeWav(), 
       
   158     		EFileSystemHandling ), cmp ) );
       
   159     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   160     		KExtensionAu(), KMimeTypeAu(), 
       
   161     		EFileSystemHandling ), cmp ) );
       
   162     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   163     		KExtensionNrt(), KMimeTypeRng(), 
       
   164     		EFileSystemHandling ), cmp ) );
       
   165     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( TMimeTypeMapping<TAudioMetadataHandling>(
       
   166             KExtensionMka(), KMimeTypeAudioMatroska(), 
       
   167             EMetaDataUtilityHandling ), cmp ) );
       
   168 
       
   169     }
       
   170 
       
   171 
       
   172 // -----------------------------------------------------------------------------
       
   173 // CAudioMDParser::ParseMimeType
       
   174 // 
       
   175 // -----------------------------------------------------------------------------
       
   176 //
       
   177 const TMimeTypeMapping<TAudioMetadataHandling>* CAudioMDParser::ParseMimeType( 
       
   178 		const TDesC& aFileName )
       
   179     {
       
   180     TPtrC ext;
       
   181     if( MdsUtils::GetExt( aFileName, ext ) )
       
   182     	{
       
   183     	TMimeTypeMapping<TAudioMetadataHandling> finder(ext);
       
   184     	
       
   185     	TLinearOrder< TMimeTypeMapping<TAudioMetadataHandling> > cmp(
       
   186     			TMimeTypeMapping<TAudioMetadataHandling>::CompareFunction);
       
   187     	
       
   188     	TInt pos = iMimeTypeMappings.FindInOrder( finder, cmp );
       
   189     	
       
   190     	if( KErrNotFound != pos )
       
   191     		{
       
   192     		iLastParsedFileMimeType = pos;
       
   193     		return &iMimeTypeMappings[ pos ];
       
   194     		}
       
   195     	}
       
   196 
       
   197     return NULL;
       
   198     }
       
   199 
       
   200 
       
   201 // -----------------------------------------------------------------------------
       
   202 // CAudioMDParser::ParseL
       
   203 // 
       
   204 // -----------------------------------------------------------------------------
       
   205 //
       
   206 TBool CAudioMDParser::ParseL( const TDesC& aFileName )
       
   207     {
       
   208     TBuf8<KMaxDataTypeLength> mime;
       
   209     mime.Copy( iMimeTypeMappings[ iLastParsedFileMimeType ].iMimeType );
       
   210     iMetaDataUtility->OpenFileL( aFileName, iWantedMetadataFields, mime );
       
   211     
       
   212     return iMetaDataUtility->MetaDataCount() > 0;
       
   213     }
       
   214 
       
   215 
       
   216 // -----------------------------------------------------------------------------
       
   217 // CAudioMDParser::MetaDataFieldL
       
   218 // 
       
   219 // -----------------------------------------------------------------------------
       
   220 //
       
   221 TPtrC CAudioMDParser::MetaDataFieldL( TInt aFieldId )
       
   222     {
       
   223     const CMetaDataFieldContainer& metaCont = iMetaDataUtility->MetaDataFieldsL();
       
   224     
       
   225     TMetaDataFieldId id = MapFieldId( aFieldId );
       
   226     return metaCont.Field( id );  // returns KNullDesC if not found
       
   227     }
       
   228 
       
   229 // -----------------------------------------------------------------------------
       
   230 // CAudioMDParser::MetaDataFieldL
       
   231 // 
       
   232 // -----------------------------------------------------------------------------
       
   233 //
       
   234 TPtrC8 CAudioMDParser::MetaDataField8L( TInt aFieldId )
       
   235     {
       
   236     const CMetaDataFieldContainer& metaCont = iMetaDataUtility->MetaDataFieldsL();
       
   237     
       
   238     TMetaDataFieldId id = MapFieldId( aFieldId );
       
   239     return metaCont.Field8( id );  // returns KNullDesC if not found
       
   240     }
       
   241 
       
   242 // -----------------------------------------------------------------------------
       
   243 // CAudioMDParser::ResetL
       
   244 // 
       
   245 // -----------------------------------------------------------------------------
       
   246 //
       
   247 void CAudioMDParser::ResetL()
       
   248     {
       
   249     iMetaDataUtility->ResetL();
       
   250     }
       
   251 
       
   252 // -----------------------------------------------------------------------------
       
   253 // CAudioMDParser::MapFieldId
       
   254 // 
       
   255 // -----------------------------------------------------------------------------
       
   256 //
       
   257 TMetaDataFieldId CAudioMDParser::MapFieldId( TInt aFieldId )
       
   258     {
       
   259     TMetaDataFieldId id = EMetaDataSongTitle;
       
   260     
       
   261     switch ( aFieldId )
       
   262         {
       
   263         case EAudioMDFieldSong:
       
   264             {
       
   265             id = EMetaDataSongTitle;
       
   266             break;
       
   267             }
       
   268         case EAudioMDFieldArtist:
       
   269             {
       
   270             id = EMetaDataArtist;
       
   271             break;
       
   272             }
       
   273         case EAudioMDFieldAlbum:
       
   274             {
       
   275             id = EMetaDataAlbum;
       
   276             break;
       
   277             }
       
   278         case EAudioMDFieldGenre:
       
   279             {
       
   280             id = EMetaDataGenre;
       
   281             break;
       
   282             }
       
   283         case EAudioMDFieldComposer:
       
   284             {
       
   285             id = EMetaDataComposer;
       
   286             break;
       
   287             }
       
   288         case EAudioMDFieldRating:
       
   289             {
       
   290             id = EMetaDataRating;
       
   291             break;
       
   292             }
       
   293         case EAudioMDFieldTrack:
       
   294             {
       
   295             id = EMetaDataAlbumTrack;
       
   296             break;
       
   297             }
       
   298         case EAudioMDFieldOriginalArtist:
       
   299             {
       
   300             id = EMetaDataOriginalArtist;
       
   301             break;
       
   302             }
       
   303         case EAudioMDFieldDuration:
       
   304             {
       
   305             id = EMetaDataDuration;
       
   306             break;
       
   307             }
       
   308         case EAudioMDFieldCopyright:
       
   309             {
       
   310             id = EMetaDataCopyright;
       
   311             break;
       
   312             }
       
   313         case EAudioMDFieldDate:
       
   314             {
       
   315             id = EMetaDataDate;
       
   316             break;
       
   317             }
       
   318         case EAudioMDFieldJpeg:
       
   319             {
       
   320             id = EMetaDataJpeg;
       
   321             break;
       
   322             }
       
   323 
       
   324         default:
       
   325             {
       
   326 #ifdef _DEBUG
       
   327             _LIT( KPanicCategory,"HarvesterAudioPlugin" );
       
   328             __ASSERT_DEBUG( EFalse, User::Panic( KPanicCategory,  KErrArgument ) );
       
   329 #endif
       
   330             break;
       
   331             }
       
   332         }
       
   333         
       
   334     return id;
       
   335     }