pushmtm/MtmUiSrc/PushViewServiceOp.cpp
branchRCL_3
changeset 48 8e6fa1719340
parent 0 84ad3b177aa3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushViewServiceOp.cpp	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Implementation of CPushViewServiceOp.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushViewServiceOp.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmLog.h"
+#include <PushEntry.h>
+#include <CUnknownPushMsgEntry.h>
+#include <eikenv.h>
+#include <apmstd.h>
+#include <DocumentHandler.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::CPushViewServiceOp
+// ---------------------------------------------------------
+//
+CPushViewServiceOp::CPushViewServiceOp( CMsvSession& aSession, 
+                                        TMsvId aEntryId, 
+                                        TRequestStatus& aObserverStatus ) 
+:   CPushMtmUiOperation( aSession, aEntryId, aObserverStatus )
+    {
+    PUSHLOG_WRITE("CPushViewServiceOp constructing")
+    }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::~CPushViewServiceOp
+// ---------------------------------------------------------
+//
+CPushViewServiceOp::~CPushViewServiceOp()
+    {
+    Cancel();
+    delete iDocHandler;
+    }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::StartL
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::StartL()
+    {
+    PUSHLOG_ENTERFN("CPushViewServiceOp::~CPushViewServiceOp")
+
+    Cancel();
+    CPushMtmOperation::StartL();
+
+    PUSHLOG_LEAVEFN("CPushViewServiceOp::~CPushViewServiceOp")
+    }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::RunL
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::RunL()
+    {
+    PUSHLOG_ENTERFN("CPushViewServiceOp::RunL")
+
+    TMsvEntry tEntry;
+    TMsvId service;
+    User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, tEntry ) );
+
+    __ASSERT_ALWAYS( tEntry.iMtm == KUidMtmWapPush, 
+                     UiPanic( EPushMtmUiPanBadMtm ) );
+
+    CUnknownPushMsgEntry* context = NULL;
+    const TInt32 bioType( tEntry.iBioType );
+
+    if ( bioType == KUidWapPushMsgUnknown.iUid )
+        {
+        context = CUnknownPushMsgEntry::NewL();
+        }
+    else
+        {
+        __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
+        User::Leave( KErrNotSupported );
+        }
+
+    CleanupStack::PushL( context );
+    context->RetrieveL( iMsvSession, iEntryId );
+
+    const TPtrC  contentType = context->ContentType();
+    const TPtrC8 content = context->MessageData();
+
+    __ASSERT_DEBUG( !iDocHandler, UiPanic( EPushMtmUiPanAlreadyInitialized ) );
+    iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
+
+    iDocHandler->SetExitObserver( this );
+    HBufC8* contentType8 = HBufC8::NewMaxLC( contentType.Length() );
+    contentType8->Des().Copy( contentType );
+    TDataType dataType( *contentType8 );
+
+    CAiwGenericParamList& paramList = iDocHandler->InParamListL();
+    RFile tempFile;  
+    iDocHandler->SaveTempFileL
+        ( content, dataType, KNullDesC, tempFile );
+    PUSHLOG_WRITE(" SaveTempFileL OK");
+    CleanupClosePushL( tempFile );
+    iDocHandler->OpenFileEmbeddedL( tempFile, dataType, paramList );
+    PUSHLOG_WRITE(" OpenFileEmbeddedL OK");
+    CleanupStack::PopAndDestroy( &tempFile ); // tempFile
+    PUSHLOG_WRITE(" PopAndDestroy( &tempFile ) OK");
+
+    CleanupStack::PopAndDestroy( 2, context ); // contentType8, context
+
+    // Signal the observer when the viewer is terminated.
+
+    PUSHLOG_LEAVEFN("CPushViewServiceOp::RunL")
+    }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::DoCancel
+// ---------------------------------------------------------
+//
+void CPushViewServiceOp::DoCancel()
+    {
+    PUSHLOG_WRITE("CPushViewServiceOp::DoCancel")
+    SignalObserver( KErrCancel );
+    }
+
+// ---------------------------------------------------------
+// CPushViewServiceOp::RunError
+// ---------------------------------------------------------
+//
+TInt CPushViewServiceOp::RunError( TInt aError )
+    {
+    PUSHLOG_WRITE_FORMAT("CPushViewServiceOp::RunError <%d>",aError)
+    TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
+    return CPushMtmOperation::RunError( aError );
+    }
+
+// -----------------------------------------------------------------------------
+// CPushViewServiceOp::HandleServerAppExit
+// -----------------------------------------------------------------------------
+//
+void CPushViewServiceOp::HandleServerAppExit( TInt aReason )
+    {
+    PUSHLOG_WRITE_FORMAT("CPushViewServiceOp::HandleServerAppExit <%d>",aReason)
+    aReason = 0; // Just to avoid warnings.
+    // Ready.
+    SignalObserver( KErrNone );
+    }
+
+// End of file.
+