installationservices/swi/source/sishelper/launcher.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/sishelper/launcher.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 1997-2009 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: 
+* Launcher static class is used by clients (EpocInstall, Installer UI, or 
+* Control Panel applet) to start installation or uninstallation.
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "swi/launcher.h"
+#include "uissclienthandler.h"
+#include "../uiss/server/uissserver.h"
+#include "sisuihandler.h"
+#include "installclientserver.h"
+#include "sishelper.h"
+#include "log.h"
+
+#include "sisregistrypackage.h"
+#include "sisregistrysession.h"
+#include "sisregistryentry.h"
+
+
+namespace Swi
+{
+
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler, 
+								const TFileName& aFileName,
+								const CInstallPrefs& aInstallPrefs)
+	{
+	DEBUG_PRINTF2(_L("Sis Helper without Device supported languages - Launching Syncronous Install by filename, SIS: %S."),
+		&aFileName);
+	RArray<TInt> deviceSupportedLanguages;
+	TRAPD(err, err=InstallL(aUiHandler, aFileName, aInstallPrefs,deviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper without Device supported languages - Install Result Was %d."), err);
+	return err;
+
+	}
+
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler, 
+								const TFileName& aFileName,
+								const CInstallPrefs& aInstallPrefs, const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	DEBUG_PRINTF2(_L("Sis Helper with Device supported languages - Launching Syncronous Install by filename, SIS: %S."),
+		&aFileName);
+	TRAPD(err, err=InstallL(aUiHandler, aFileName, aInstallPrefs,aDeviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper with Device supported languages - Install Result Was %d."), err);
+	return err;
+	}
+
+
+TInt Launcher::InstallL(MUiHandler& aUiHandler, 
+						const TFileName& aFileName,
+						const CInstallPrefs& aInstallPrefs,
+						const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	TSisHelperStartParams params(aFileName);
+	RThread server;
+	TInt err = CSisHelperServer::StartSisHelper(params, server);
+	
+	if (err == KErrNone)
+		{
+		// Connect to UISS and start installation using asynchronous calls
+		// and reverse completion
+		CleanupClosePushL(server);
+		CUissClientHandler* uissHandler = CUissClientHandler::NewLC(aUiHandler, false);
+		CleanupStack::Pop(2,&server);
+		CleanupStack::PushL(uissHandler);
+		
+		TRequestStatus requestStatus;
+		uissHandler->InstallL(aInstallPrefs, aDeviceSupportedLanguages, requestStatus, server);
+		uissHandler->WorkUntilCompleteL();
+		User::WaitForRequest(requestStatus);
+		err = requestStatus.Int();
+		
+		CleanupStack::PopAndDestroy(uissHandler);
+		}
+	return err;
+	}
+
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler,
+								RFile& aFileHandle, 
+								const CInstallPrefs& aInstallPrefs)
+	{
+	DEBUG_PRINTF(_L8("Sis Helper without Device supported languages - Launching Syncronous Install by filehandle."));
+	RArray<TInt> deviceSupportedLanguages;
+	TRAPD(err, err=InstallL(aUiHandler, aFileHandle, aInstallPrefs,deviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper without Device supported languages - Install Result Was %d."), err);
+	return err;
+
+	}
+
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler,
+								RFile& aFileHandle, 
+								const CInstallPrefs& aInstallPrefs,
+								const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	DEBUG_PRINTF(_L8("Sis Helper with Device supported languages - Launching Syncronous Install by filehandle."));
+	TRAPD(err, err=InstallL(aUiHandler, aFileHandle, aInstallPrefs,aDeviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper with Device supported languages - Install Result Was %d."), err);
+	return err;
+	}
+
+	
+TInt Launcher::InstallL(MUiHandler& aUiHandler,
+						RFile& aFileHandle, 
+						const CInstallPrefs& aInstallPrefs,
+						const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	TSisHelperStartParams params(aFileHandle);
+	RThread server;
+	TInt err = CSisHelperServer::StartSisHelper(params, server);
+
+	if (err == KErrNone)
+		{
+		// Connect to UISS and start installation using asynchronous calls
+		// and reverse completion
+		CleanupClosePushL(server);
+		CUissClientHandler* uissHandler = CUissClientHandler::NewLC(aUiHandler, false);
+		CleanupStack::Pop(2,&server);
+		CleanupStack::PushL(uissHandler);
+		
+		TRequestStatus requestStatus;
+		uissHandler->InstallL(aInstallPrefs, aDeviceSupportedLanguages, requestStatus, server);
+		uissHandler->WorkUntilCompleteL();
+		User::WaitForRequest(requestStatus);
+		err = requestStatus.Int();
+		
+		CleanupStack::PopAndDestroy(uissHandler);
+		}
+	return err;
+	}
+
+
+//
+// An override that takes a data provider interface pointer instead of a 
+// file name
+//
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler,
+								MSisDataProvider& aDataProvider, 
+								const CInstallPrefs& aInstallPrefs)
+	{
+	DEBUG_PRINTF(_L8("Sis Helper without Device supported languages - Launching Syncronous Install by filehandle."));
+	RArray<TInt> deviceSupportedLanguages;
+	TRAPD(err, err=InstallL(aUiHandler, aDataProvider, aInstallPrefs,deviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper without Device supported languages - Install Result Was %d."), err);
+	return err;
+	}
+
+EXPORT_C TInt Launcher::Install(MUiHandler& aUiHandler,
+								MSisDataProvider& aDataProvider, 
+								const CInstallPrefs& aInstallPrefs,
+								const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	DEBUG_PRINTF(_L8("Sis Helper with Device supported languages - Launching Syncronous Install by filehandle."));
+	TRAPD(err, err=InstallL(aUiHandler, aDataProvider, aInstallPrefs,aDeviceSupportedLanguages));
+	DEBUG_PRINTF2(_L8("Sis Helper with Device supported languages - Install Result Was %d."), err);
+	return err;
+	}
+
+
+TInt Launcher::InstallL(MUiHandler& aUiHandler,
+						MSisDataProvider& aDataProvider, 
+						const CInstallPrefs& aInstallPrefs,
+						const RArray<TInt>& aDeviceSupportedLanguages)
+	{
+	TSisHelperStartParams params(aDataProvider);
+	RThread server;
+	TInt err = CSisHelperServer::StartSisHelper(params, server);
+	
+	if (err == KErrNone)
+		{
+		// Connect to UISS and start installation using asynchronous calls
+		// and reverse completion
+		CleanupClosePushL(server);
+		CUissClientHandler* uissHandler = CUissClientHandler::NewLC(aUiHandler, false);
+		CleanupStack::Pop(2,&server);
+		CleanupStack::PushL(uissHandler);
+		
+		TRequestStatus requestStatus;
+		uissHandler->InstallL(aInstallPrefs, aDeviceSupportedLanguages, requestStatus, server);
+		uissHandler->WorkUntilCompleteL();
+		User::WaitForRequest(requestStatus);
+		err = requestStatus.Int();
+		
+		CleanupStack::PopAndDestroy(uissHandler);
+		}
+	return err;
+	}
+	
+
+
+EXPORT_C TInt Launcher::Uninstall(MUiHandler& aUiHandler, const TUid& aUid)
+	{
+	DEBUG_PRINTF2(_L8("Sis Helper - Launching uninstall by UID 0x%08x."), aUid.iUid);
+	
+	CSisRegistryPackage* package=NULL;
+
+	TRAPD(err, package = CSisHelperServer::MainPackageEntryL(aUid));
+	
+	if (err==KErrNone && package)
+		{
+		// Uninstall base index
+		package->SetIndex(0);
+
+		TRAP(err, err=UninstallL(aUiHandler, *package));
+		}
+	
+	delete package;
+	
+	DEBUG_PRINTF2(_L8("Sis Helper - Uninstall Result Was %d."), err);
+	return err;
+	}
+
+EXPORT_C TInt Launcher::Uninstall(MUiHandler& aUiHandler, const CSisRegistryPackage& aPackage)
+	{
+	DEBUG_PRINTF4(_L("Sis Helper - Launching uninstall by package. UID: 0x%08x, Name: %S, Vendor: %S."),
+		aPackage.Uid().iUid, &(aPackage.Name()), &(aPackage.Vendor()));
+	
+	TRAPD(err, err=UninstallL(aUiHandler, aPackage));
+	
+	DEBUG_PRINTF2(_L8("Sis Helper - Uninstall result was %d."), err);
+	return err;
+	}
+
+TInt Launcher::UninstallL(MUiHandler& aUiHandler, const CSisRegistryPackage& aPackage)
+	{
+	// Connect to UISS and start uninstallation using asynchronous calls
+	// and reverse completion
+	CUissClientHandler* uissHandler = CUissClientHandler::NewLC(aUiHandler, false);
+	
+	TRequestStatus requestStatus;
+	uissHandler->UninstallL(aPackage, requestStatus);
+	uissHandler->WorkUntilCompleteL();
+	User::WaitForRequest(requestStatus);
+	
+	CleanupStack::PopAndDestroy(uissHandler);
+	return requestStatus.Int();
+	}
+
+///\short Cancels [un]installation in progress.
+EXPORT_C int Launcher::Cancel()
+	{
+	RUissSession serverSession;
+	TInt err=serverSession.Connect();
+	
+	if (err<0)
+		{
+		return err;
+		}
+	
+	err=serverSession.Cancel();
+	
+	serverSession.Close();
+	return err;
+	}
+
+} // namespace Swi