mmserv/metadatautility/Src/MetaDataFieldContainer.cpp
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/metadatautility/Src/MetaDataFieldContainer.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,251 @@
+/*
+* 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: Contains implementation of the CMetaDataFieldContainer
+*              class.This class provides.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include	<MetaDataFieldContainer.h>
+#include	"MetaDataField.h"
+#ifdef _DEBUG
+#include	<e32svr.h>
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::CMetaDataFieldContainer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMetaDataFieldContainer::CMetaDataFieldContainer()
+    {
+    iD16 = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMetaDataFieldContainer::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMetaDataFieldContainer* CMetaDataFieldContainer::NewL()
+    {
+#ifdef _DEBUG
+	RDebug::Print(_L("CMetaDataFieldContainer::NewL"));
+#endif
+	CMetaDataFieldContainer* self = new( ELeave ) CMetaDataFieldContainer;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// Destructor
+CMetaDataFieldContainer::~CMetaDataFieldContainer()
+	{
+	if(i16BitAlbumArt)
+		{
+		delete iD16;
+		}
+	iFields.ResetAndDestroy();
+	iFields.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::Count
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMetaDataFieldContainer::Count() const
+    {
+    return iFields.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::Field
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CMetaDataFieldContainer::Field(
+	TMetaDataFieldId  aFieldId ) const
+    {
+	TInt count( iFields.Count() );
+	for ( TInt i = 0; i < count; i++ )
+		{
+		if ( iFields[i]->Id() == aFieldId )
+			{
+			if(aFieldId != EMetaDataJpeg)
+			    {
+		    	return iFields[i]->Data();			    
+			    }
+			else
+			    {
+		    	TPtrC8 pic = iFields[i]->Data8();
+			    TInt length = pic.Length();
+		    	if( length )
+			        {
+			        if( iD16 )
+			    	    {
+				       	delete iD16;
+				       	iD16 = NULL;
+			        	}
+				    TRAPD(err, iD16 = HBufC::NewL(length));
+			    	if (err == KErrNone)
+				        {
+			        	i16BitAlbumArt = ETrue;
+			        	TPtr unicode( iD16->Des() );
+			        	unicode.Copy( pic );
+			        	return unicode;
+				        }
+		        	}
+	        	}
+	    	}
+    	}
+	// Searched field Id wasn't found
+	return KNullDesC();
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::Field8
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC8 CMetaDataFieldContainer::Field8(
+	TMetaDataFieldId  aFieldId ) const
+    {
+    #ifdef _DEBUG
+	RDebug::Print(_L("CMetaDataFieldContainer::Field8 %d"), aFieldId);
+	#endif
+	TInt count( iFields.Count() );
+	// 8 bit field is only valid for EMetaDataJpeg
+		for ( TInt i = 0; i < count; i++ )
+        {
+		if ( iFields[i]->Id() == aFieldId )
+			{
+			if(aFieldId == EMetaDataJpeg)
+				return iFields[i]->Data8();
+			else
+				return KNullDesC8(); //Only EMetaDataJpeg has valid 8 bit data
+			}
+		}
+	// Searched field Id wasn't found
+	return KNullDesC8();
+	}
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::AppendL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMetaDataFieldContainer::AppendL(
+	TMetaDataFieldId  aFieldId,
+	const TDesC& aData )
+    {
+    CMetaDataField* item = CMetaDataField::NewLC( aFieldId, aData );
+    User::LeaveIfError( iFields.Append( item ) );
+    CleanupStack::Pop();
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::AppendL for 8-bit data
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMetaDataFieldContainer::AppendL(
+	TMetaDataFieldId  aFieldId,
+	const TDesC8& aData )
+    {
+	CMetaDataField* item = CMetaDataField::NewLC( aFieldId, aData );
+	User::LeaveIfError( iFields.Append( item ) );
+	CleanupStack::Pop();
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::At
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CMetaDataFieldContainer::At(
+	TInt aPosition,
+	TMetaDataFieldId& aFieldId ) const
+    {
+	TInt count( iFields.Count() );
+	if ( count == 0 )
+		{
+		return KNullDesC();
+		}
+
+	if ( aPosition < 0 || aPosition > count )
+		{
+		return KNullDesC();
+		}
+
+	aFieldId = iFields[aPosition]->Id();
+	if(aFieldId == EMetaDataJpeg)
+		{
+		TPtrC8 pic = iFields[aPosition]->Data8();
+		TInt length = pic.Length();
+		if( length )
+			{
+			if(iD16)
+			    {
+			   	delete iD16;
+			   	iD16 = NULL;
+			    }
+			TRAPD(err, iD16 = HBufC::NewL(length));
+			if(err != KErrNone)
+		    	{
+				return KNullDesC();
+		    	}
+			i16BitAlbumArt = ETrue;
+			TPtr unicode( iD16->Des() );
+			unicode.Copy( pic );
+			return unicode;
+			}
+		}
+	return iFields[aPosition]->Data();
+    }
+
+// -----------------------------------------------------------------------------
+// CMetaDataFieldContainer::FieldIdAt
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMetaDataFieldContainer::FieldIdAt(
+	TInt aPosition,
+	TMetaDataFieldId& aFieldId ) const
+    {
+    TInt count( iFields.Count());
+    if (count == 0 )
+        {
+        aFieldId = EUnknownMetaDataField;
+        }
+    if ( aPosition < 0 || aPosition > count )
+        {
+        aFieldId = EUnknownMetaDataField;
+        }
+    else
+        {
+        aFieldId = iFields[aPosition]->Id();
+        }
+    }
+//  End of File