mobilemessaging/mmsui/viewersrc/UniMmsViewerDocument.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/viewersrc/UniMmsViewerDocument.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2002-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 CMmsViewerDocument methods.
+*
+*/
+
+
+
+
+// ========== INCLUDE FILES ================================
+
+#include <eikenv.h>
+#include <eikdoc.h>
+
+#include <msvstd.h>                     // TMsvEntry
+#include <msvapi.h>
+#include <msvuids.h>                    // Msgs Uids
+#include <mtclbase.h>                   // CBaseMtm
+#include <mmsvattachmentmanager.h>
+#include <cmsvattachment.h>
+#include <cmsvmimeheaders.h>
+#include <mmsvattachmentmanagersync.h>
+
+#include <bautils.h>
+
+#include <mmsclient.h>                  // Client Mtm API
+#include <MuiuMsvUiServiceUtilities.h>  //Disk space check
+#include <MsgAttachmentInfo.h>
+
+#include <gmxmldocument.h>
+#include <gmxmlnode.h>
+#include <gmxmlelement.h>
+
+// Features
+#include <featmgr.h>	
+#include <bldvariant.hrh>
+#include <messagingvariant.hrh>
+
+#include <MsgMimeTypes.h>
+#include <MsgMediaResolver.h>
+#include <MsgMediaInfo.h>
+#include <MsgTextInfo.h>
+#include <MmsConformance.h>
+
+#include <centralrepository.h>          // link against centralrepository.lib
+#include <MmsEngineInternalCRKeys.h>
+#include <messaginginternalcrkeys.h>    // for Central Repository keys
+
+#include "UniMmsViewerDocument.h"       // CMmsViewerDocument
+#include "UniMmsViewerAppUi.h"          // CMmsViewerAppUi
+
+#include "MmsMtmUi.h"
+#include "MmsMtmConst.h"                // File logger
+
+#include "MmsViewer.hrh"                // panics
+
+// UniModel stuff
+#include <unidatamodel.h>   
+#include <unismilmodel.h>
+#include <unidatautils.h>
+#include <uniobjectsinfo.h>
+#include <uniobjectsmodel.h> 
+#include <uniobjectlist.h>
+#include <unismillist.h>
+#include <uniobject.h>
+#include <unitextobject.h>
+#include <unimimeinfo.h>
+#include <unismilutils.h>
+#include <unidrminfo.h>
+
+// ========== CONSTANTS ====================================
+
+const TInt KDefaultMaxSize = 300 * 1024;
+
+// ---------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CMmsViewerDocument* CMmsViewerDocument::NewL(   CEikApplication& aApp )
+    {
+    CMmsViewerDocument* self = new ( ELeave ) CMmsViewerDocument( aApp );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CMmsViewerDocument::CMmsViewerDocument( CEikApplication& aApp ) :
+    CMsgEditorDocument( aApp ),
+    iCurrentSlide( 0 ),
+    iMaxMessageSize( KDefaultMaxSize ),
+    iCreationMode( EMmsCreationModeWarning )
+    {
+    LOGTIMESTAMP("CMmsViewerDocument::CMmsViewerDocument ");
+    }
+
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::ConstructL
+// ---------------------------------------------------------
+//
+void CMmsViewerDocument::ConstructL()
+    {
+    CMsgEditorDocument::ConstructL();
+    
+    TInt maxSize = KDefaultMaxSize;
+    TInt creationMode = EMmsCreationModeWarning;
+    
+    CRepository* repository = CRepository::NewL( KCRUidMmsEngine );
+    TInt err = repository->Get( KMmsEngineMaximumSendSize, maxSize );
+    if ( !err )
+        {
+        iMaxMessageSize = maxSize;
+        }
+    err = repository->Get( KMmsEngineCreationMode, creationMode );
+    if ( !err )
+        {
+        iCreationMode = creationMode;
+        }
+    delete repository;
+    repository = NULL;
+
+    if ( !iMaxMessageSize )
+        {
+        //MaximumSendSize == 0 means "anything goes"
+        iMaxMessageSize = KMaxTUint32;
+        }
+
+    PrepareMtmL( KUidMsgTypeMultimedia );
+    iFs = CEikonEnv::Static()->FsSession( ); 
+    iDataModel = CUniDataModel::NewL( iFs, Mtm( ) );
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::~CMmsViewerDocument
+//
+// Destructor.
+// ---------------------------------------------------------
+//
+CMmsViewerDocument::~CMmsViewerDocument()
+    {
+    delete iDataModel;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::DefaultMsgFolder
+// ---------------------------------------------------------
+//
+TMsvId CMmsViewerDocument::DefaultMsgFolder() const
+    {
+    return KMsvGlobalOutBoxIndexEntryIdValue;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::DefaultMsgService
+// ---------------------------------------------------------
+//
+TMsvId CMmsViewerDocument::DefaultMsgService() const
+    {
+    return KMsvLocalServiceIndexEntryId;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::Mtm
+// ---------------------------------------------------------
+//
+CMmsClientMtm& CMmsViewerDocument::Mtm()
+    {
+    return static_cast <CMmsClientMtm&> ( CMsgEditorDocument::Mtm() );
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::MtmUiL
+// ---------------------------------------------------------
+//
+CMmsMtmUi& CMmsViewerDocument::MtmUiL()
+    {
+    return static_cast <CMmsMtmUi&> ( CMsgEditorDocument::MtmUiL() );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::EntryChangedL
+// Intentionally empty implementation.
+// ---------------------------------------------------------
+//
+void CMmsViewerDocument::EntryChangedL()    // empty implementation
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::CreateNewAttachmentModelL
+//
+// Creates new objects model object (virtual from CMsgEditorDocument).
+// ---------------------------------------------------------
+//
+CMsgAttachmentModel* CMmsViewerDocument::CreateNewAttachmentModelL(
+    TBool aReadOnly)
+    {
+    return CUniObjectsModel::NewL( aReadOnly );
+    }
+
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::InitializeL
+// 
+// Initialise the model. 
+// ---------------------------------------------------------
+//
+void CMmsViewerDocument::InitializeL( MMmsDocumentObserver& aObserver )
+    {
+    iObserver = &aObserver;
+    iSmilType = ENoSmil;
+    iDataModel->RestoreL( *this );
+
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::RestoreReady
+// ---------------------------------------------------------
+//
+void CMmsViewerDocument::RestoreReady( TInt aParseResult, TInt aError )
+    {
+    // Map NoSmil and MultipleSmil to MmsSmil
+    iSmilType = iDataModel->SmilType( );
+    if ( iSmilType == ENoSmil ||
+         iSmilType == EMultipleSmil )
+        {
+        iSmilType = EMmsSmil;
+        }
+    iParseResult = aParseResult;
+
+    iOrigAttachmentCount = iDataModel->OriginalAttachmentCount();
+    iObserver->InitializeReady( iParseResult, aError );
+    }
+
+// ---------------------------------------------------------
+// MessageSize
+//
+// ---------------------------------------------------------
+TInt CMmsViewerDocument::MessageSize( )
+    {
+    // If this function is modified, CMmsMtmUi::MessageSizeL() must be kept in sync.
+    TInt msgSizeBytes( 0 );
+    TInt count = iDataModel->ObjectList().Count();
+    while ( count-- )
+        {
+        msgSizeBytes += iDataModel->ObjectList().GetByIndex( count )->Size();
+        }
+
+    msgSizeBytes += iDataModel->SmilList().SmilByteSize();
+
+    count = iDataModel->AttachmentList().Count();
+    while ( count-- )
+        {
+        msgSizeBytes += iDataModel->AttachmentList().GetByIndex( count )->Size();
+        }
+
+    // subject size
+    TPtrC subject;
+    TRAP_IGNORE( subject.Set( Mtm().SubjectL() ) );
+    msgSizeBytes += CUniDataUtils::UTF8Size( subject );
+
+    return msgSizeBytes;    
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::CreateAppUiL
+// ---------------------------------------------------------
+//
+CEikAppUi* CMmsViewerDocument::CreateAppUiL()
+    {
+    CMsgEditorAppUi* appui = new ( ELeave ) CMmsViewerAppUi();
+    return appui;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::ErrorResponseMessage
+// ---------------------------------------------------------
+//
+TBool CMmsViewerDocument::ErrorResponseMessage()
+    {
+    TBool retVal( EFalse );
+    if (    iOrigAttachmentCount == 0 
+        &&  static_cast<CMmsClientMtm&>( Mtm() ).ResponseStatus() > KMmsResponseStatusOK 
+        &&  static_cast<CMmsClientMtm&>( Mtm() ).ResponseText().Length() )
+        {
+        retVal = ETrue;
+        }
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerDocument::CreateNewL
+// ---------------------------------------------------------
+//
+TMsvId CMmsViewerDocument::CreateNewL(TMsvId /*aService*/, TMsvId /*aDestFolder*/ )
+    {
+    __ASSERT_ALWAYS( !Mtm().Entry().Entry().ReadOnly(), Panic( EMmsNotSupportedInReadOnly ) );
+    return 0;
+    }
+
+// ----------------------------------------------------
+// GetAttachmentFileL
+// ----------------------------------------------------
+//
+RFile CMmsViewerDocument::GetAttachmentFileL( TMsvAttachmentId aId )
+    {
+    RFile file;
+    CMsvStore* store = Mtm().Entry().ReadStoreL();
+    CleanupStack::PushL( store );
+    MMsvAttachmentManager& manager = store->AttachmentManagerL();
+    file = manager.GetAttachmentFileL( aId );
+    CleanupStack::PopAndDestroy( store );
+    return file;
+    }
+
+            
+//  End of File