mobilemessaging/audiomsg/src/audiomessagedocument.cpp
branchRCL_3
changeset 27 7fdbb852d323
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/audiomsg/src/audiomessagedocument.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2005-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:   Provides audioMessage document methods. 
+*
+*/
+
+
+
+
+#include <MuiuMsvUiServiceUtilities.h>  //Disk space check
+#include <centralrepository.h> 
+#include <mmsclient.h>    
+#include <MmsEngineInternalCRKeys.h> 
+#include <mmsmsventry.h>
+#include <MuiuMsgEditorLauncher.h>
+#include <MsgMediaResolver.h>
+#include "audiomessageappui.h"  
+#include "audiomessagedocument.h"
+#include "MsgMimeTypes.h"
+
+const TInt KAmsIndexEntryExtra = 2000;  // space reserved for the index entry
+const TInt KDefaultMaxSize = 300 * 1024;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::Constructor
+// ---------------------------------------------------------
+//
+CAudioMessageDocument::CAudioMessageDocument( CEikApplication& aApp ) :
+        CMsgEditorDocument( aApp ),
+        iMaxMessageSize( KDefaultMaxSize ),
+        iRecordIconStatus( EAudioInsert )
+    {
+    }
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::Destructor
+// ---------------------------------------------------------
+//
+CAudioMessageDocument::~CAudioMessageDocument()
+    {
+    delete iMediaResolver;
+    }
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::SetMessageType
+// ---------------------------------------------------------
+//
+void CAudioMessageDocument::SetMessageType()
+	{
+    const TInt flags = LaunchFlags();
+    TMmsMsvEntry tEntry = static_cast<TMmsMsvEntry>( Entry() );
+
+	if ( tEntry.Parent( ) == KMsvSentEntryId )
+		{
+        iMessageType = EAmsSent;
+        return;		
+		}
+
+    if ( flags & EMsgCreateNewMessage )
+        {
+        iMessageType = EAmsNewMessage;
+        return;
+        }
+    else if ( flags & EMsgForwardMessage )
+        {
+        iMessageType = EAmsForward;
+        return;
+        }
+    else if ( flags & EMsgCreateDuplicate )
+        {
+        iMessageType = EAmsEdit;
+        return;
+        }
+    else if ( flags & EMsgEditNewMessage )
+        {
+        iMessageType = EAmsSendAs;
+        return;
+        }
+    else if ( flags & EMsgReadOnly && flags & EMsgLaunchEditorEmbedded )
+    	{
+        iMessageType = EAmsInbox;
+        return;
+        }
+     
+  	// Either sendas or open from draft
+    if ( tEntry.IsForwardedMessage() )
+        {
+        // Forwarded message saved to draft
+        iMessageType = EAmsForward;
+        }
+    else if ( tEntry.EditorOriented() )
+        {
+        iMessageType = EAmsOpenFromDraft;
+        }
+    else
+        {
+        iMessageType = EAmsSendAs;
+        }   
+	}
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::ConstructL
+// ---------------------------------------------------------
+//
+void CAudioMessageDocument::ConstructL()
+    {
+    CMsgEditorDocument::ConstructL();
+    
+    CRepository* repository = CRepository::NewL( KCRUidMmsEngine );
+    TInt maxSendSize = 0;
+    // value is returned as bytes now
+   	TInt err = repository->Get( KMmsEngineMaximumSendSize, maxSendSize );
+    if ( !err )
+        {
+        iMaxMessageSize = maxSendSize;
+        }
+    delete repository;
+    PrepareMtmL( KUidMsgTypeMultimedia );
+    }
+    
+// ---------------------------------------------------------
+// CAudioMessageDocument::NewL
+// ---------------------------------------------------------
+//
+CAudioMessageDocument* CAudioMessageDocument::NewL(CEikApplication& aApp)
+    {
+    CAudioMessageDocument* med = new ( ELeave ) CAudioMessageDocument( aApp );
+    CleanupStack::PushL( med );
+    med->ConstructL();
+    CleanupStack::Pop( med );
+    return med;
+    }
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::CreateAppUiL
+// ---------------------------------------------------------
+//
+CEikAppUi* CAudioMessageDocument::CreateAppUiL() 
+    {
+    return new ( ELeave ) CAudioMessageAppUi;
+    }
+
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::CreateNewL
+// ---------------------------------------------------------
+//
+TMsvId CAudioMessageDocument::CreateNewL(TMsvId /* aServiceId */, TMsvId aDestFolder )
+    {
+    // Can only create to draft
+    if ( aDestFolder != KMsvDraftEntryIdValue )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    // Don't allow creation if will go under CL
+    if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( 
+                        Session(),
+                        KAmsIndexEntryExtra ) )
+        {
+        User::Leave( KErrDiskFull );
+        }
+
+    CMmsClientMtm& clientMtm = Mtm();
+
+    // CREATE TO aDestFolder (DRAFT)
+    CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC();
+    CMsvOperation* createOperation = clientMtm.CreateNewEntryL( aDestFolder, wait->iStatus );
+    CleanupStack::PushL( createOperation );
+    wait->Start();
+
+    if ( wait->iStatus.Int() != KErrNone )
+        {
+        User::Leave( wait->iStatus.Int() );
+        }
+
+    // Get the message id
+    TPckgBuf<TMsvId> pkg;
+    pkg.Copy( createOperation->ProgressL() );
+    TMsvId progress = 0;
+    progress = pkg();
+    CleanupStack::PopAndDestroy( createOperation ); 
+    CleanupStack::PopAndDestroy( wait );
+    return progress;
+    }
+
+// ---------------------------------------------------------------------------
+// CAudioMessageDocument::EntryChangedL
+// Intentionally empty implementation.
+// ---------------------------------------------------------------------------
+//
+void CAudioMessageDocument::EntryChangedL()
+    {
+    }
+  
+// ---------------------------------------------------------
+// CAudioMessageDocument::InitializeL
+// ---------------------------------------------------------
+//
+TInt CAudioMessageDocument::InitializeL( )
+    {
+    iMediaResolver = CMsgMediaResolver::NewL();
+    return KErrNone;
+    }  
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::Mtm
+// ---------------------------------------------------------
+//
+CMmsClientMtm& CAudioMessageDocument::Mtm()
+    {
+    return static_cast <CMmsClientMtm&> ( CMsgEditorDocument::Mtm() );
+    }
+
+// ---------------------------------------------------------
+// CAudioMessageDocument::MessageType
+// ---------------------------------------------------------
+//
+TBool CAudioMessageDocument::IsAmrL( RFile& aFile, TDataType& aMimeType ) const
+	{
+	iMediaResolver->RecognizeL( aFile, aMimeType);
+	TDataType testType( KMsgMimeAudioAmr );
+	if ( aMimeType != testType )
+		{
+		return EFalse;
+		}
+	else
+		{
+		return ETrue;
+		}
+	
+	}
+
+