diff -r 000000000000 -r ba25891c3a9e installationservices/swi/source/sishelper/launcher.cpp --- /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 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& 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& 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 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& 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& 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 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& 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& 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