pushmtm/MtmUiSrc/PushLoadServiceOp.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/pushmtm/MtmUiSrc/PushLoadServiceOp.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +0,0 @@
-/*
-* 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 CPushLoadServiceOp.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushLoadServiceOp.h"
-#include "PushMtmUiDef.h"
-#include "PushMtmUiPanic.h"
-#include "PushMtmLog.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushAuthenticationUtilities.h"
-#include <push/CSIPushMsgEntry.h>
-#include <push/CSLPushMsgEntry.h>
-#include <eikenv.h>
-#include <apmstd.h>
-#include <schemehandler.h>
-#include <AknNoteWrappers.h>
-#include <PushEntry.h>
-#include <PushMtmUi.rsg>
-#include <AknQueryDialog.h>
-#include <bldvariant.hrh>
-#include <FeatMgr.h>
-#include <Uri16.h>
-#include <data_caging_path_literals.hrh>
-#include <f32file.h>
-
-// CONSTANTS
-
-_LIT( KDefaultScheme, "http://" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::NewL
-// ---------------------------------------------------------
-//
-CPushLoadServiceOp* CPushLoadServiceOp::NewL( CMsvSession& aSession,
-                                              TMsvId aEntryId,
-                                              TRequestStatus& aObserverStatus )
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::NewL")
-
-    CPushLoadServiceOp* self =
-        new (ELeave) CPushLoadServiceOp( aSession, aEntryId, aObserverStatus );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::NewL")
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::~CPushLoadServiceOp
-// ---------------------------------------------------------
-//
-CPushLoadServiceOp::~CPushLoadServiceOp()
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::~CPushLoadServiceOp")
-
-    Cancel();
-    delete iSchemeHandler;
-    FeatureManager::UnInitializeLib();
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::~CPushLoadServiceOp")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::StartL
-// ---------------------------------------------------------
-//
-void CPushLoadServiceOp::StartL()
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::StartL")
-
-    Cancel();
-
-    // Check expiration (SI specific).
-    if ( IsExpiredL( iTEntry ) )
-        {
-        PUSHLOG_WRITE(" Msg is expired.")
-        // The entry is expired.
-
-        // Display a confirmation dialog.
-        TParse* fileParser = new (ELeave) TParse;
-        CleanupStack::PushL( fileParser );
-        fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL );
-        AssureResourceL( fileParser->FullName() );
-        CleanupStack::PopAndDestroy( fileParser ); // fileParser
-        fileParser = NULL;
-
-        HBufC* value = iCoeEnv.AllocReadResourceLC( R_PUSHLS_EXPIRED_NOTE );
-        CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
-        note->ExecuteLD( *value );
-        CleanupStack::PopAndDestroy( value ); // value
-
-        // Delete the expired message.
-        CMsvEntry* cParent = iMsvSession.GetEntryL( iTEntry.Parent() );
-        CleanupStack::PushL( cParent );
-        cParent->DeleteL( iEntryId );
-        CleanupStack::PopAndDestroy( cParent ); // cParent
-
-        // Nothing to do.
-        iDone = ETrue;
-        }
-
-    CPushMtmUiOperation::StartL();
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::StartL")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::CPushLoadServiceOp
-// ---------------------------------------------------------
-//
-CPushLoadServiceOp::CPushLoadServiceOp( CMsvSession& aSession,
-                                        TMsvId aEntryId,
-                                        TRequestStatus& aObserverStatus )
-:   CPushMtmUiOperation( aSession, aEntryId, aObserverStatus ),
-    iDone( EFalse )
-    {
-    PUSHLOG_WRITE("CPushLoadServiceOp constructing")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::ConstructL
-// ---------------------------------------------------------
-//
-void CPushLoadServiceOp::ConstructL()
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::ConstructL")
-
-    FeatureManager::InitializeLibL();
-
-    CPushMtmUiOperation::ConstructL();
-
-    // Initialize iTEntry.
-    TMsvId service;
-    User::LeaveIfError( iMsvSession.GetEntry( iEntryId, service, iTEntry ) );
-    __ASSERT_ALWAYS( iTEntry.iMtm == KUidMtmWapPush,
-                     UiPanic( EPushMtmUiPanBadMtm ) );
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::ConstructL")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::IsExpiredL
-// ---------------------------------------------------------
-//
-TBool CPushLoadServiceOp::IsExpiredL( const TMsvEntry& aTEntry ) const
-    {
-    TBool ret( EFalse );
-
-    if ( aTEntry.iBioType == KUidWapPushMsgSI.iUid )
-        {
-        CSIPushMsgEntry* si = CSIPushMsgEntry::NewL();
-        CleanupStack::PushL( si );
-        si->RetrieveL( iMsvSession, iEntryId );
-        // Check expiration if expiration time was set.
-        if ( si->Expires() != Time::NullTTime() )
-            {
-    	    TTime today;
-	        today.UniversalTime();
-            if ( si->Expires() < today )
-		        {
-                ret = ETrue;
-                }
-            }
-        CleanupStack::PopAndDestroy( si ); // si
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::RetrieveContextAndGetUrlLC
-// ---------------------------------------------------------
-//
-CPushMsgEntryBase* CPushLoadServiceOp::RetrieveContextAndGetUrlLC
-                                       ( TPtrC& aUrl ) const
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC");
-
-    CPushMsgEntryBase* context = NULL;
-    const TInt32 bioType( iTEntry.iBioType );
-
-    if ( bioType == KUidWapPushMsgSI.iUid )
-        {
-        context = CSIPushMsgEntry::NewL();
-        }
-    else if ( bioType == KUidWapPushMsgSL.iUid &&
-              FeatureManager::FeatureSupported( KFeatureIdPushSL ) )
-        {
-        context = CSLPushMsgEntry::NewL();
-        }
-    else
-        {
-        __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
-        User::Leave( KErrNotSupported );
-        }
-
-    CleanupStack::PushL( context );
-    context->RetrieveL( iMsvSession, iEntryId );
-
-    if ( bioType == KUidWapPushMsgSI.iUid )
-        {
-        CSIPushMsgEntry* si = STATIC_CAST( CSIPushMsgEntry*, context );
-        aUrl.Set( si->Url() );
-        }
-    else if ( bioType == KUidWapPushMsgSL.iUid )
-        {
-        CSLPushMsgEntry* sl = STATIC_CAST( CSLPushMsgEntry*, context );
-        aUrl.Set( sl->Url() );
-        }
-    else
-        {
-        __ASSERT_DEBUG( EFalse, UiPanic( EPushMtmUiPanBadBioType ) );
-        }
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::RetrieveContextAndGetUrlLC");
-    return context;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::AuthenticateL
-// ---------------------------------------------------------
-//
-TBool CPushLoadServiceOp::AuthenticateL( const CPushMsgEntryBase& aPushMsg,
-                                         const CPushMtmSettings& aMtmSettings ) const
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::AuthenticateL");
-
-    TBool isAuthenticated = ETrue; // by default.
-
-    if ( iTEntry.iBioType != KUidWapPushMsgSL.iUid )
-        {
-        PUSHLOG_WRITE(" Not SL");
-        isAuthenticated = ETrue; // No authentication needed.
-        }
-    else
-        {
-        // SL cache & execute-high message requires additional authentication.
-        CSLPushMsgEntry& sl = (CSLPushMsgEntry&)aPushMsg;
-
-        if ( sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteCache )
-            {
-            PUSHLOG_WRITE(" SL cache");
-            isAuthenticated = TPushAuthenticationUtil::
-                              AuthenticateMsgL( aMtmSettings, aPushMsg );
-            if ( !isAuthenticated )
-                {
-                // Ask the user...
-                isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_CACHE_NOT_AUTH );
-                }
-            }
-        else if
-           (
-             sl.Action() == CSLPushMsgEntry::ESLPushMsgExecuteHigh &&
-             aMtmSettings.ServiceLoadingType() == CPushMtmSettings::EAutomatic
-           )
-            {
-            PUSHLOG_WRITE(" SL high + auto");
-            isAuthenticated = TPushAuthenticationUtil::
-                              AuthenticateMsgL( aMtmSettings, aPushMsg );
-            if ( !isAuthenticated )
-                {
-                // Ask the user...
-                isAuthenticated = ExecuteUserQueryL( R_PUSHLS_SL_NOT_AUTH );
-                }
-            }
-        else
-            {
-            PUSHLOG_WRITE(" Other SL");
-            isAuthenticated = ETrue; // No authentication needed.
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::AuthenticateL");
-    return isAuthenticated;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::ExecuteUserQueryL
-// ---------------------------------------------------------
-//
-TBool CPushLoadServiceOp::ExecuteUserQueryL( TInt aResId ) const
-    {
-    CAknQueryDialog* queryDlg = CAknQueryDialog::NewL();
-    TInt userResponse = queryDlg->ExecuteLD( aResId );
-    TBool userWantsToDownload = ( userResponse == EAknSoftkeyYes );
-
-    return userWantsToDownload;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::ValidateLC
-// ---------------------------------------------------------
-//
-HBufC* CPushLoadServiceOp::ValidateLC( TDesC& aUrl ) const
-    {
-    TUriParser uriParser;
-    TInt err = uriParser.Parse( aUrl );
-    User::LeaveIfError( err );
-    HBufC* validated = NULL;
-
-    if ( uriParser.IsPresent( EUriScheme ) )
-        {
-        // Just copy the original URL.
-        validated = aUrl.AllocLC();
-        }
-    else
-        {
-        // Add default scheme.
-        validated = HBufC::NewLC( aUrl.Length() + KDefaultScheme().Length() );
-        validated->Des().Copy( KDefaultScheme );
-        validated->Des().Append( aUrl );
-        }
-
-    return validated;
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::RunL
-// ---------------------------------------------------------
-//
-void CPushLoadServiceOp::RunL()
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::RunL")
-
-    if ( iDone )
-        {
-        PUSHLOG_WRITE(" Done")
-        SignalObserver( KErrNone );
-        }
-    else
-        {
-        TPtrC url;
-        CPushMsgEntryBase* context = RetrieveContextAndGetUrlLC( url );
-
-        CPushMtmSettings* mtmSettings = CPushMtmSettings::NewLC();
-        TBool msgAuthenticated = AuthenticateL( *context, *mtmSettings );
-		CleanupStack::PopAndDestroy( mtmSettings ); // mtmSettings
-
-        if ( !msgAuthenticated )
-            {
-            // Ready.
-            SignalObserver( KErrNone );
-            }
-        else
-            {
-            // OK, authenticated. Can be downloaded.
-
-            // Mark service read.
-            iMtmUtil->MarkServiceUnreadL( iEntryId, EFalse );
-
-            // Download the URL.
-            delete iSchemeHandler;
-            iSchemeHandler = NULL;
-            HBufC* validatedUrl = ValidateLC( url );
-            iSchemeHandler = CSchemeHandler::NewL( *validatedUrl );
-
-            if( (url.Mid(0,7).Compare(_L("http://")) == 0) || (url.Mid(0,8).Compare(_L("https://")) == 0))
-            {
-            	TRAPD( err, iSchemeHandler->HandleUrlStandaloneL());
-            	CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl
-            	SignalObserver( err );
-            }
-            else
-            {
-           		iSchemeHandler->Observer( this );
-				TRAPD(err, iSchemeHandler->HandleUrlEmbeddedL());
-				CleanupStack::PopAndDestroy( validatedUrl ); // validatedUrl
-			    if( err != KErrNone)
-				    SignalObserver( err );
-            }
-
-          }
-
-        CleanupStack::PopAndDestroy( context ); // context, needed for 'url'
-        }
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunL")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::DoCancel
-// ---------------------------------------------------------
-//
-void CPushLoadServiceOp::DoCancel()
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::DoCancel")
-    SignalObserver( KErrCancel );
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::DoCancel")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::RunError
-// ---------------------------------------------------------
-//
-TInt CPushLoadServiceOp::RunError( TInt aError )
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::RunError")
-    PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::RunError <%d>",aError)
-
-    TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
-    return CPushMtmUiOperation::RunError( aError );
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::RunError")
-    }
-
-// ---------------------------------------------------------
-// CPushLoadServiceOp::HandleServerAppExit
-// ---------------------------------------------------------
-//
-void CPushLoadServiceOp::HandleServerAppExit(TInt LOG_ONLY(aReason))
-    {
-    PUSHLOG_ENTERFN("CPushLoadServiceOp::HandleServerAppExit")
-    PUSHLOG_WRITE_FORMAT(" CPushLoadServiceOp::HandleServerAppExit <%d>",aReason)
-
-    // Ready.
-    SignalObserver( KErrNone );
-
-    PUSHLOG_LEAVEFN("CPushLoadServiceOp::HandleServerAppExit")
-    }
-
-// End of file.