--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/tms/tmsserver/src/tmsrtcontainer.cpp Fri Apr 16 15:29:42 2010 +0300
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2010 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: Class representing ringing tone
+ *
+ */
+
+// INCLUDE FILES
+#include <apgcli.h>
+#include <DRMHelper.h>
+#include <bldvariant.hrh>
+//#include <pathinfo.h>
+#include "tmsrtcontainer.h"
+
+using namespace TMS;
+
+// CONSTANTS
+// Rich audio file MIME types
+_LIT(KAac, "audio/aac");
+_LIT(KMp3, "audio/mp3");
+_LIT(KMpeg, "audio/mpeg");
+_LIT(K3gpp, "audio/3gpp");
+_LIT(KMp4, "audio/mp4");
+_LIT(KAmrWb, "audio/amr-wb");
+_LIT(KWavX, "audio/x-wav");
+_LIT(KWav, "audio/wav");
+// Rich video file MIME types
+_LIT(KV3gpp, "video/3gpp");
+_LIT(KVMp4, "video/mp4");
+_LIT(KV3gpp2, "video/3gpp2");
+// Used in CPhoneRingingTone
+_LIT(KPhoneRingingToneDriveZ, "z:");
+#ifdef RD_VIDEO_AS_RINGING_TONE
+_LIT(KPhoneRingingToneVideoMime, "video/*");
+_LIT(KPhoneRingingToneRealVideoMime, "*realmedia");
+#endif
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::TMSRtContainer
+// C++ default constructor
+// -----------------------------------------------------------------------------
+//
+TMSRtContainer::TMSRtContainer(TBool aDrmInPlayback) :
+ iDrmInPlayback(aDrmInPlayback)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::ConstructL
+// Symbian 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+void TMSRtContainer::ConstructL(const TDesC& aFileName)
+ {
+ iFileName = aFileName.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+TMSRtContainer* TMSRtContainer::NewL(const TDesC& aFileName,
+ TBool aDrmInPlayback)
+ {
+ TMSRtContainer* self = new (ELeave) TMSRtContainer(aDrmInPlayback);
+ CleanupStack::PushL(self);
+ self->ConstructL(aFileName);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+TMSRtContainer::~TMSRtContainer()
+ {
+ delete iFileName;
+ delete iMimeType;
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::SetFileName
+// -----------------------------------------------------------------------------
+//
+void TMSRtContainer::SetFileName(const TDesC& aFileName)
+ {
+ delete iFileName;
+ iFileName = aFileName.Alloc();
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::FileName
+// -----------------------------------------------------------------------------
+//
+const TDesC& TMSRtContainer::FileName() const
+ {
+ // iFileName is never NULL
+ return *iFileName;
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::MimeType
+// -----------------------------------------------------------------------------
+//
+const TDesC& TMSRtContainer::MimeType() const
+ {
+ if (iMimeType)
+ {
+ return *iMimeType;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::IsVideoRingingTone
+// -----------------------------------------------------------------------------
+//
+TBool TMSRtContainer::IsVideoRingingTone()
+ {
+#ifdef RD_VIDEO_AS_RINGING_TONE
+ if (RefreshMime() != KErrNone)
+ {
+ // try to handle as audio
+ return EFalse;
+ }
+
+ TBool isVideo(EFalse);
+
+ if (iMimeType && iMimeType->MatchF(KPhoneRingingToneVideoMime)
+ != KErrNotFound)
+ {
+ isVideo = ETrue;
+ }
+ else if (iMimeType && iMimeType->MatchF(KPhoneRingingToneRealVideoMime)
+ != KErrNotFound)
+ {
+ isVideo = ETrue;
+ }
+
+ if (isVideo)
+ {
+ if (IsFileInRom() && !IsFileInVideoDirectory())
+ {
+ // For ROM files check also location, because
+ // MIME check is not fully reliable.
+ isVideo = EFalse;
+ }
+ }
+
+ return isVideo;
+
+#else
+ // if extended security -> refresh MIME
+ if (iDrmInPlayback)
+ {
+ RefreshMime();
+ }
+
+ return EFalse;
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::IsFileDrmProtected
+// -----------------------------------------------------------------------------
+//
+TBool TMSRtContainer::IsFileDrmProtected() const
+ {
+ const TDesC& type = MimeType();
+
+ if (type == KAac || type == KMp3 || type == KMpeg || type == K3gpp ||
+ type == KMp4 || type == KAmrWb || type == KWavX || type == KWav ||
+ type == KV3gpp || type == KVMp4 || type == KV3gpp2)
+ {
+ ContentAccess::CContent* content = NULL;
+ TRAPD(err, content = ContentAccess::CContent::NewL(*iFileName));
+ if (err == KErrNone && content)
+ {
+ TInt drmProtected(0);
+ content->GetAttribute(ContentAccess::EIsProtected, drmProtected);
+ delete content;
+ return drmProtected;
+ }
+ }
+
+ return ETrue; // Other MIMEs can be played without DRM check.
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::IsFileInRom
+// -----------------------------------------------------------------------------
+//
+TBool TMSRtContainer::IsFileInRom() const
+ {
+ TParsePtrC parsedName(*iFileName);
+
+ // Files on ROM don't need to be checked for DRM
+ if (parsedName.Drive().CompareF(KPhoneRingingToneDriveZ) == 0)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::IsFileInVideoDirectory
+// -----------------------------------------------------------------------------
+//
+TBool TMSRtContainer::IsFileInVideoDirectory() const
+ {/*
+ TParsePtrC parsedName(*iFileName);
+
+ if (PathInfo::PathType(parsedName.DriveAndPath()) == PathInfo::EVideosPath)
+ {
+ return ETrue;
+ }
+ else
+ {*/
+ return EFalse;
+ //}
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::RefreshMime
+// -----------------------------------------------------------------------------
+//
+TInt TMSRtContainer::RefreshMime()
+ {
+ TRAPD(err, RefreshMimeL());
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// TMSRtContainer::RefreshMimeL
+// -----------------------------------------------------------------------------
+//
+void TMSRtContainer::RefreshMimeL()
+ {
+ RApaLsSession apaLsSession;
+ User::LeaveIfError(apaLsSession.Connect());
+ CleanupClosePushL(apaLsSession);
+ TUid dummyUid = {0};
+ TDataType dataType(dummyUid);
+ User::LeaveIfError(apaLsSession.AppForDocument(*iFileName, dummyUid,
+ dataType));
+ CleanupStack::PopAndDestroy(); // CleanupClosePushL
+ delete iMimeType;
+ iMimeType = NULL;
+ iMimeType = dataType.Des().AllocL();
+ }
+
+// End of File