diff -r 000000000000 -r 71ca22bcf22a mmserv/metadatautility/Src/MetaDataParserDcf.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmserv/metadatautility/Src/MetaDataParserDcf.cpp Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,191 @@ +/* +* 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 implements an 3gp metadata parser as specified in +* www.3gpp.org (specification 3GPP TS 26.244 V6.0.0). +* +*/ + + + +// INCLUDE FILES +#include +#include "MetaDataParserDcf.h" +#ifdef _DEBUG +#include +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::CMetaDataParserDcf +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMetaDataParserDcf::CMetaDataParserDcf() + { + } + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMetaDataParserDcf::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMetaDataParserDcf* CMetaDataParserDcf::NewL() + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParserDcf::NewL")); +#endif + CMetaDataParserDcf* self = new( ELeave ) CMetaDataParserDcf; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// Destructor +CMetaDataParserDcf::~CMetaDataParserDcf() + { + } + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::ParseL +// ----------------------------------------------------------------------------- +// +void CMetaDataParserDcf::ParseL( + const RArray& aWantedFields, + CMetaDataFieldContainer& aContainer ) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParserDcf::ParseL")); +#endif + iContainer = &aContainer; + + if ( aWantedFields.Count() == 0 ) + { + ReadMetaDataEntryL(ContentAccess::ETitle, EMetaDataSongTitle); + ReadMetaDataEntryL(ContentAccess::EDescription, EMetaDataComment); + ReadMetaDataEntryL(ContentAccess::EAuthor, EMetaDataComposer); + ReadMetaDataEntryL(ContentAccess::EContentURI, EMetaDataUrl); + ReadMetaDataEntryL(EPerformer, EMetaDataArtist); + ReadMetaDataEntryL(EAlbumTitle, EMetaDataAlbum); + ReadMetaDataEntryL(EAlbumTrack, EMetaDataAlbumTrack); + ReadMetaDataEntryL(EContentVendor, EMetaDataVendor); + ReadMetaDataEntryL(ECopyright, EMetaDataCopyright); + ReadMetaDataEntryL(EGenre, EMetaDataGenre); + ReadMetaDataEntryL(ERatingInfo, EMetaDataRating); + } + else + { + // Look for it in the wanted field array + TInt count( aWantedFields.Count() ); + for ( TInt i = 0; i < count; i++ ) + { + switch ( aWantedFields[ i ] ) + { + case EMetaDataSongTitle: + ReadMetaDataEntryL(ContentAccess::ETitle, EMetaDataSongTitle); + break; + case EMetaDataComment: + ReadMetaDataEntryL(ContentAccess::EDescription, EMetaDataComment); + break; + case EMetaDataComposer: + ReadMetaDataEntryL(ContentAccess::EAuthor, EMetaDataComposer); + break; + case EMetaDataUrl: + ReadMetaDataEntryL(ContentAccess::EContentURI, EMetaDataUrl); + break; + case EMetaDataArtist: + ReadMetaDataEntryL(EPerformer, EMetaDataArtist); + break; + case EMetaDataAlbum: + ReadMetaDataEntryL(EAlbumTitle, EMetaDataAlbum); + break; + case EMetaDataAlbumTrack: + ReadMetaDataEntryL(EAlbumTrack, EMetaDataAlbumTrack); + break; + case EMetaDataVendor: + ReadMetaDataEntryL(EContentVendor, EMetaDataVendor); + break; + case EMetaDataCopyright: + ReadMetaDataEntryL(ECopyright, EMetaDataCopyright); + break; + case EMetaDataGenre: + ReadMetaDataEntryL(EGenre, EMetaDataGenre); + break; + case EMetaDataRating: + ReadMetaDataEntryL(ERatingInfo, EMetaDataRating); + break; + default: + break; + } + } + } + } + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::InitializeFileL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMetaDataParserDcf::InitializeFileL(CMetaDataSource* aSource) + { +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParserDcf::InitializeFileL")); +#endif + iSource = aSource; + ValidateL(); +#ifdef _DEBUG + RDebug::Print(_L("CMetaDataParserDcf::InitializeFileL - Done")); +#endif + } + +// ----------------------------------------------------------------------------- +// CMetaDataParserDcf::ValidateL +// ----------------------------------------------------------------------------- +// +TBool CMetaDataParserDcf::ValidateL() + { + iExists = ETrue; + return ETrue; + } + +void CMetaDataParserDcf::ReadMetaDataEntryL(TInt aEntryName, + TMetaDataFieldId aFieldId) + { + TInt err = KErrNone; + TBuf <256> headerValue; + err = ((CMetaDataSourceFile*)iSource)->GetStringAttribute(aEntryName, headerValue); + + if(err != KErrNone) + { + return; + } + TPtrC info = StripTrailingZeroes(headerValue); + if(info.Length() > 0) + { + iContainer->AppendL( aFieldId, info ); + } +} + +// End of File