commonuis/CommonUi/src/DocAppInstHandler.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuis/CommonUi/src/DocAppInstHandler.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2002-2008 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:  Implementation of app installer handler.
+*
+*/
+
+
+// INCLUDE FILES
+#include "DocAppInstHandler.h"
+#include "DocAppInstLauncher.h"
+#include <charconv.h>
+#include <utf.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CDocAppInstHandler::CDocAppInstHandler(
+    const TDataType& aDataType,
+    const TUid& aUid,
+    CDocumentHandler* aDocDispatcher,
+    TDocServiceMode aServiceMode ) : 
+        CDocDefaultHandler( aDataType, aUid, aDocDispatcher, aServiceMode ),
+        iCallWithParams( EFalse ),
+        iHeapURL( NULL ),
+        iParamDescriptor( NULL ),
+        iUseDescriptor( EFalse )
+    {
+    } 
+
+// Two-phased constructor.
+//
+CDocAppInstHandler* CDocAppInstHandler::NewL(
+    const TDataType& aDataType,
+    const TUid& aUid,
+    CDocumentHandler* aDocDispatcher,
+    TDocServiceMode aServiceMode )
+    {
+    CDocAppInstHandler *self = 
+        new ( ELeave ) CDocAppInstHandler( aDataType,  
+                                           aUid, aDocDispatcher, 
+                                           aServiceMode ); 
+    CleanupStack::PushL( self );
+    self->BaseConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+        
+// Destructor
+//
+CDocAppInstHandler::~CDocAppInstHandler()
+    {
+    if ( iLauncher )
+        {
+        iLauncher->Cancel();
+        }
+    delete iLauncher;  
+    delete iParamPckg;  
+    delete iHeapURL; //URL
+    delete iParamDescriptor; //Params+URL
+    }
+    
+
+// ---------------------------------------------------------
+// CDocAppInstHandler::AddToParamListL()
+// Add parameters (gives as parameter) to installer spesific parameter list
+// ---------------------------------------------------------
+//    
+void CDocAppInstHandler::AddToParamListL(const CAiwGenericParamList& aParams)
+    {
+    TInt index = 0;
+    const TAiwGenericParam* param = NULL;
+    SwiUI::TInstallReq params; 
+    
+    iCallWithParams = EFalse;
+    iUseDescriptor = EFalse;
+       
+    // Installer wants some parameters from Browser. Convert parameters 
+    // (if there are any) from aParams to installer used format.
+    if ( aParams.Count() ) 
+        {
+        //TInstallReq.iCharsetId
+        param = aParams.FindFirst(index, EGenericParamCharSet, EVariantTypeDesC);
+        if (index >= 0 && param)
+            {
+            TPtrC charset;
+            param->Value().Get(charset);
+            
+            HBufC8* charset8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( charset );
+            
+            CCnvCharacterSetConverter* conv = CCnvCharacterSetConverter::NewLC();            
+            params.iCharsetId = conv->ConvertStandardNameOfCharacterSetToIdentifierL( *charset8, iFs );
+            CleanupStack::PopAndDestroy();   // conv
+            
+            delete charset8;
+            iCallWithParams = ETrue;
+            }
+        //TInstallReq.iIAP;	
+        index = 0;
+        param = aParams.FindFirst(index, EGenericParamAccessPoint, EVariantTypeTInt32);
+        if (index >= 0 && param)
+            {
+            TInt32 accesspoint;
+            param->Value().Get(accesspoint);
+            params.iIAP = accesspoint;
+            iCallWithParams = ETrue;
+            }	
+        //TInstallReq.iSourceURL;
+        index = 0;	
+        param = aParams.FindFirst(index, EGenericParamURL, EVariantTypeDesC);
+        if (index >= 0 && param)
+            {
+            TPtrC sourceURL;
+            param->Value().Get(sourceURL);      	
+            // params.iSourceURL = sourceURL; // removed because TSW JROL-7B8K6H
+            iCallWithParams = ETrue;
+            // Alloc URL from heap.
+            iHeapURL = sourceURL.AllocL();
+            iUseDescriptor = ETrue;
+            }	
+        //TInstallReq.iMIME;
+        if ( iCallWithParams )
+            {
+            params.iMIME = iDataType.Des8();
+            }	
+
+        // Ok we have all params + url in the descriptor.
+        if ( iUseDescriptor )
+            {
+            // Set params to pckg buffer.
+            SwiUI::TInstallReqPckg regPckg( params );
+            // Alloc heap buffer: 800bytes + 4bytes + size of URL
+            iParamDescriptor = HBufC8::NewL(
+                sizeof( regPckg ) +
+                sizeof( TInt32 ) +
+                iHeapURL->Size() );
+
+            TPtr8 iParamDesPtr = iParamDescriptor->Des();
+            // Copy parameters to 8-bit descriptor
+            RDesWriteStream stream( iParamDesPtr );
+            CleanupClosePushL( stream );
+            stream.WriteL( regPckg );
+            // Note length must be set always. Even if it is zero.
+            stream.WriteInt32L( iHeapURL->Length() );
+            stream.WriteL( *iHeapURL );
+            CleanupStack::PopAndDestroy( &stream );
+            }
+        }
+    iParamPckg = new ( ELeave ) SwiUI::TInstallReqPckg (params);
+    }
+
+// ---------------------------------------------------------
+// CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle)
+// 
+// ---------------------------------------------------------
+//        
+TInt CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle)
+    {
+    // Installer won't be embedded -> Forward to stand-alone version
+    return OpenFileL(aFileHandle);
+    }
+
+// ---------------------------------------------------------
+// CDocAppInstHandler::OpenFileEmbeddedL(RFile& aFileHandle)
+// 
+// ---------------------------------------------------------
+//        
+TInt CDocAppInstHandler::OpenFileL(RFile& aFileHandle)
+    {
+    #ifdef _DEBUG        
+    RDebug::Print( _L("DocumentHandler: CDocAppInstHandler::OpenFileL Called"));
+    #endif 
+    
+    iLauncher = CDocAppInstLauncher::NewL();  
+    iLauncher->SetExitObserver( this );  
+    
+    if ( iCallWithParams )
+        {
+        if ( iUseDescriptor )
+            {
+            iLauncher->InstallL( aFileHandle, *iParamDescriptor );
+            }
+        else
+            {
+            iLauncher->InstallL( aFileHandle, *iParamPckg );
+            }
+        }
+    else
+        {
+        iLauncher->InstallL( aFileHandle ); 
+        } 
+         
+    #ifdef _DEBUG        
+    RDebug::Print( _L("DocumentHandler: CDocAppInstHandler::OpenFileL Returns.")) ;
+    #endif 
+    return SetAndReturnStatus( KErrNone );  // If we're still here, everything is ok.
+    }
+
+//  End of File