diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/mmshui/src/musuisendcontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshui/src/musuisendcontroller.cpp Wed Sep 01 12:31:01 2010 +0100 @@ -0,0 +1,1077 @@ +/* +* Copyright (c) 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: +* +*/ + + + +#include "musuisendcontroller.h" +#include "musuieventobserver.h" +#include "musuisharingobserver.h" +#include "musuisendobserver.h" +#include "musuidialogutil.h" +#include "musuicallbackservice.h" +#include "musuifileutil.h" +#include "mussettings.h" +#include "musuipropertywatch.h" +#include "mussessionproperties.h" +#include "mussettingskeys.h" +#include "musuiresourcehandler.h" +#include "muslogger.h" // debug logging + +#include "musengmceoutsession.h" +#include "musenguriparser.h" +#include + +#include +#include +#include + + +using namespace NMusSessionApi; + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiSendController::~CMusUiSendController() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::~CMusUiSendController" ); + + delete iAddress; + delete iRemoteSipAddress; + delete iRemoteSipAddressProposal; + TRAP_IGNORE( DeleteFileL() ); + delete iVideoFileName; + delete iLocalizer; + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::~CMusUiSendController" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusEngMceSession* CMusUiSendController::EngineSession() + { + return EngineOutSession(); // Engine out session is CMusEngMceSession + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::DeleteEngineSession() + { + // Cancel invite + if ( EngineOutSession() && !ConnectionEstablished() ) + { + MUS_LOG( "mus: [MUSUI ] CMusUiSendController::DeleteEngineSession:\ + Canceling inviting..." ); + TRAP_IGNORE( EngineOutSession()->CancelInviteL() ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::HandlePropertyError( const TInt aReason ) + { + MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleError [%d]", + aReason ); + TRAP_IGNORE( DeleteVideoL() ); + + CMusUiEventController::HandlePropertyError( aReason ); // For the base class + + MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleError" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::HandleAsyncEventL( TMusUiAsyncEvent aEventId ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleAsyncEventL" ); + switch ( aEventId ) + { + case EMusUiAsyncInviteCancel: + { + MUS_LOG( "mus: [MUSUI ] CMusUiSendController::\ + HandleAsyncEventL: EMusUiAsyncInviteCancel" ); + HandleExitL(); + break; + } + case EMusUiAsyncManualAddressEntry: + { + iResourceHandler->RequestKeypadL( ETrue ); // Exits on fail + iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); + break; + } + case EMusUiAsyncStartInvitation: + { + MUS_LOG( "mus: [MUSUI ] CMusUiSendController::\ + HandleAsyncEventL: EMusUiAsyncStartInvitation" ); + InviteL(); + break; + } + default: + { + // Not send specific, let the base class handle + CMusUiEventController::HandleAsyncEventL( aEventId ); + } + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleAsyncEventL" ); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TDesC& CMusUiSendController::TypedAddress() const + { + return *iAddress; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusUiSendController::ManualAddressTyped() const + { + return iManualAddressTyped; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::StartInvitationL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::StartInvitationL" ); + + iCallbackService->AsyncEventL( EMusUiAsyncStartInvitation ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::StartInvitationL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::InviteL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::InviteL" ); + + if ( !iSipRegistrationPending ) + { + TRAPD( error, + iRemoteSipAddress = CMusUiPropertyWatch::ReadDescPropertyL( + KRemoteSipAddress ) ); + if ( error != KErrNone ) + { + iRemoteSipAddress = KNullDesC().AllocL(); + } + + TRAP( error, iRemoteSipAddressProposal = + CMusUiPropertyWatch::ReadDescPropertyL( + KRemoteSipAddressProposal ) ); + if ( error != KErrNone ) + { + iRemoteSipAddressProposal = KNullDesC().AllocL(); + } + + if ( iRemoteSipAddress->Length() > 0 ) + { + if ( iRemoteSipAddress->Find( KMusCommaSymbol ) == KErrNotFound ) + { + InviteL( *iRemoteSipAddress ); + } + else + { + // Split the addresses using KMusCommaSymbol as a separator + CDesCArray* addressArray = + new ( ELeave ) CDesCArrayFlat( + KMusSipAddressesMaxAmount ); + SplitL( *iRemoteSipAddress, KMusCommaSymbol, addressArray ); + // Show List Query Dialog + TBuf selectedAddress; + if ( MusUiDialogUtil::SelectAddressDialogL( addressArray, + selectedAddress ) ) + { + // Invite with the chosen address + InviteL( selectedAddress ); + } + else + { + HandleExitL(); + } + } + } + else + { + iResourceHandler->RequestKeypadL( ETrue ); // Exits on failure + iManualAddressTyped = ETrue; + iSendObserver.ManualAddressEntryL( *iRemoteSipAddressProposal ); + } + } + else + { + // Show waiting dialog + delete iDialogPrompt; + iDialogPrompt = NULL; + iDialogPrompt = StringLoader::LoadL( + R_MUS_REGISTRATION_PENDING_WAIT_NOTE_TXT ); + + if ( !iSharingObserver.ShowWaitDialogL( + *iDialogPrompt, + KMusInviteExpireTimeout, //Reuse 1 min timer + R_MUS_LIVE_SHARING_VIEW_NOTE_NO_REG ) ) + { + iEventObserver.HandleExit(); + } + + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::InviteL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::CancelInvitationL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::CancelInvitationL" ); + + if ( EngineOutSession() && !ConnectionEstablished() ) + { + TRAP_IGNORE( EngineOutSession()->CancelInviteL() ); + } + + HandleExitL(); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::CancelInvitationL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::HandleForegroundEventL( TBool aForeground ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleForegroundEventL" ); + + CMusUiEventController::HandleForegroundEventL( aForeground ); + + if ( ConnectionEstablished() && !ExitOccured() ) + { + if ( aForeground ) + { + if ( iContinuePlayingWhenForeground ) + { + MUS_LOG( "mus: [MUSUI ] Resume playing" ); + PlayL(); + } + } + else + { + MUS_LOG( "mus: [MUSUI ] Pause playing" ); + if ( EngineOutSession() ) + { + iContinuePlayingWhenForeground = IsPlayingL(); + } + PauseL(); + } + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleForegroundEventL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::PlayL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::PlayL" ); + if ( EngineOutSession() ) + { + EngineOutSession()->PlayL(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::PlayL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::PauseL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::PauseL" ); + if ( EngineOutSession() ) + { + EngineOutSession()->PauseL(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::PauseL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusUiSendController::IsPlayingL() + { + TBool isPlaying( EFalse ); + + if ( EngineOutSession() ) + { + isPlaying = EngineOutSession()->IsPlayingL(); + } + + return isPlaying; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionEstablished() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionEstablished" ); + + // Common handling first + CMusUiEventController::SessionEstablished(); + + iConnectionEstablished = ETrue; + DismissWaitDialog(); + + if ( iForeground ) + { + MUS_LOG( "mus: [MUSUI ] Enable display and start playing" ); + TRAP_IGNORE( PlayL(); + EnableDisplayL( ETrue ); ) + + iEventObserver.SetToolbarVisibility( ETrue ); + + } + else + { + MUS_LOG( "mus: [MUSUI ] In background, don't start playing yet" ); + iContinuePlayingWhenForeground = ETrue; + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionEstablished" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionRejected() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRejected" ); + DismissWaitDialog(); + TRAP_IGNORE ( + MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_CONNECTION_REJECTED ) ); + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRejected" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionBadRequest() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionBadRequest" ); + + DismissWaitDialog(); + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionBadRequest" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionUnauthorized() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionUnauthorized" ); + + DismissWaitDialog(); + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionUnauthorized" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionPaymentRequired() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionPaymentRequired" ); + + DismissWaitDialog(); + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionPaymentRequired" ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionRecipientNotFound() + { + MUS_LOG1( "mus: [MUSUI ] -> CMusUiSendController::SessionRecipientNotFound [%d]", + iTriedInvitations ); + DismissWaitDialog(); + if ( ExitOccured() ) + { + return; + } + if ( ++iTriedInvitations > 1 ) + { + TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_WRONG_ADDRESS ) ); + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncInviteCancel ) ); + + } + else + { + TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_WRONG_ADDRESS ) ); + iManualAddressTyped = ETrue; + + TRAP_IGNORE( + iCallbackService->AsyncEventL( EMusUiAsyncManualAddressEntry ) ); + + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRecipientNotFound" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionProxyAuthenticationRequired() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionProxyAuthenticationRequired" ); + + DismissWaitDialog(); + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionProxyAuthenticationRequired" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionRequestTimeOut() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestTimeOut" ); + DismissWaitDialog(); + TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_NO_RESPONSE ) ); + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestTimeOut" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionUnsupportedMediaType() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionUnsupportedMediaType" ); + DismissWaitDialog(); + if ( !ExitOccured() ) + { + TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_APP_N_A ) ); + } + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionUnsupportedMediaType" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionBusyHere() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionBusyHere" ); + DismissWaitDialog(); + TRAP_IGNORE( + MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_RECIPIENT_N_A ) ); + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionBusyHere" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionRequestCancelled() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestCancelled" ); + DismissWaitDialog(); + TRAP_IGNORE( + MusUiDialogUtil::ShowInformationDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_INVITATION_CANCELLED ) ); + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestCancelled" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SessionTemporarilyNotAvailable() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SessionRequestCancelled" ); + DismissWaitDialog(); + if ( !ExitOccured() ) + { + TRAP_IGNORE( MusUiDialogUtil::ShowGlobalErrorDialogL( + R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A ) ); + } + + TRAP_IGNORE( iCallbackService->AsyncEventL( EMusUiAsyncHandleExit ) ); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::SessionRequestCancelled" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::ConstructL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ConstructL" ); + + CMusUiEventController::ConstructL(); // Base class construction + iLocalizer = CDirectoryLocalizer::NewL(); + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ConstructL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiSendController::CMusUiSendController( + MMusUiEventObserver& aEventObserver, + MMusUiSharingObserver& aSharingObserver, + MMusUiSendObserver& aSendObserver ) + : CMusUiEventController( aEventObserver, aSharingObserver ), + iSendObserver( aSendObserver ), + iTriedInvitations( 0 ), + iContinuePlayingWhenForeground( ETrue ), + iWaitDialogCallback( *this ) + { + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::ExitProcedureL( TBool aUserAcceptance ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ExitProcedureL" ); + + DismissWaitDialog(); + + switch ( iShutdownState ) + { + case EMusUiShutdownStarted: + { + MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownStarted" ); + + if ( iVideoToBeSaved && + iVideoFileName && + MusUiFileUtil::FileExists( *iVideoFileName ) ) + { + iShutdownState = EMusUiShutdownVideoSaved; + ShowVideoSavedDialogL(); + ExitProcedureL( ETrue ); // Accept saving + } + else + { + CMusUiEventController::ExitProcedureL( aUserAcceptance ); + } + break; + } + + case EMusUiShutdownVideoSaved: + { + MUS_LOG( "mus: [MUSUI ] ExitProcedureL: EMusuiShutdownVideoSaved" ); + + // Check if our address is valid sip or tel uri. If not, there is no + // point to query user about permission to save it to contacts. + + TInt error = KErrNotFound; + if ( iAddress ) + { + TMusEngUriParser parser( *iAddress ); + TRAP( error, parser.ParseUriL() ) + } + + // Save Address to Contacts query if manually entered + // and if is the standard variant. + // NOTE: KErrNotSupported means there is more than one contact id. + if ( !iOperatorSpecificFunctionality && ManualAddressTyped() && + iContactId != KErrNotSupported && + error == KErrNone ) + { + iShutdownState = EMusUiShutdownContactSavingQueried; + SaveContactQueryL(); + } + else + { + // Nothing send specific, let the base class handle + CMusUiEventController::ExitProcedureL( aUserAcceptance ); + } + break; + } + + default: + { + // Nothing send specific, let the base class handle + CMusUiEventController::ExitProcedureL( aUserAcceptance ); + break; + } + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ExitProcedureL" ); + } + + +// ----------------------------------------------------------------------------- +// Handles status changes specific to sending sharing types. +// Calls base class version for status changes that are not sending specific. +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::HandleChangedStatusL( + TMusAvailabilityStatus aStatus ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::HandleChangedStatusL" ) + switch( aStatus ) + { + case ESipRegistrationPending: + { + MUS_LOG( "mus: [MUSUI ] ESipRegistrationPending" ); + iSipRegistrationPending = ETrue; + break; + } + case ESipOptionsNotSent: // FALLTHROUGH + case ESipOptionsSent: // FALLTHROUGH + { + break; + } + case EManualActivation: // FALLTHROUGH + case EMultimediaSharingAvailable: + { + MUS_LOG( "mus: [MUSUI ] EManualActivation or EMultimediaSharingAvailable" ) + + if( iSipRegistrationPending ) + { + 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 sending specific, let the base class handle + CMusUiEventController::HandleChangedStatusL( aStatus ); + break; + } + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::HandleChangedStatusL" ) + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +const TDesC& CMusUiSendController::VideoFileNameL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::VideoFileNameL" ); + + TParse parse; + TPtrC rootPath; + + SetVideoPathValueL();//sets video rootpath according to setting value. + + if ( parse.Set( iVideoFilePath,NULL,NULL) != KErrBadName ) + { + + if(parse.Drive().Compare( PathInfo::MemoryCardRootPath())) + { + TRAPD(error,MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath)); + + switch(error) + { + case KErrNotReady: + case KErrCorrupt: + case KErrLocked: + { + MusUiDialogUtil::ShowGlobalInformationDialogL( + R_MUS_VIEW_NOTE_MEMORYCARD_PROBLEM); + + MUS_LOG( "mus: [MUSUI ] -> Changing to Phone Memory " ); + rootPath.Set(PathInfo::PhoneMemoryRootPath()); + TParsePtrC pathPtr(rootPath); + iVideoFilePath = rootPath; + iVideoFilePath += PathInfo::VideosPath(); + // Make sure the new path exists + TRAP_IGNORE( MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath) ) + break; + } + case KErrAlreadyExists: + case KErrNone: + { + MUS_LOG( "mus: [MUSUI ] -> Using MMC " ); + rootPath.Set(PathInfo::MemoryCardRootPath()); + break; + } + default: + { + delete iVideoFileName; + iVideoFileNamePlain = KNullDesC; + iVideoFileName = iVideoFileNamePlain.AllocL(); + HandleError( error); + break; + } + } + } + else//Phone memory is being used. + { + TRAPD(error,MusUiFileUtil::VideoFilePathExistsL(iVideoFilePath)); + + switch(error) + { + case KErrAlreadyExists: + case KErrNone: + { + MUS_LOG( "mus: [MUSUI ] -> Using Phone memory" ); + rootPath.Set(PathInfo::PhoneMemoryRootPath()); + break; + } + default: + { + delete iVideoFileName; + iVideoFileNamePlain = KNullDesC; + iVideoFileName = iVideoFileNamePlain.AllocL(); + HandleError( error); + break; + } + } + } + + } + else + { + delete iVideoFileName; + iVideoFileNamePlain = KNullDesC; + iVideoFileName = iVideoFileNamePlain.AllocL(); + HandleError(KErrBadName); + } + + TParsePtrC pathPtr(rootPath); + iVideoFilePath += pathPtr.NameAndExt(); + MusUiFileUtil::CreateVideoFileNameL(iVideoFilePath, + iVideoFileNamePlain); + + delete iVideoFileName; + TFileName videoFileName; + videoFileName += iVideoFilePath; + videoFileName += iVideoFileNamePlain; + videoFileName += KMusVideoFileNameExtension; + iVideoFileName = videoFileName.AllocL(); + + MUS_LOG_TDESC( "mus: [MUSUI ] <- CMusUiSendController::VideoFileNameL:", + iVideoFileName->Des() ); + return *iVideoFileName; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::ShowInvitingWaitDialogL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ShowWaitDialogL" ); + delete iDialogPrompt; + iDialogPrompt = NULL; + iDialogPrompt = StringLoader::LoadL( + R_MUS_LIVE_SHARING_VIEW_INVITING_WAIT_NOTE_TXT, + MusContactName().Length() > 0 ? + MusContactName() : iOperatorSpecificFunctionality ? + MusTelNumberValue() : *iAddress ); + + if ( !iSharingObserver.ShowWaitDialogL( + *iDialogPrompt, + KMusInviteExpireTimeout, + R_MUS_LIVE_SHARING_VIEW_NOTE_NO_RESPONSE ) ) + { + CancelInvitationL(); + } + + + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ShowWaitDialogL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::DismissWaitDialog() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DismissWaitDialog" ); + TRAPD( err, iSharingObserver.DismissWaitDialogL(); ); + if ( err != KErrNone ) + { + HandleError( err ); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DismissWaitDialog" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SplitL( const TDesC& aDes, + const TDesC& aChar, + CDesCArray* aArray ) + { + TInt charPos( 0 ); + TPtrC ptr( aDes ); + TBool found = EFalse; + while( ( charPos = ptr.Find( aChar ) ) > 0 ) + { + found = ETrue; + TPtrC str = ptr.Left( charPos ); + aArray->AppendL( str ); + ptr.Set( ptr.Right( ptr.Length() - str.Length() - 1 ) ); + } + if ( found && ptr.Length() > 0 ) + { + aArray->AppendL( ptr ); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::SetVideoPathValueL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::SetVideoPathValueL" ); + TInt drive = MultimediaSharingSettings::VideoLocationSettingL(); + + TFileName rootPath; + User::LeaveIfError( PathInfo::GetRootPath( rootPath, drive ) ); + + TParsePtrC pathPtr(rootPath); + iVideoFilePath = rootPath; + iVideoFilePath += PathInfo::VideosPath(); + MUS_LOG_TDESC( "mus: [MUSUI ] <- CMusUiSendController::SetVideoPathValueL: ", + iVideoFilePath ); + iLocalizer->SetFullPath( iVideoFilePath ); + if ( iLocalizer->IsLocalized() ) + { + iLocalizedVideoFilePath =iLocalizer->LocalizedName(); + } + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::ShowVideoSavedDialogL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::ShowVideoSavedDialogL" ); + //MUS_LOG_TDESC( "mus: [MUSUI ] ", iVideoFileNamePlain ); + //MUS_LOG_TDESC( "mus: [MUSUI ] ", iVideoFilePath ); + + delete iDialogPrompt; + iDialogPrompt = NULL; + + TBuf buf; + TFileName videoFileName; + videoFileName += iVideoFileNamePlain; + videoFileName += KMusVideoFileNameExtension; + buf = videoFileName; + + CDesCArrayFlat* savingTextsArray = + new ( ELeave ) CDesCArrayFlat( KMusStringSubstArrayGranularity ); + CleanupStack::PushL( savingTextsArray ); + //"File %0U saved to folder %1U" + //%0U = iVideoFileName + //%1U = iVideoFilePath + savingTextsArray->InsertL( 0, videoFileName ); + + if ( MultimediaSharingSettings::OperatorVariantSettingL() == + MusSettingsKeys::EOperatorSpecific ) // For AT&T products + { + HBufC* folder = StringLoader::LoadLC( R_MUS_VIDEO_SAVE_FOLDER_NAME ); + savingTextsArray->InsertL( 1, *folder ); + CleanupStack::PopAndDestroy( folder ); + } + else // Standard products + { + if ( iLocalizer->IsLocalized() ) + { + savingTextsArray->InsertL( 1, iLocalizedVideoFilePath ); + } + else + { + savingTextsArray->InsertL( 1, iVideoFilePath ); + } + } + + MUS_LOG_TDESC( "mus: [MUSUI ] filename:", savingTextsArray->MdcaPoint( 0 ) ); + MUS_LOG_TDESC( "mus: [MUSUI ] path:", savingTextsArray->MdcaPoint( 1 ) ); + + iDialogPrompt = StringLoader::LoadL( R_MUS_VIEW_NOTE_VIDEO_SAVED, + *savingTextsArray ); + CleanupStack::Pop( savingTextsArray ); + + MUS_LOG_TDESC( "mus: [MUSUI ] ", iDialogPrompt->Des() ); + + MusUiDialogUtil::ShowGlobalInformationDialogL( *iDialogPrompt ); + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::ShowVideoSavedDialogL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::DeleteVideoL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DeleteVideoL" ); + if ( iVideoFileName ) + { + MusUiFileUtil::DeleteFileL( *iVideoFileName ); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DeleteVideoL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController::DeleteFileL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiSendController::DeleteFileL" ); + if ( iVideoFileName && + MusUiFileUtil::FileExists( *iVideoFileName ) && !iVideoToBeSaved ) + { + DeleteVideoL(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiSendController::DeleteFileL" ); + } + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiSendController:: +TWaitDialogCallback::TWaitDialogCallback( CMusUiSendController& aController ) + : iController( aController ) + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiSendController:: +TWaitDialogCallback::DialogDismissedL( TInt /*aButtonId*/ ) + { + iController.StartInvitationL(); + } + +// End of file +