--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshui/src/musuiclipsharingcontroller.cpp Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,1166 @@
+/*
+* Copyright (c) 2005 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: Application's UI class.
+*
+*/
+
+
+
+#include "musuiclipsharingcontroller.h"
+#include "musuicallbackservice.h"
+#include "musuieventobserver.h"
+#include "musuisharingobserver.h"
+#include "musuisendobserver.h"
+#include "musuiclipsharingobserver.h"
+#include "musuidialogutil.h"
+#include "musengclipsession.h"
+#include "mussettings.h"
+#include "mussettingskeys.h"
+#include "musuiresourcehandler.h"
+#include "musui.hrh"
+#include "muslogger.h" // debug logging
+#include "musuiactivetimer.h"
+#include "musuigeneralview.h"
+
+#include <musui.rsg>
+#include <StringLoader.h>
+#include <AknUtils.h>
+
+#include <badesca.h>
+#include <avkon.hrh>
+
+// CONSTANTS
+const TInt KMusTimeToCloseAfterClipEndedStandard = 60 * 1000000; // 60 seconds
+const TInt KMusTimeToCloseAfterClipEndedOpVariant = 1 * 1000000; // 1 second
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiClipSharingController* CMusUiClipSharingController::NewL(
+ MMusUiEventObserver& aEventObserver,
+ MMusUiSharingObserver& aSharingObserver,
+ MMusUiSendObserver& aSendObserver,
+ MMusUiClipSharingObserver& aClipObserver,
+ const TRect& aRect )
+ {
+ CMusUiClipSharingController* self =
+ new( ELeave ) CMusUiClipSharingController( aEventObserver,
+ aSharingObserver,
+ aSendObserver,
+ aClipObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiClipSharingController::~CMusUiClipSharingController()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::~CMusUiClipSharingController" );
+ delete iCloseTimer;
+ DeleteEngineSession();
+ delete iFileName;
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::~CMusUiClipSharingController" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiClipSharingController::CMusUiClipSharingController(
+ MMusUiEventObserver& aEventObserver,
+ MMusUiSharingObserver& aSharingObserver,
+ MMusUiSendObserver& aSendObserver,
+ MMusUiClipSharingObserver& aClipObserver )
+ :CMusUiSendController( aEventObserver, aSharingObserver, aSendObserver ),
+ iClipObserver( aClipObserver )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::ConstructL( const TRect& aRect )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::ConstructL" );
+
+ CMusUiSendController::ConstructL(); // Base class construction
+
+ iRect = aRect;
+ iSession = CMusEngClipSession::NewL( iRect,
+ *this,
+ *this,
+ *this,
+ iSipProfileId );
+ iSession->SetAudioRoutingObserver( this );
+
+ if ( iSession->AudioRoutingCanBeChanged() )
+ {
+ iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue );
+ }
+
+ if ( iVideoCodec && iVideoCodec->Length() > 0 )
+ {
+ iSession->SetSupportedVideoCodecListL( *iVideoCodec );
+ }
+
+ iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery );
+
+ iCloseTimer = CMusUiActiveTimer::NewL( this );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::ConstructL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::HandleAsyncEventL( TMusUiAsyncEvent aEventId )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleAsyncEventL" );
+ switch ( aEventId )
+ {
+ case EMusUiAsyncStartMediaGallery:
+ {
+ iTranscode = EFalse;
+ iTranscodingGoing = EFalse;
+
+ if ( !iSession )
+ {
+ iSession = CMusEngClipSession::NewL( iRect,
+ *this,
+ *this,
+ *this,
+ iSipProfileId );
+ iSession->SetAudioRoutingObserver( this );
+ }
+
+ // Do fetching guarded. If registration completes during fetching,
+ // there is no need to do anything.
+ iFileFetchingOngoing = ETrue;
+ iClipObserver.RunFetchDialogL();
+ iFileFetchingOngoing = EFalse;
+
+ TRAPD( error,
+ iSession->SetClipL( *iFileName ) )
+ MUS_LOG_TDESC( "mus: [MUSUI ] File name: ",
+ iFileName->Des() )
+ if ( error == KErrNone)
+ {
+ if ( iSession->AudioRoutingCanBeChanged() )
+ {
+ iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue );
+ }
+ iClipEnded = EFalse;
+ StartInvitationL();
+ }
+ else if ( error == KErrPermissionDenied )
+ {
+ MusUiDialogUtil::ShowInformationDialogL(
+ R_MUS_VIEW_DRM_INFO_SEND_FORBID );
+ DeleteEngineSession();
+ delete iFileName;
+ iFileName = NULL;
+ iSession = CMusEngClipSession::NewL( iRect,
+ *this,
+ *this,
+ *this,
+ iSipProfileId );
+ iSession->SetAudioRoutingObserver( this );
+ if ( iSession->AudioRoutingCanBeChanged() )
+ {
+ iSession->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue );
+ }
+ iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery );
+ }
+ else
+ {
+ HandleExitL();
+ }
+
+ break;
+ }
+ case EMusUiAsyncStartTranscoding:
+ {
+ // Parse Target Filename for the transcoding result
+ // and start transcoding:
+ //iSession->TranscodeL( VideoFileNameL() );
+ // Show progress dialog:
+ //iObserver->ShowTranscodingProgressDialogL();
+ iTranscodingGoing = ETrue;
+ break;
+ }
+
+ default:
+ {
+ // Not clip specific, let the base class handle
+ CMusUiSendController::HandleAsyncEventL( aEventId );
+ }
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleAsyncEventL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::DeleteEngineSession()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::DeleteEngineSession" );
+
+ CMusUiSendController::DeleteEngineSession();
+
+ // Cancel transcoding
+ if ( iSession && iTranscodingGoing )
+ {
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::DeleteEngineSession:\
+ Canceling transcoding..." );
+ DismissWaitDialog();
+ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT );
+ iSession->CancelTranscodeL() );
+ }
+
+ delete iSession;
+ iSession = NULL;
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::DeleteEngineSession" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusEngMceOutSession* CMusUiClipSharingController::EngineOutSession()
+ {
+ return iSession; // Clip session is CMusEngMceOutSession
+ }
+
+
+// -----------------------------------------------------------------------------
+// Handles status changes specific to sending sharing types.
+// Calls base class version for status changes that are not sending specific.
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::HandleChangedStatusL(
+ TMusAvailabilityStatus aStatus )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleChangedStatusL" )
+
+ switch( aStatus )
+ {
+ case EMultimediaSharingAvailable:
+ {
+ MUS_LOG( "mus: [MUSUI ] EMultimediaSharingAvailable" )
+
+ if ( iSipRegistrationPending )
+ {
+ iSipRegistrationPending = EFalse;
+
+ // If fecth dialog is still open, there is no need to do anything
+ if ( !iFileFetchingOngoing )
+ {
+ iSipRegistrationPending = EFalse;
+ // Set callback service, Call StartInvitationL when wait dialog dismissed
+ TRAPD( err, iSharingObserver.SetWaitDialogCallbackL(
+ &iWaitDialogCallback ) );
+ // Dismiss pending wait note
+ iSharingObserver.DismissWaitDialogL();
+ if ( err == KErrNotReady )
+ {
+ StartInvitationL();
+ }
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // Not clip specific, let the base class handle
+ CMusUiSendController::HandleChangedStatusL( aStatus );
+ break;
+ }
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleChangedStatusL" )
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::InviteL( const TDesC& aRecipient )
+ {
+ MUS_LOG_TDESC( "mus: [MUSUI ] -> CMusUiClipSharingController::InviteL:",
+ aRecipient );
+
+ // Registration must not be pending in this phase
+ __ASSERT_ALWAYS( !iSipRegistrationPending,
+ iEventObserver.HandleError( KErrNotReady ) );
+
+ delete iAddress;
+ iAddress = NULL;
+ iAddress = aRecipient.AllocL();
+
+
+ TRAPD( err, iSession->InviteL( aRecipient ) );
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::InviteL: After TRAPD" );
+
+ // If address is in wrong format, Manual Address Entry Dialog
+ // is displayed
+ if ( err != KErrNone )
+ {
+ DismissWaitDialog();
+ MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_LIVE_SHARING_VIEW_NOTE_INVITE_ERROR );
+ if ( ( ++iTriedInvitations < 2 ) && ( err == KErrArgument ) )
+ {
+ MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::InviteL: iTriedInvitations < 2" );
+ iManualAddressTyped = ETrue;
+ iResourceHandler->RequestKeypadL( ETrue );
+
+ // If the address has to be queried again...:
+ iTranscode = EFalse;
+
+ MUS_LOG_TDESC( "mus: [MUSUI ] CMusUiClipSharingController::InviteL: ",
+ iFileName->Des() )
+
+ iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal );
+ return;
+ }
+ else
+ {
+ MUS_LOG( "mus: [MUSUI ] CMusUiLiveSharingController::InviteL: ++iTriedInvitations > 1" );
+ DeleteEngineSession();
+ HandleExitL();
+ return;
+ }
+ }
+
+
+ if( iTranscode )
+ {
+ MUS_LOG( "mus: [MUSUI ] Starting transcode..." );
+ iTranscode = EFalse;
+ // Show progress dialog:
+ iClipObserver.ShowTranscodingProgressDialogL();
+ // Start transcoding
+ iTranscodingGoing = ETrue;
+
+ SetFileNameL( VideoFileNameL() );
+ TRAPD( err, iSession->TranscodeL( *iFileName ) );
+
+ if ( err != KErrNone )
+ {
+ MUS_LOG1( "mus: [MUSUI ] Transcoding failed: %d", err );
+ iTranscodingGoing = EFalse;
+ if ( err == KErrNotFound ) // No Video Editor Engine
+ {
+ DismissWaitDialog();
+ MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_LIVE_SHARING_VIEW_NOTE_TRANSCODING_NOT_SUPPORTED );
+ DeleteEngineSession();
+ iVideoToBeSaved = EFalse;
+ HandleExitL();
+ }
+ else
+ {
+ // Unable to convert clip, if transc. leaves.
+ // After note return back to the media gallery.
+ TranscodingFailed();
+ }
+ return;
+ }
+ }
+ else
+ {
+ SetConnectionInitialized( ETrue );
+ ShowInvitingWaitDialogL();
+ }
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::InviteL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::HandleSliderValueChangeL( TInt aNewLevel )
+ {
+ MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleSliderValueChangeL(%d)",
+ aNewLevel )
+
+ __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) );
+ __ASSERT_ALWAYS( iConnectionEstablished, User::Leave( KErrNotReady ) );
+
+ iSession->SetPositionL( TTimeIntervalSeconds( aNewLevel ) );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleSliderValueChangeL" )
+ }
+
+
+
+void CMusUiClipSharingController::OfferToolbarEventL( TInt aCommand )
+ {
+ MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::OfferToolbarEventL [%d]",
+ aCommand );
+
+ switch ( aCommand )
+ {
+ case EMusuiCmdToolbarPause:
+ {
+ HandleCommandL( EMusuiCmdViewPause );
+ iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPause,
+ EMusuiCmdToolbarUnPause,
+ ETrue );
+ break;
+ }
+ case EMusuiCmdToolbarUnPause:
+ {
+ HandleCommandL( EMusuiCmdViewContinue );
+ iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnPause,
+ EMusuiCmdToolbarPause,
+ ETrue );
+ break;
+ }
+ case EMusuiCmdToolbarFFRev:
+ {
+ iToolbarFFRevSelected = !iToolbarFFRevSelected;
+ iClipObserver.SetDurationValue( iSession->DurationL().Int() );
+ if ( iToolbarFFRevSelected )
+ {
+ iWasPlayingBeforeWinding = iSession->IsPlayingL();
+ PauseL();
+ }
+ else
+ {
+ StopWindingL();
+ if ( iWasPlayingBeforeWinding )
+ {
+ PlayL();
+ }
+ }
+// iClipObserver.SetDurationVisible();
+ iSharingObserver.HighlightSelectedToolbarItem( EMusuiCmdToolbarFFRev );
+ break;
+ }
+ default: // Not clip specific, let the base class handle
+ {
+ CMusUiEventController::OfferToolbarEventL( aCommand );
+ break;
+ }
+ }
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::OfferToolbarEventL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::HandleCommandL(TInt aCommand)
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::HandleCommandL" );
+
+ __ASSERT_ALWAYS( !ExitOccured(), User::Leave( KErrDied ) );
+
+ switch ( aCommand )
+ {
+ case EMusuiCmdViewPause:
+ {
+ PauseL();
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause );
+ break;
+ }
+ case EMusuiCmdViewContinue:
+ {
+ PlayL();
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPlay );
+ break;
+ }
+
+ case EMusuiCmdViewReplay:
+ {
+ if( !MUS_NO_TOOLBAR )
+ {
+ if (!AknLayoutUtils::PenEnabled())
+ {
+ iEventObserver.SetToolbarVisibility( ETrue );
+ }
+
+ if ( ClipEnded() )
+ {
+ iEventObserver.SetToolbarVisibility( ETrue );
+ // Simulate press of play in toolbar
+ OfferToolbarEventL( EMusuiCmdToolbarUnPause );
+ }
+ }
+ break;
+ }
+
+ case EMusuiCmdViewShareVideo:
+ {
+ PauseL();
+ // TODO: Change to video sharing
+ break;
+ }
+ case EMusuiCmdViewShareImage:
+ {
+ PauseL();
+ // TODO: Change to image sharing
+ break;
+ }
+ case EMusuiCmdViewShareLive:
+ {
+ // TODO: Change to live sharing
+ break;
+ }
+
+ case EMusuiCmdViewAudioNormal:
+ {
+ if( !MUS_NO_TOOLBAR )
+ {
+ if (!AknLayoutUtils::PenEnabled())
+ {
+ iEventObserver.SetToolbarVisibility( ETrue );
+ }
+ }
+ iSession->UnmuteL();
+ break;
+ }
+ case EMusuiCmdViewAudioMute:
+ {
+ if (!AknLayoutUtils::PenEnabled())
+ {
+ iEventObserver.SetToolbarVisibility( ETrue );
+ }
+
+ iSession->MuteL();
+ break;
+ }
+ case EMusuiCmdViewFastForward:
+ {
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastForward" );
+ if ( DoFastForwardingL( ETrue ) )
+ {
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconForward );
+ iClipObserver.SetPositionValueL( iSession->PositionL().Int() );
+ //iClipObserver.SetDurationVisible();
+ }
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastForward END" );
+ break;
+ }
+ case EMusuiCmdViewFastReverse:
+ {
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastReverse" );
+ if ( DoFastRewindingL( ETrue ) )
+ {
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconRew );
+ iClipObserver.SetPositionValueL( iSession->PositionL().Int() );
+ //iClipObserver.SetDurationVisible();
+ }
+ MUS_LOG( "mus: [MUSUI ] CMusUiClipSharingController::HandleCommandL: EMusuiCmdViewFastReverse END" );
+ break;
+ }
+ case EMusuiCmdViewFastForwardEnd:
+ {
+ if ( DoFastForwardingL( EFalse ) )
+ {
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause );
+ PauseL();
+ }
+ break;
+ }
+ case EMusuiCmdViewFastReverseEnd:
+ {
+ if ( DoFastRewindingL( EFalse ) )
+ {
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause );
+ PauseL();
+ }
+ break;
+ }
+ default:
+ {
+ // Try more general handling
+ CMusUiEventController::HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::HandleCommandL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SetFileNameL( const TDesC& aFileName )
+ {
+ iFileName = aFileName.AllocL();
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::ClipEnded()
+ {
+ return iClipEnded;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::ClipMutedL()
+ {
+ return iSession->IsMutedL();
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::ClipContainsAudioL()
+ {
+ if ( !iConnectionInitialized || !iSession )
+ {
+ return EFalse; // We cannot be sure yet
+ }
+
+ return iSession->ContainsAudioL();
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::CancelTranscodingL()
+ {
+ if ( iSession && iTranscodingGoing )
+ {
+ iTranscodingGoing = EFalse;
+ iSession->CancelTranscodeL();
+ }
+ iVideoToBeSaved = EFalse;
+ HandleExitL();
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::StopWindingL()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StopWindingL" );
+
+ if ( DoFastForwardingL( EFalse ) || DoFastRewindingL( EFalse ) )
+ {
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPause );
+ }
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StopWindingL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::ToolbarFFRevSelected()
+ {
+ return iToolbarFFRevSelected;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingProgressedL( TInt aPercentage )
+ {
+ MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingProgressedL ( %d )", aPercentage );
+ if ( aPercentage < KMusOneHundredPercent )
+ {
+ iTranscodingGoing = ETrue;
+ iClipObserver.UpdateClipTranscodingPercentageL( aPercentage );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingProgressedL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingCompletedInitL()
+ {
+ MUS_LOG(
+ "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompletedInitL" );
+ if ( iTranscodingGoing )
+ {
+ iVideoToBeSaved = ETrue;
+ iTranscodingGoing = EFalse;
+ iClipObserver.CancelTranscodingDialogL();
+ MusUiDialogUtil::ShowInformationDialogL( R_MUS_VIEW_NOTE_TRANSCODING_COMPLETE );
+ }
+ MUS_LOG(
+ "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompletedInitL" );
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingCompletedFinalizeL()
+ {
+ MUS_LOG(
+ "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompletedFinalizeL" );
+ SetConnectionInitialized( ETrue );
+ if ( !iTranscodingGoing )
+ {
+ ShowInvitingWaitDialogL();
+ }
+ MUS_LOG(
+ "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompletedFinalizeL" );
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CMusUiClipSharingController::FormattedDurationString(
+ const TTimeIntervalSeconds& aDurationSeconds,
+ const TTimeIntervalSeconds& aPositionSeconds )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::FormattedDurationString" );
+ _LIT( KDurationAndPositionSeparator, "/" );
+
+ iDurationStringBuffer.SetLength( 0 );
+ TLocale locale;
+ _LIT( KZeroSymbol, "0" );
+
+ TInt durationMinutes( 0 );
+ TInt durationSeconds( aDurationSeconds.Int() );
+ if ( aDurationSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) )
+ {
+ durationMinutes = (int)( aDurationSeconds.Int() / KMusOneMinuteInSeconds );
+ durationSeconds = durationSeconds - ( durationMinutes * KMusOneMinuteInSeconds );
+ }
+
+ iDurationStringBuffer.AppendNum( durationMinutes );
+ iDurationStringBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) );
+ if ( durationSeconds < KMusNumberValueTen )
+ {
+ iDurationStringBuffer.Append( KZeroSymbol );
+ }
+ iDurationStringBuffer.AppendNum( durationSeconds );
+ iDurationStringBuffer.Append( KDurationAndPositionSeparator );
+
+ TInt positionMinutes( 0 );
+ TInt positionSeconds( aPositionSeconds.Int() );
+ if ( aPositionSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) )
+ {
+ positionMinutes = (int)( aPositionSeconds.Int() / KMusOneMinuteInSeconds );
+ positionSeconds = positionSeconds - ( positionMinutes * KMusOneMinuteInSeconds );
+ }
+
+ iDurationStringBuffer.AppendNum( positionMinutes );
+ iDurationStringBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) );
+ if ( positionSeconds < KMusNumberValueTen )
+ {
+ iDurationStringBuffer.Append( KZeroSymbol );
+ }
+ iDurationStringBuffer.AppendNum( positionSeconds );
+
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::FormattedDurationString" );
+ return iDurationStringBuffer;
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::EndOfClip()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::EndOfClip" );
+ iClipEnded = ETrue;
+
+ TRAP_IGNORE( iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconStop ) );
+ if(!MUS_NO_TOOLBAR)
+ {
+ iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarPause,
+ EMusuiCmdToolbarUnPause,
+ ETrue );
+ }
+ iCloseTimer->Cancel();
+ iCloseTimer->After( iOperatorSpecificFunctionality ?
+ KMusTimeToCloseAfterClipEndedOpVariant :
+ KMusTimeToCloseAfterClipEndedStandard );
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::EndOfClip" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingNeeded()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingNeeded" );
+ iTranscode = ETrue;
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingNeeded" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingProgressed( TInt aPercentage )
+ {
+ MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingProgressed %d",
+ aPercentage );
+ TRAP_IGNORE( TranscodingProgressedL( aPercentage ) )
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingProgressed" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingCompletedInit()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompleted" );
+ TRAPD( error, TranscodingCompletedInitL() );
+ if ( error != KErrNone )
+ {
+ HandleError( error );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompleted" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingCompletedFinalize()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingCompleted" );
+ TRAPD( error, TranscodingCompletedFinalizeL() );
+ if ( error != KErrNone )
+ {
+ HandleError( error );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingCompleted" );
+ }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TranscodingFailed()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::TranscodingFailed" );
+ iTranscodingGoing = EFalse;
+ DismissWaitDialog();
+ TRAP_IGNORE( iClipObserver.CancelTranscodingDialogL();
+ MusUiDialogUtil::ShowGlobalErrorModalDialogL(
+ R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) );
+ DeleteEngineSession();
+ delete iFileName;
+ iFileName = NULL;
+ TRAPD( error,
+ iCallbackService->AsyncEventL( EMusUiAsyncStartMediaGallery ) );
+ if ( error != KErrNone )
+ {
+ HandleError( error );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::TranscodingFailed" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionRecipientNotFound()
+ {
+ MUS_LOG1( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionRecipientNotFound [%d]", iTriedInvitations );
+
+ // If the address has to be queried again...:
+ iTranscode = EFalse;
+
+ CMusUiSendController::SessionRecipientNotFound();
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionRecipientNotFound" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionTerminated()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTerminated" );
+ DismissWaitDialog();
+ if ( iTranscodingGoing )
+ {
+ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) );
+ }
+
+ TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTerminated" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionConnectionLost()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionConnectionLost" );
+ DismissWaitDialog();
+ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_LOST ) );
+
+ TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionConnectionLost" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionFailed()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionFailed" );
+ DismissWaitDialog();
+ if ( iTranscodingGoing )
+ {
+ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_VIEW_NOTE_UNABLE_TO_CONVERT ) );
+ }
+
+ TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionFailed" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::StreamIdle()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamIdle" );
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamIdle" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::StreamStreaming()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamStreaming" );
+ TRAPD( error, StreamStreamingL() );
+ if ( error != KErrNone )
+ {
+ iEventObserver.HandleError( error );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamStreaming" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionTimeChanged(
+ const TTimeIntervalSeconds& aSeconds )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTimeChanged" );
+ TRAP_IGNORE( SessionTimeChangedL( aSeconds ) );
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTimeChanged" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::InactivityTimeout()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::InactivityTimeout" );
+ DismissWaitDialog();
+ TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL(
+ R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) );
+
+ TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) );
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::InactivityTimeout" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// Called when predefined time elapsed
+// after the clip had reached the end
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::TimerComplete( CMusUiActiveTimer* /*aTimer*/ )
+ {
+ MUS_LOG( "mus: [MUSUI ] Close time elapsed from clip ending => \
+ closing session" );
+ TRAP_IGNORE( HandleExitL() )
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::StreamStreamingL()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::StreamStreamingL" );
+
+ if ( ConnectionEstablished() )
+ {
+ iClipEnded = EFalse;
+ iCloseTimer->Cancel();
+ iEventObserver.ShowNaviPaneIconL( EMusUiNaviIconPlay );
+ }
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::StreamStreamingL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionTimeChangedL( const TTimeIntervalSeconds& aSeconds )
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionTimeChangedL" );
+ if ( aSeconds.Int() > -1 )
+ {
+ TTimeIntervalSeconds clipDuration = iSession->DurationL();
+ TTimeIntervalSeconds clipPosition = iSession->PositionL();
+
+ iSharingObserver.UpdateSessionTime( SessionTimeFormatted( aSeconds ) );
+ iClipObserver.UpdateClipPositionL( clipPosition.Int(),
+ FormattedDurationString(
+ clipPosition,
+ clipDuration ) );
+ }
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionTimeChangedL" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMusUiClipSharingController::SessionEstablished()
+// -----------------------------------------------------------------------------
+//
+void CMusUiClipSharingController::SessionEstablished()
+ {
+ MUS_LOG( "mus: [MUSUI ] -> CMusUiClipSharingController::SessionEstablished" );
+
+ TRAPD( error, iResourceHandler->RequestVideoPlayerL( ETrue ) );
+ if ( error != KErrNone )
+ {
+ MUS_LOG1( "mus: [MUSUI ] RequestVideoPlayerL leave code: %d", error )
+ }
+
+ // Duration setting visible
+ TRAP( error, iClipObserver.SetDurationValue( iSession->DurationL().Int() ) )
+ if ( error != KErrNone )
+ {
+ HandleError( error );
+ }
+ iClipObserver.SetDurationVisible();
+
+ // General handling
+ CMusUiSendController::SessionEstablished(); // Base class handling
+
+ MUS_LOG( "mus: [MUSUI ] <- CMusUiClipSharingController::SessionEstablished" );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMusUiClipSharingController::DoFastForwardingL()
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::DoFastForwardingL( TBool aUseWinding )
+ {
+ if( iFastForward ^ aUseWinding )
+ {
+ iSession->FastForwardL( aUseWinding );
+ iFastForward = aUseWinding;
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMusUiClipSharingController::DoFastRewindingL()
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiClipSharingController::DoFastRewindingL( TBool aUseWinding )
+ {
+ if( iFastRewind ^ aUseWinding )
+ {
+ iSession->FastRewindL( aUseWinding );
+ iFastRewind = aUseWinding;
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+// End of file
+