profilesservices/ProfileEngine/WrapperSrc/CProEngToneHandlerDrmFull.cpp
changeset 0 8c5d936e5675
child 17 3b47783fdf16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/ProfileEngine/WrapperSrc/CProEngToneHandlerDrmFull.cpp	Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2002-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: Implementation of the CProEngToneHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CProEngToneHandler.h"
+
+#include    <DRMHelper.h>
+#include    <DRMCommon.h>
+#include    <ProEngWrapper.rsg>
+
+#include <caf/caf.h>
+
+
+// ============================ LOCAL FUNCTIONS ================================
+
+CDRMHelper::TDRMHelperAutomatedType SettingIdToAutomatedType( TProfileSettingId aSettingId )
+    {
+    switch( aSettingId )
+        {
+        case EProfileSettingIdRingingTone:
+        case EProfileSettingIdRingingTone2:
+            {
+            return CDRMHelper::EAutomatedTypeRingingTone;
+            }
+        case EProfileSettingIdMsgTone:
+            {
+            return CDRMHelper::EAutomatedTypeMessageAlert;
+            }
+        case EProfileSettingIdEmailTone:
+            {
+            return CDRMHelper::EAutomatedTypeEmailAlert;
+            }
+        default:
+            {
+            return CDRMHelper::EAutomatedTypeOther;
+            }
+        }
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::DrmConstructL
+// 2nd phase construct for DRM objects
+// -----------------------------------------------------------------------------
+//
+void CProEngToneHandler::DrmConstructL()
+    {
+    iDrmCommon = DRMCommon::NewL();
+    iDrmHelper = CDRMHelper::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::ReleaseDrm
+// Destructor for DRM objects
+// -----------------------------------------------------------------------------
+//
+void CProEngToneHandler::ReleaseDrm()
+    {
+    delete iDrmHelper;
+    iDrmHelper = NULL;
+    delete iDrmCommon;
+    iDrmCommon = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::CheckProtectedFileL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngToneHandler::CheckProtectedFileL( const TDesC& aFileName )
+    {
+    DRMCommon::TContentProtection protection;
+    HBufC8* mimeType = NULL; // ignored
+    HBufC8* contentUri = NULL;
+    TUint dataLength; // ignored
+    TInt err = iDrmCommon->GetFileInfo( aFileName, protection, mimeType,
+                                        contentUri, dataLength );
+    delete mimeType;
+    if( err )
+        {
+        delete contentUri;
+        User::Leave( err );
+        }
+    CleanupStack::PushL( contentUri );
+
+    TInt result( KErrGeneral );
+    CDRMRights* rights = NULL;
+    err = iDrmCommon->GetActiveRights( *contentUri, DRMCommon::EPlay, rights );
+
+    CleanupStack::PopAndDestroy( contentUri );
+
+    if( rights == NULL )
+        {
+        if( err == DRMCommon::ENoRights )
+            {
+            // Handle "No rights" situation here
+            iDrmHelper->HandleErrorL( DRMCommon::ENoRights, aFileName );
+            return result;
+            }
+        else
+            {
+            User::Leave( KErrGeneral );
+            }
+        }
+
+    CleanupStack::PushL( rights );
+    
+	switch ( err )
+		{
+		case CDRMRights::EFullRights: // Fall through
+		case CDRMRights::ERestrictedRights:
+			{
+			CDRMRights::TRestriction restriction; // ignore
+			CDRMRights::TExpiration expiration;
+			TUint32 constType;
+			
+			rights->GetRightsInfo( DRMCommon::EPlay, restriction, // ignore return
+                                   expiration, constType );       // value
+		
+            // This is CFM protected file, ringingtone is set to "no"
+            if ( ( rights->GetPermission().iInfoBits & ENoRingingTone )
+                // This is normal DRM protected count-based tone
+                || ( constType & CDRMRights::ECountBased ) )
+                    {
+                    ShowErrorNoteL( R_PROENG_TEXT_DRM_PREV_RIGHTS_SET );
+                    }		
+                else
+                    {
+                    switch ( expiration )
+                        {
+                        case CDRMRights::EValidRights:
+                            {
+                            result = KErrNone;
+                            break;
+                            }
+
+                        case CDRMRights::EFutureRights:
+                            {
+                            iDrmHelper->HandleErrorL( DRMCommon::ENoRights,
+                                                      aFileName );
+                            break;
+                            }
+
+                        case CDRMRights::EExpiredRights: 
+                            {
+                            iDrmHelper->HandleErrorL( DRMCommon::ERightsExpired,
+                                                      aFileName );
+                            break;
+                            }
+
+                        default:
+                            {
+                            break;
+                            }
+                        }	
+
+                    }
+				
+
+			break;
+			}
+
+		case CDRMRights::EPreviewRights:
+			{
+			ShowErrorNoteL( R_PROENG_TEXT_DRM_PREV_RIGHTS_SET );
+			break;
+			}
+
+		case DRMCommon::ENoRights:
+			{
+			iDrmHelper->HandleErrorL( DRMCommon::ENoRights, aFileName );
+			break;
+			}
+
+		default:
+			{
+			break;
+			}
+
+		}
+   
+    CleanupStack::PopAndDestroy( rights );
+
+	return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::CanSetAutomated
+// -----------------------------------------------------------------------------
+//
+TBool CProEngToneHandler::CanSetAutomated( const TDesC& aFileName )
+    {
+    TBool canSetAutomated( EFalse );
+    return
+        ( iDrmHelper->CanSetAutomated( aFileName, canSetAutomated ) == KErrNone
+        && canSetAutomated );
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::AskAutomated
+// -----------------------------------------------------------------------------
+//
+TInt CProEngToneHandler::AskAutomated( const TDesC& aFileName )
+    {
+    return iDrmHelper->ShowAutomatedNote( aFileName );
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::SetAutomated
+// -----------------------------------------------------------------------------
+//
+TInt CProEngToneHandler::SetAutomated( TProfileSettingId aSettingId,
+                                       const TDesC& aFileName )
+    {
+    TInt err = KErrNone;
+
+    TRAP_IGNORE( err = SetAutomatedL( aSettingId, aFileName ) );
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::SetAutomatedL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngToneHandler::SetAutomatedL( TProfileSettingId aSettingId,
+                                       const TDesC& aFileName )
+    {
+    iDrmHelper->SetAutomatedType( SettingIdToAutomatedType( aSettingId ) );
+    TInt err( iDrmHelper->SetAutomatedSilent( aFileName, EFalse ) );
+    if( err == KErrNone )
+        {
+        using namespace ContentAccess;
+       	TVirtualPathPtr path( aFileName, KDefaultContentObject );
+        CData* data = CData::NewLC( path, EContentShareReadWrite );
+        err = data->ExecuteIntent( EPlay );
+        CleanupStack::PopAndDestroy( data );
+        // According to Risto Vilkman from DRM, KErrAccessDenied
+        // can be ignored at this point, since if
+        // CanSetAutomated says the tone is OK, it's OK.
+        if( err == KErrAccessDenied )
+        	{
+        	err = KErrNone;
+        	}
+        }
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::RemoveAutomated
+// -----------------------------------------------------------------------------
+//
+void CProEngToneHandler::RemoveAutomated( const TDesC& aFileName )
+    {
+    iDrmHelper->RemoveAutomatedPassive( aFileName ); // ignore return value
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::IsProtected
+// -----------------------------------------------------------------------------
+//
+TBool CProEngToneHandler::IsProtected( const TDesC& aFileName ) const
+    {
+    TBool result = EFalse;
+    TRAP_IGNORE( result = IsProtectedL( aFileName ) );
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CProEngToneHandler::IsProtectedL
+// -----------------------------------------------------------------------------
+//
+TBool CProEngToneHandler::IsProtectedL( const TDesC& aFileName ) const
+    {
+    TInt isProtected( EFalse );
+   	ContentAccess::TVirtualPathPtr path( aFileName,
+   						ContentAccess::KDefaultContentObject );
+   	CData* data = CData::NewLC( path, EContentShareReadWrite );
+   	TInt result = data->GetAttribute( EIsProtected, isProtected );
+   	CleanupStack::PopAndDestroy(); // data
+
+    return( ( result == DRMCommon::EOk ) && isProtected );
+    }
+
+//  End of File