--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src.emc/cmmaemcplayerfactory.cpp Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2002-2007 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 is used for creating EMC-based players.
+*
+*/
+
+
+// INCLUDE FILES
+#include <badesca.h>
+#include <logger.h>
+
+#ifndef RD_JAVA_OMA_DRM_V2
+#include <DRMCommon.h>
+#endif // RD_JAVA_OMA_DRM_V2
+
+#include "cmmaemcplayerfactory.h"
+#include "cmmaemcresolver.h"
+#include "MimeTypes.h"
+
+// CONSTANTS
+// Granularity used to create initial arrays.
+const TInt KGranularity = 8;
+_LIT(KContentTypePacketSrcNotIncluded, "application/x-ext-packetsrc");
+
+CMMAEMCPlayerFactory::CMMAEMCPlayerFactory()
+{
+}
+
+CMMAEMCPlayerFactory::~CMMAEMCPlayerFactory()
+{
+}
+
+CMMAPlayer* CMMAEMCPlayerFactory::CreatePlayerL(const TDesC& aContentType)
+{
+ return CreatePlayerL(aContentType, NULL);
+}
+
+CMMAPlayer* CMMAEMCPlayerFactory::CreatePlayerL(const TDesC& /*aContentType*/,
+ const TDesC* /*aFileName*/)
+{
+ return (CMMAPlayer*)NULL;
+}
+
+CMMAPlayer* CMMAEMCPlayerFactory::CreatePlayerL(const TDesC& aProtocol,
+ const TDesC& aMiddlePart,
+ const TDesC&)
+{
+ LOG1(EJavaMMAPI, EInfo, "MMA::CMMAEMCPlayerFactory::CreatePlayerL aMiddlePart = %S",
+ aMiddlePart.Ptr());
+ CMMAEMCResolver* emcresolver =
+ CMMAEMCResolver::NewLC();
+
+ emcresolver ->SetFileNameL(&aMiddlePart);
+
+ CMMAPlayer* player = NULL;
+ if (aProtocol == KMMAFileProtocol)
+ {
+
+ //player = CreatePlayerL( emcresolver, &aMiddlePart );
+
+#ifndef RD_JAVA_OMA_DRM_V2
+ // if opening is failed, it might be DRM file, trying it
+ if (!player)
+ {
+ player = TryOpenDRMFileL(aMiddlePart);
+ }
+#endif // RD_JAVA_OMA_DRM_V2
+
+ }
+ else
+ {
+ player = CreatePlayerL(emcresolver);
+ }
+
+ CleanupStack::PopAndDestroy(emcresolver);
+ LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCPlayerFactory::CreatePlayerL aMiddlePart ok");
+ return player;
+}
+
+#ifndef RD_JAVA_OMA_DRM_V2
+CMMAPlayer* CMMAEMCPlayerFactory::TryOpenDRMFileL(const TDesC& aFileName)
+{
+ // we are most likely going to play this file
+ ContentAccess::TIntent intent = ContentAccess::EPlay;
+
+ CContent* contentObj = CContent::NewL(aFileName);
+ CleanupStack::PushL(contentObj);
+ CData* dataObj = contentObj->OpenContentL(intent);
+ CleanupStack::PushL(dataObj);
+ User::LeaveIfError(dataObj->EvaluateIntent(intent));
+ TBuf8<KMaxName> mimeType;
+ CMMAPlayer* player = NULL;
+ if (dataObj->GetMimeTypeL(mimeType))
+ {
+ // we use 16bit mimeType
+ HBufC* mimeTypeBuf = HBufC::NewLC(mimeType.Length());
+ mimeTypeBuf->Des().Copy(mimeType);
+ player = CreatePlayerL(*mimeTypeBuf, &aFileName);
+ CleanupStack::PopAndDestroy(mimeTypeBuf);
+ }
+ CleanupStack::PopAndDestroy(2); //dataObj, contentObj
+ return player;
+}
+#endif // RD_JAVA_OMA_DRM_V2
+
+CMMAPlayer* CMMAEMCPlayerFactory::CreatePlayerL(const TDesC8& /*aHeaderData*/)
+{
+ LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCPlayerFactory::CreatePlayerL header data +");
+
+ return (CMMAPlayer*)NULL;
+}
+
+void CMMAEMCPlayerFactory::GetSupportedContentTypesL(const TDesC& aProtocol,
+ CDesC16Array& aMimeTypeArray)
+{
+ //CMMAEMCResolver class should contain the constant array of all supported mimetype defined in EMC api MimeTypes.h
+ if (!IsSupportedProtocolL(aProtocol))
+ {
+ return;
+ }
+ CMMAEMCResolver* emcresolver = CMMAEMCResolver::NewLC();
+ emcresolver->GetSupportedContentTypesL(aMimeTypeArray);
+
+ CleanupStack::PopAndDestroy(emcresolver);
+}
+
+void CMMAEMCPlayerFactory::GetSupportedProtocolsL(const TDesC& aContentType,
+ CDesC16Array& aProtocolArray)
+{
+ // Check that this is supported content type
+ if (!IsSupportedContentTypeL(aContentType))
+ {
+ return;
+ }
+ aProtocolArray.AppendL(KMMAHttpProtocol);
+ aProtocolArray.AppendL(KMMAHttpsProtocol);
+}
+
+TBool CMMAEMCPlayerFactory::IsSupportedProtocolL(const TDesC& aProtocol)
+{
+ // With null desc we are getting all
+ if (aProtocol == KNullDesC)
+ {
+ return ETrue;
+ }
+ CDesC16ArraySeg* protocols = new(ELeave) CDesC16ArraySeg(KGranularity);
+ CleanupStack::PushL(protocols);
+ GetSupportedProtocolsL(KNullDesC, *protocols);
+ TInt pos = KErrNotFound;
+ // Find returns 0 if there contentType is found
+ TBool retValue = (protocols->Find(aProtocol, pos) == 0);
+ CleanupStack::PopAndDestroy(protocols);
+ return retValue;
+}
+
+TBool CMMAEMCPlayerFactory::IsSupportedContentTypeL(const TDesC& aContentType)
+{
+ // With null desc we are getting all
+ if (aContentType == KNullDesC)
+ {
+ return ETrue;
+ }
+
+ // Content type application/x-ext-packetsrc
+ // must not be supported at the moment.
+ if (aContentType == KContentTypePacketSrcNotIncluded)
+ {
+ return EFalse;
+ }
+
+ CDesC16ArraySeg* contentTypes = new(ELeave) CDesC16ArraySeg(KGranularity);
+ CleanupStack::PushL(contentTypes);
+ GetSupportedContentTypesL(KNullDesC, *contentTypes);
+ TInt pos = KErrNotFound;
+ // Find returns 0 if there contentType is found
+ TBool retValue = (contentTypes->Find(aContentType, pos) == 0);
+ CleanupStack::PopAndDestroy(contentTypes);
+ return retValue;
+}
+
+// END OF FILE