--- /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 <s32strm.h>
+#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;
+ }