diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,224 @@ +/* +* Copyright (c) 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: Implements CNcdSilentInstallOperationProxy +* +*/ + + +#include +#include "ncdsilentinstalloperationproxy.h" +#include "ncdnodemanagerproxy.h" +#include "ncdinstallationservice.h" +#include "ncdfileinfo.h" +#include "ncdinstallinfo.h" +#include "catalogsdebug.h" + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CNcdSilentInstallOperationProxy* CNcdSilentInstallOperationProxy::NewLC( + MCatalogsClientServer& aSession, + TInt aHandle, + MNcdOperationProxyRemoveHandler* aRemoveHandler, + CNcdNodeProxy* aNode, + CNcdNodeManagerProxy* aNodeManager, + MNcdInstallOperationObserver* aObserver, + MNcdInstallationService& aInstallationService, + const SwiUI::TInstallOptions& aInstallOptions ) + { + CNcdSilentInstallOperationProxy* self = + new( ELeave ) CNcdSilentInstallOperationProxy( aInstallationService, + aInstallOptions ); + + self->AddRef(); + CleanupReleasePushL( *self ); + self->ConstructL( aSession, aHandle, aRemoveHandler, aNode, aNodeManager, + aObserver ); + return self; + } + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CNcdSilentInstallOperationProxy::CNcdSilentInstallOperationProxy( + MNcdInstallationService& aInstallationService, + const SwiUI::TInstallOptions& aInstallOptions ) +: CNcdInstallOperationProxy( aInstallationService ) + { + // Copy all the install options into the buffer that will be used + // when silent installation is delegated to the installer. + iInstallOptionsPackage = aInstallOptions; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CNcdSilentInstallOperationProxy::~CNcdSilentInstallOperationProxy() + { + DLTRACEIN(( "" )); + // Cancel must be called here because base class will only call its own + // DoCancel() + Cancel(); + DLTRACEOUT(( "" )); + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CNcdSilentInstallOperationProxy::ConstructL( MCatalogsClientServer& aSession, + TInt aHandle, + MNcdOperationProxyRemoveHandler* aRemoveHandler, + CNcdNodeProxy* aNode, + CNcdNodeManagerProxy* aNodeManager, + MNcdInstallOperationObserver* aObserver ) + { + DLTRACEIN(( "" )); + + CNcdInstallOperationProxy::ConstructL( aSession, aHandle, aRemoveHandler, + aNode, aNodeManager, + aObserver ); + + DLTRACEOUT(( "" )); + } + + +// --------------------------------------------------------------------------- +// From CActive +// ?implementation_description +// --------------------------------------------------------------------------- +// + +void CNcdSilentInstallOperationProxy::DoCancel() + { + DLTRACEIN(("")); + + // These variables will contain the possible information + // about the cancelled installation. + HBufC* fileName( NULL ); + TUid appUid( TUid::Null() ); + TInt errorCode( KErrCancel ); + + // Because the operation is going on, we have to stop the + // silent installation of the installer. + Installer().CancelSilentInstall( fileName, appUid, errorCode ); + + // Only update succesfull info to the server. + if ( errorCode == KErrNone ) + { + // Cancellation did not have effect and the installation + // was success for the current item. + // Notice, that UpdateInfoToServerL will also delete the + // used install file of the content. + if ( fileName != NULL ) + { + TRAP_IGNORE( + UpdateInfoToServerL( *fileName, + appUid, + errorCode ) ); + } + else + { + TRAP_IGNORE( + UpdateInfoToServerL( KNullDesC, + appUid, + errorCode ) ); + } + } + + // No need for the fileName anymore. + delete fileName; + fileName = NULL; + + // Notice that if the errorCode is KErrNone, then UpdateInfoToServerL above + // deleted the content install file and increased the current file count by one. + // So, we can directly compare CurrentFile() with FileCount() without adding 1 + // for the current file index. + if ( errorCode == KErrNone && CurrentFile() < FileCount() ) + { + // Error code should be cancel because not all of the files + // in the bundle where installed. + errorCode = KErrCancel; + } + + TRAP_IGNORE( UpdateOperationInfoToPurchaseHistoryL( errorCode ) ); + + TRAP_IGNORE( NodeManager()->InternalizeRelatedNodesL( *NodeProxy() ) ); + + // By setting the error code here, the parent class may inform the + // report manager with the correct value. + SetInstallationErrorCode( errorCode ); + + // Let the parent handle other cancellations + CNcdInstallOperationProxy::DoCancel(); + } + + +// --------------------------------------------------------------------------- +// Calls the functions of the installer. Child classes may call different functions. +// --------------------------------------------------------------------------- +// +void CNcdSilentInstallOperationProxy::UseInstallServiceL( const CNcdFileInfo& aFile ) + { + DLTRACEIN(("")); + // Choose correct installation type + switch( CurrentInfo().InstallType() ) + { + case CNcdInstallInfo::ENcdInstallNormal: + { + Installer().SilentInstallL( + iFileHandle, + aFile.MimeType(), + aFile.Purpose(), + SilentInstallOptionsPackage() ); + break; + } + + case CNcdInstallInfo::ENcdInstallJar: // flow through + case CNcdInstallInfo::ENcdInstallJad: + { + Installer().SilentInstallJavaL( + iFileHandle, + aFile.MimeType(), + aFile.Data(), + SilentInstallOptionsPackage() ); + break; + } + + + default: + { + // All cases should be handled + DASSERT( 0 ); + break; + } + } + DLTRACEOUT(("")); + } + + +const SwiUI::TInstallOptionsPckg& CNcdSilentInstallOperationProxy::SilentInstallOptionsPackage() const + { + DLTRACEIN(("")); + return iInstallOptionsPackage; + }