--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/unieditor/application/src/UniEditorConvertVideoOperation.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,420 @@
+/*
+* Copyright (c) 2006,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: CUniEditorConvertVideoOperation methods.
+*
+*/
+
+
+
+// ========== INCLUDE FILES ================================
+
+#include <apmstd.h>
+
+#include <centralrepository.h>
+
+#include <messagingvariant.hrh>
+#include <messaginginternalcrkeys.h> // for Central Repository keys
+
+#include <mmsconst.h>
+
+#include <MsgMediaResolver.h>
+#include <MsgVideoInfo.h>
+#include <MmsConformance.h>
+#include <MsgMimeTypes.h>
+
+#include <unimsventry.h>
+
+#include <mmsvattachmentmanager.h>
+#include <mmsvattachmentmanagersync.h>
+#include <cmsvattachment.h>
+
+#include <msgtextutils.h>
+
+#include "UniClientMtm.h"
+#include "UniEditorEnum.h"
+#include "UniEditorDocument.h"
+#include "UniEditorConvertVideoOperation.h"
+
+// ========== CONSTANTS ====================================
+_LIT8( KUniExtVideo3gp_8, ".3gp" );
+// ========== MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::NewL
+//
+// Factory method.
+// ---------------------------------------------------------
+//
+CUniEditorConvertVideoOperation* CUniEditorConvertVideoOperation::NewL(
+ MUniEditorOperationObserver& aObserver,
+ CUniEditorDocument& aDocument,
+ RFs& aFs )
+ {
+ CUniEditorConvertVideoOperation* self =
+ new ( ELeave ) CUniEditorConvertVideoOperation( aObserver,
+ aDocument,
+ aFs );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::IsImplementedL
+// ---------------------------------------------------------
+//
+TBool CUniEditorConvertVideoOperation::IsImplementedL()
+ {
+ RImplInfoPtrArray implArray;
+ CVideoConversionPlugin::ListImplementationsL( implArray );
+
+ TBool result( EFalse );
+
+ if ( implArray.Count() > 0)
+ {
+ result = ETrue;
+ }
+
+ implArray.ResetAndDestroy();
+ implArray.Close();
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::CUniEditorConvertVideoOperation.
+// ---------------------------------------------------------
+//
+CUniEditorConvertVideoOperation::CUniEditorConvertVideoOperation(
+ MUniEditorOperationObserver& aObserver,
+ CUniEditorDocument& aDocument,
+ RFs& aFs ) :
+ CUniEditorOperation( aObserver, aDocument, aFs, EUniEditorOperationConvertVideo ),
+ iTargetSize( 0 ),
+ iNewAttaId( KMsvNullIndexEntryId )
+ {
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::ConstructL
+//
+// 2nd phase constructor.
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::ConstructL()
+ {
+ BaseConstructL();
+
+ RImplInfoPtrArray implArray;
+ CVideoConversionPlugin::ListImplementationsL( implArray );
+
+ if ( implArray.Count() > 0)
+ {
+ iConverter = CVideoConversionPlugin::NewL( implArray[0]->ImplementationUid() );
+ }
+
+ implArray.ResetAndDestroy();
+ implArray.Close();
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::~CUniEditorConvertVideoOperation
+// ---------------------------------------------------------
+//
+CUniEditorConvertVideoOperation::~CUniEditorConvertVideoOperation()
+ {
+ Cancel();
+
+ delete iNewVideoInfo;
+ iNewVideoFile.Close();
+
+ delete iEditStore;
+ delete iConverter;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::Process
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::Process(
+ CMsgVideoInfo* aVideoInfo,
+ TMsvAttachmentId aAttachmentId,
+ TInt aMessageSize )
+ {
+ ResetErrors();
+
+ iVideoInfo = aVideoInfo;
+ iAttachmentId = aAttachmentId;
+ iTargetSize = aMessageSize;
+ iOperationState = EUniConvertVidProcess;
+
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DetachAttachmentId
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::DetachAttachmentId( TMsvAttachmentId& aAttachmentId )
+ {
+ // iNewVideoInfo may be already detached in DetachVideoInfo
+ aAttachmentId = iNewAttaId;
+ iNewAttaId = KMsvNullIndexEntryId;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::RunL
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::RunL()
+ {
+ PrintOperationAndState();
+ if ( iStatus.Int() != KErrNone )
+ {
+ SetError( iStatus.Int() );
+ iOperationState = EUniConvertVidError;
+ }
+
+ switch ( iOperationState )
+ {
+ case EUniConvertVidProcess:
+ {
+ DoStartProcessL();
+ break;
+ }
+ case EUniConvertVidResolve:
+ {
+ DoStartResolveL();
+ break;
+ }
+ case EUniConvertVidReady:
+ {
+ iObserver.EditorOperationEvent( EUniEditorOperationConvertVideo,
+ EUniEditorOperationComplete );
+ break;
+ }
+ case EUniConvertVidError:
+ {
+ DoErrorWithoutStateChange();
+ iObserver.EditorOperationEvent( EUniEditorOperationConvertVideo,
+ EUniEditorOperationError );
+ break;
+ }
+ default:
+ {
+ iObserver.EditorOperationEvent( EUniEditorOperationConvertVideo,
+ EUniEditorOperationError );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DoCancelCleanup
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::DoCancelCleanup()
+ {
+ if ( iConverter )
+ {
+ iConverter->CancelConvert();
+ }
+
+ DoErrorWithoutStateChange();
+ }
+
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DoStartProcessL
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::DoStartProcessL()
+ {
+ //Create new attachment with .3rp extension
+ CreateEmptyAttachmentL();
+
+ RFile sourceFile = OpenFileForReadingL();
+
+ iConverter->ConvertL ( sourceFile, iNewVideoFile, iTargetSize, *this );
+ SetPending();
+
+ //We are responsble for closeing file handles
+ sourceFile.Close();
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DoStartResolveL
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::DoStartResolveL()
+ {
+ iNewVideoInfo = static_cast<CMsgVideoInfo*>(iDocument.DataModel()->MediaResolver().CreateMediaInfoL( iNewVideoFile ) );
+ iDocument.DataModel()->MediaResolver().ParseInfoDetailsL( iNewVideoInfo, iNewVideoFile );
+
+ iOperationState = EUniConvertVidReady;
+
+ iNewVideoFile.Close();
+
+ __ASSERT_DEBUG( iEditStore, Panic( EUniNullPointer ) );
+
+ iEditStore->CommitL();
+ delete iEditStore;
+ iEditStore = NULL;
+
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DoErrorWithoutStateChange
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::DoErrorWithoutStateChange()
+ {
+ iNewVideoFile.Close();
+
+ delete iNewVideoInfo;
+ iNewVideoInfo = NULL;
+
+ delete iEditStore;
+ iEditStore = NULL;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::VideoConversionDone
+//
+// Video conversion callback implementation.
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::VideoConversionDone( TInt aStatus )
+ {
+ switch ( aStatus )
+ {
+ case KErrNone:
+ {
+ iOperationState = EUniConvertVidResolve;
+ SetError( EUniConvertVidSuccessful );
+ break;
+ }
+ case KErrNoMemory:
+ {
+ iOperationState = EUniConvertVidError;
+ SetError( EUniConvertVidOutOfMemory );
+ break;
+ }
+ case KErrDiskFull:
+ {
+ iOperationState = EUniConvertVidError;
+ SetError( EUniConvertVidOutOfDisk );
+ break;
+ }
+ case KErrNotFound:
+ {
+ iOperationState = EUniConvertVidError;
+ SetError( EUniConvertVidNotFound );
+ break;
+ }
+ default:
+ {
+ iOperationState = EUniConvertVidError;
+ SetError( EUniConvertVidFailed );
+ break;
+ }
+ }
+
+ if ( aStatus == KErrCancel )
+ {
+ CompleteOperation( KErrCancel );
+ }
+ else
+ {
+ CompleteOperation( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::CreateEmptyAttachmentL
+// ---------------------------------------------------------
+//
+void CUniEditorConvertVideoOperation::CreateEmptyAttachmentL()
+ {
+ iNewAttaId = KMsvNullIndexEntryId;
+
+ // Get the file name from original full path name.
+ TParsePtrC parser( iVideoInfo->FullFilePath() );
+
+ TFileName ext( parser.Ext() );
+ ext.Zero();
+ ext.Copy( KUniExtVideo3gp_8 );
+
+ TFileName newFileName( parser.Name() );
+ newFileName.Append( ext );
+
+ iEditStore = iDocument.Mtm().Entry().EditStoreL();
+ MMsvAttachmentManagerSync& managerSync = iEditStore->AttachmentManagerExtensionsL();
+ CMsvAttachment* attachment = CMsvAttachment::NewL( CMsvAttachment::EMsvFile );
+ CleanupStack::PushL( attachment );
+
+ attachment->SetMimeTypeL( KMsgMimeVideo3gpp );
+
+ managerSync.CreateAttachmentL( newFileName, iNewVideoFile, attachment );
+
+ CleanupStack::Pop( attachment ); // ownership transferred
+
+ iNewAttaId = attachment->Id();
+ }
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::OpenFileForReadingL
+// ---------------------------------------------------------
+//
+RFile CUniEditorConvertVideoOperation::OpenFileForReadingL()
+ {
+ RFile sourceFile;
+ if ( iAttachmentId != KMsvNullIndexEntryId )
+ {
+ __ASSERT_DEBUG( iEditStore, Panic( EUniNullPointer ) );
+ sourceFile = iEditStore->AttachmentManagerL().GetAttachmentFileL( iAttachmentId );
+ }
+ else
+ {
+ TInt err = sourceFile.Open( iFs,
+ iVideoInfo->FullFilePath(),
+ EFileRead | EFileShareAny );
+ if ( err )
+ {
+ err = sourceFile.Open( iFs,
+ iVideoInfo->FullFilePath(),
+ EFileRead | EFileShareReadersOnly );
+ User::LeaveIfError( err );
+ }
+ }
+ return sourceFile;
+ }
+
+
+// ---------------------------------------------------------
+// CUniEditorConvertVideoOperation::DetachVideoInfo
+// ---------------------------------------------------------
+//
+CMsgVideoInfo* CUniEditorConvertVideoOperation::DetachVideoInfo()
+ {
+ // ownership transferred
+ CMsgVideoInfo* tempInfo = iNewVideoInfo;
+ iNewVideoInfo = NULL;
+ return tempInfo;
+ }
+
+// End of file