diff -r 000000000000 -r ff3acec5bc43 mpxmusicplayer/commonui/src/mpxdrmuihelper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxmusicplayer/commonui/src/mpxdrmuihelper.cpp Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,536 @@ +/* +* Copyright (c) 2006 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: Helper utility for Common UI +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +// S60 Specific + +#include +#include "mpxdrmuihelper.h" +#include "mpxcommonuihelper.h" +#include "mpxlog.h" + +#ifdef CAMESE_IN_DRM_UTILITY +#include +#include +#include +#include +#include +#include +#else +#include +#endif + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CMPXDrmUiHelper* CMPXDrmUiHelper::NewL( CMPXCommonUiHelper* aHelper ) + { + CMPXDrmUiHelper* self = new ( ELeave ) CMPXDrmUiHelper( aHelper ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::ConstructL() + { + CCoeEnv* coeEnv = CEikonEnv::Static(); +#ifdef CAMESE_IN_DRM_UTILITY + iDrmUiHandler = DRM::CDrmUiHandling::NewL(); +#else + iDrmHelper = CDRMHelper::NewL( *coeEnv ); +#endif + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CMPXDrmUiHelper::CMPXDrmUiHelper( CMPXCommonUiHelper* aHelper ) + : iCommonUiHelper( aHelper ) + { + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CMPXDrmUiHelper::~CMPXDrmUiHelper() + { +#ifdef CAMESE_IN_DRM_UTILITY + delete iDrmUiHandler; +#else + delete iDrmHelper; +#endif + } + +// ----------------------------------------------------------------------------- +// Handles displaying the error message for given error code +// according to the media object provided +// ----------------------------------------------------------------------------- +// +TInt CMPXDrmUiHelper::HandleDrmErrorL( + TInt aError, + const CMPXMedia* aMedia, /*=NULL*/ + RFile* aFile /*=NULL*/ ) + { + MPX_DEBUG2("CMPXDrmUiHelper::HandleErrorL(%d) entering", aError); + + TInt ret( KErrNone ); + if ( aMedia ) + { + if ( aMedia->IsSupported( KMPXMediaDrmType ) ) + { +#ifdef CAMESE_IN_DRM_UTILITY + // all cases will be handled with same logic now + ret = HandleOMAErrorL( aError, aMedia, aFile ); +#else + TMPXMediaDrmType type( + aMedia->ValueTObjectL( KMPXMediaDrmType )); + + if ( EMPXDrmTypeOMA == type ) + { + ret = HandleOMAErrorL( aError, aMedia, aFile ); + } + else if ( EMPXDrmTypeWMA == type ) + { + ret = HandleWMAErrorL( aError, aMedia, aFile ); + } +#endif + } + } + + MPX_DEBUG2("CMPXDrmUiHelper::HandleErrorL() exiting, returning %d", ret); + return ret; + } + + +// ----------------------------------------------------------------------------- +// Handles OMA specific error messages +// ----------------------------------------------------------------------------- +// +TInt CMPXDrmUiHelper::HandleOMAErrorL( + TInt aError, + const CMPXMedia* aMedia, + RFile* aFile ) + { + MPX_DEBUG2("CMPXDrmUiHelper::HandleOMAErrorL(%d) entering", aError); + HBufC8* previewUrl = NULL; + + // Get filename of media + TInt ret( KErrNone ); + TFileName filename( KNullDesC ); + if ( aMedia->IsSupported( KMPXMediaGeneralUri ) ) + { + filename = aMedia->ValueText( KMPXMediaGeneralUri ); + } + + TBool useFile( EFalse ); + if ( aFile ) + { + if ( aFile->SubSessionHandle() ) + { + useFile = ETrue; + } + } +#ifdef CAMESE_IN_DRM_UTILITY + switch ( aError ) + { + case KMPXRightsAboutToExpire: + case KErrCANoRights: + { + iRightsValid = EFalse; + + // This will ask from user if new rights are acquired + if ( useFile ) + { + iDrmUiHandler->CheckRightsAmountL( *aFile, + ContentAccess::EPlay, this ); + } + else if ( filename.CompareF( KNullDesC ) != 0 ) + { + ContentAccess::TVirtualPathPtr virtualPath( filename, ContentAccess::KDefaultContentObject ); + ContentAccess::CData* content( NULL ); + TRAPD( r, content = ContentAccess::CData::NewL( + virtualPath, ContentAccess::EPeek, + ContentAccess::EContentShareReadWrite ) ); + if ( r == KErrInUse ) + { + content = ContentAccess::CData::NewL( virtualPath, ContentAccess::EPeek, + ContentAccess::EContentShareReadOnly ); + } + else + { + User::LeaveIfError( r ); + } + CleanupStack::PushL( content ); + + iDrmUiHandler->CheckRightsAmountL( *content, + ContentAccess::EPlay, this ); + + CleanupStack::PopAndDestroy( content ); + } + if( !iRightsValid ) + { + // Rights still not valid. Cancel the operation. + ret = KErrCancel; + } + break; + } + default: + { + if ( useFile ) + { + DRM::MDrmErrorHandling& errorHandler = iDrmUiHandler->GetErrorHandler(); + errorHandler.HandleErrorL( *aFile, ContentAccess::EPlay, aError, NULL ); + } + else if ( filename.CompareF( KNullDesC ) != 0 ) + { + ContentAccess::TVirtualPathPtr virtualPath( filename, ContentAccess::KDefaultContentObject ); + ContentAccess::CData* content( NULL ); + TRAPD( r, content = ContentAccess::CData::NewL( + virtualPath, ContentAccess::EPeek, + ContentAccess::EContentShareReadWrite ) ); + if ( r == KErrInUse ) + { + content = ContentAccess::CData::NewL( virtualPath, ContentAccess::EPeek, + ContentAccess::EContentShareReadOnly ); + } + else + { + User::LeaveIfError( r ); + } + CleanupStack::PushL( content ); + + DRM::MDrmErrorHandling& errorHandler = iDrmUiHandler->GetErrorHandler(); + errorHandler.HandleErrorL( *content, ContentAccess::EPlay, aError, NULL ); + + CleanupStack::PopAndDestroy( content ); + } + break; + } +#else + switch ( aError ) + { + case KMPXRightsAboutToExpire: + { + if ( useFile ) + { + ret = iDrmHelper->CheckRightsAmountL( *aFile ); + } + else if ( filename.CompareF( KNullDesC ) != 0 ) + { + ret = iDrmHelper->CheckRightsAmountL( filename ); + } + break; + } + default: + { + if ( useFile ) + { + ret = iDrmHelper->HandleErrorOrPreviewL( aError, *aFile, previewUrl ); + if( previewUrl ) + { + delete previewUrl; + } + } + else if ( filename.CompareF( KNullDesC ) != 0 ) + { + ret = iDrmHelper->HandleErrorOrPreviewL( aError, filename, previewUrl ); + if( previewUrl ) + { + delete previewUrl; + } + } + break; + } + +#endif + } + + MPX_DEBUG2("CMPXDrmUiHelper::HandleOMAErrorL(%d) exiting, returning %d", ret); + return ret; + } + +// ----------------------------------------------------------------------------- +// Handles WMA specific error messages +// ----------------------------------------------------------------------------- +// +TInt CMPXDrmUiHelper::HandleWMAErrorL( + TInt aError, + const CMPXMedia* aMedia, + RFile* /*aFile*/ ) + { + MPX_DEBUG2("CMPXDrmUiHelper::HandleWMAErrorL(%d) entering", aError); + + TInt ret( KErrNone ); + HBufC* notificationText( NULL ); + + // Get filename of media + TFileName filename( KNullDesC ); + if ( aMedia->IsSupported( KMPXMediaGeneralUri ) ) + { + filename = aMedia->ValueText( KMPXMediaGeneralUri ); + } + + switch ( aError ) + { + case KMPXRightsAboutToExpire: + { +/* + if ( aMedia->IsSupported( EMPXMediaDrmRightsType )) + { + TMPXMediaDrmRightsType type = + aMedia->ValueTObject( + EMPXMediaDrmRightsType ); + switch ( type ) + { + case EMPXDrmRightsTypeTime: + { + TTime endTime = *aMedia->Value( + EMPXMediaDrmEndTime ); + TTime currentTime; + currentTime.HomeTime(); + TTimeIntervalDays daysRemain = + endTime.DaysFrom( currentTime ); + TInt days( daysRemain.Int() ); + if ( days < 1 ) + { + notificationText = StringLoader::LoadLC( + R_MPX_CUI_WMDRM_RIGHTS_ABOUT_EXPIRE_NOTIFICATION ); + } + else if ( days == 1 ) + { + notificationText = StringLoader::LoadLC( + R_MPX_CUI_WMDRM_RIGHTS_ABOUT_EXPIRE_ONE_DAY_NOTIFICATION ); + } + else + { + notificationText = StringLoader::LoadLC( + R_MUSICPLAYER_CUI_WMDRM_RIGHTS_ABOUT_EXPIRE_MULTIPLE_DAY_NOTIFICATION ); + } + break; + } // end case EMPXDrmRightsTypeTime + case EMPXDrmRightsTypeCount: + case EMPXDrmRightsTypeTimeCount: + { + TUint32 count( + aMedia->ValueTObject( + EMPXMediaDrmCount )); + if ( count <= KMPXWmaDrmAboutToExpireCount ) + { + if ( count == 1 ) + { + notificationText = StringLoader::LoadLC( + R_MUSICPLAYER_CUI_WMDRM_RIGHTS_ACTIVATION_KEY_ONE_COUNT_NOTIFICATION ); + } + else if ( count > 1 ) + { + notificationText = StringLoader::LoadLC( + R_MUSICPLAYER_CUI_WMDRM_RIGHTS_ACTIVATION_KEY_MORE_THAN_ONE_COUNT_NOTIFICATION ); + } + } + } // end case EMPXDrmRightsTypeCount, EMPXDrmRightsTypeTimeCount + default: + { + // do nothing + break; + } + } + } +*/ + } // end case KMPXRightsAboutToExpire + case KErrCANotSupported: + case KErrCANoPermission: + case KErrCANoRights: +// case KErrCANoAgent: +// case KErrCAOutOfRange: +// case KErrCAPendingRights: +// case KErrCASizeNotDetermined: +// case KErrCANewFileHandleRequired: + { + if ( filename.CompareF( KNullDesC ) != 0 ) + { + TParsePtrC parse( filename ); + notificationText = StringLoader::LoadLC( + R_MPX_DRM_EXPIRED_PLAYBACK, parse.Name() ); + iCommonUiHelper->DisplayInfoNoteL( *notificationText ); + CleanupStack::PopAndDestroy( notificationText ); + notificationText = NULL; + } + break; + } + default: + { + break; + } + } + + MPX_DEBUG2("CMPXDrmUiHelper::HandleWMAErrorL(%d) exiting, returning %d", ret); + return ret; + } +#ifdef CAMESE_IN_DRM_UTILITY +// ---------------------------------------------------------------------------- +// Called when valid rights are found +// ---------------------------------------------------------------------------- +// +DRM::TCheckRightsAction CMPXDrmUiHelper::RightsLeft( + TInt /*aOperationId*/, + TBool /*aUnconstrained*/, + TTimeIntervalSeconds /*aTime*/, + TInt /*aCounts*/, + TTimeIntervalSeconds /*aAccumulated*/ ) + { + iRightsValid = ETrue; + return DRM::EUHCheckRightsActionIgnore; + } + +// ---------------------------------------------------------------------------- +// Called when there is no valid rights +// ---------------------------------------------------------------------------- +// +DRM::TCheckRightsAction CMPXDrmUiHelper::RightsNotValid( + TInt /*aOperationId*/, + DRM::TCheckRightsStatus /*aRightsStatus*/, + TInt /*aReason*/ ) + { + iRightsValid = EFalse; + + // DrmUiHandling will ask for more rights + return DRM::EUHCheckRightsActionDefault; + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +DRM::TEmbeddedPreviewAction CMPXDrmUiHelper::EmbeddedPreviewAvailable( + TInt /*aOperationId*/, + const TDesC& /*aUniqueId*/, + TInt /*aRightsStatus*/, + TInt /*aReason*/ ) + { + return DRM::EUEmbeddedPreviewActionIgnore; + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +DRM::TPreviewRightsAction CMPXDrmUiHelper::PreviewRightsUrlAvailable( + TInt /*aOperationId*/, + const TDesC& /*aPreviewRightsUrl*/, + TInt /*aRightsStatus*/, + TInt /*aReason*/ ) + { + return DRM::EUPreviewRightsActionIgnore; + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +DRM::TSilentRightsAction CMPXDrmUiHelper::SilentRightsUrlAvailable( + TInt /*aOperationId*/, + const TDesC& /*aSilentRightsUrl*/, + TInt /*aRightsStatus*/, + TInt /*aReason*/ ) + { + return DRM::EUSilentRightsActionDefault; + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +DRM::TRightsAction CMPXDrmUiHelper::RightsUrlAvailable( + TInt /*aOperationId*/, + const TDesC& /*aRightsUrl*/, + TInt /*aRightsStatus*/, + TInt /*aReason*/, + TInt /*aUrlType*/ ) + { + return DRM::EURightsActionDefault; + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::PreviewRightsAvailable( + TInt /*aOperationId*/, + TInt /*aError*/ ) + { + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::SilentRightsAvailable( + TInt /*aOperationId*/, + TInt /*aError*/ ) + { + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::RightsAvailable( + TInt /*aOperationId*/, + TInt /*aError*/ ) + { + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::PlayEmbeddedPreviewSelected( + TInt /*aOperationId*/, + const TDesC& /*aUniqueId*/ ) + { + } + +// ---------------------------------------------------------------------------- +// Unused observation method +// ---------------------------------------------------------------------------- +// +void CMPXDrmUiHelper::OperationCompleted( + TInt /*aOperationId*/, TInt /*aOperationStatus*/ ) + { + } +#endif +// End of File