ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp
changeset 0 ba25891c3a9e
child 11 3ba40be8e484
--- /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;
+    }