mmserv/metadatautility/Src/MetaDataParserDcf.cpp
changeset 0 71ca22bcf22a
--- /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 <Oma2Agent.h>
+#include	"MetaDataParserDcf.h"
+#ifdef _DEBUG
+#include	<e32svr.h>
+#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<TMetaDataFieldId>& 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