/*
* Copyright (c) 2007 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: This file contains the header file of the WidgetInstaller class.
*
*
*
*/
#ifndef WIDGETINSTALLER_H
#define WIDGETINSTALLER_H
// INCLUDES
#include <e32base.h>
#include <widgetregistryclient.h>
#ifdef _DEBUG
#include <flogger.h>
#endif
// FORWARD DECLARATIONS
class CWidgetConfigHandler;
class CWidgetRegistrationManager;
// CLASS DECLARATION
/**
* This class is provided for callback to notify icon conversion completion.
* @lib WidgetInstallerUI.lib
* @since 3.1
*/
class MConverterController
{
public:
/**
* notify icon conversion completion
*/
virtual void NotifyCompletionL( TInt aErr ) = 0;
};
/**
* This class handles the install.
*
* @lib WidgetBackupRestore.exe
* @since 3.1
*/
NONSHARABLE_CLASS(CWidgetInstaller) : public CBase, MConverterController
{
public: // Constructors and destructor
/**
* Two-phased constructor.
*/
IMPORT_C static CWidgetInstaller* NewL();
/**
* Destructor.
*/
virtual ~CWidgetInstaller();
public: // New functions
/**
* Handle install request.
* @since 3.1
*/
IMPORT_C void InstallL( TDesC16& aRestoreDir );
/**
* Called when installation or update is finished,
* do the final steps of registration, file clean up (remove
* temporary files, display complete message.
* Or handle error.
*/
IMPORT_C void FinishInstallL( TInt aErr );
/**
* @since 3.2
*/
IMPORT_C TInt RunError( TInt aError );
/**
* Rebuild registry properties (except UID) from installed widget dir.
*
* @param aFs: file session to use
* @param aWidgetPath: path to main widget dir (icon path)
* @param aLproj: language project name for localization (from registry)
* @param aUid: the UID to assign to the widget
* @since 5.0
*/
IMPORT_C RPointerArray<CWidgetPropertyValue>* WidgetPropertiesFromInstalledWidgetL(
RFs &aFs,
const TDesC& aWidgetPath, /* should end with backslash */
const TDesC& aLproj,
TUid aUid );
/**
* If widget registry entry is assigned a new UID, then the
* processed icon file (mbm file), if any, needs to be renamed
* with the new UID.
*
* @param aFs: file session to use
* @param aEntry: widget entry as stored in the registry
* @since 5.0
*/
IMPORT_C TInt RenameIconFile( RFs &aFs,
RPointerArray<CWidgetPropertyValue>* aEntry );
/**
* @since 5.0
*/
IMPORT_C void RegisterWidgetL( const TDesC& aMainHTML,
const TDesC& aBundleDisplayName,
const TDesC& aIconPath,
const TDesC& aDriveName,
const TUid& aUid );
/**
* @since 5.0
*/
IMPORT_C void DeregisterWidgetL( const TUid& aUid );
private:
/**
* C++ default constructor.
* @param aRequestStatus - Status of the request.
*/
CWidgetInstaller();
/**
* 2nd phase constructor.
*/
void ConstructL();
/**
* Create widget entry by parsing the info.plist, insert the entry into the entry list
* if the entry is not already existing.
* @return the existed widget's index if already present
* @since 3.1
*/
TInt PreprocessWidgetBundleL( TDesC& aRestoreDir );
/**
* Fix the widget properties need to restore from the backup
* @return void
* @since 5.0
*/
void FixWidgetPropsL();
void ProcessRestoreDirL( TDesC& aRestoreDir );
/**
* Set drive to C: to install/update the widget
* @return true if no error, Leaves if drive space is not sufficient
* @since 3.2
*/
TBool SetDriveAndCheckSpaceL();
/**
* update basepath of widget
* @since 3.2
*/
void UpdateWidgetBasePathL( TDriveUnit& aDrive );
/**
* When overwriting an installed widget, backup so can restore on error
* @since 3.2
*/
void BackupL();
/**
* When overwriting an installed widget, restore on error
* @since 3.2
*/
void RestoreL();
TInt DriveInfo( TInt aDrive, TInt64& aDiskSpace );
/**
* Return the name of file/dir found given path of dir to search in and search critiria.
* @Since 3.2
* @param aDir: in param, bundle ID, e.g. com.yahoo.local.widget.traffic
* @param aFoundName: out param,
*/
TInt SearchByExtL( const TDesC& aDir, TUint aSortKey, const TDesC& aExt, TFileName& aFoundName );
TInt GetDirSizeL( const TDesC& aDir );
/**
* Return the name of dir which contains info.plist file.
*
* @param aDir: in param, bundle ID, e.g. com.yahoo.local.widget.traffic
* @param aFoundName: out param,
*/
TInt SearchWidgetRootL( const TDesC& aDir, TFileName& aFoundName );
/**
* ConvertIconL
* Specific to WidgetPreInstaller
* converts Icon.png to mbm
* @Since 5.0
*/
void ConvertIconL( TUid& aUid, const TDesC& aIconPath );
public: // From MConverterController
/**
* Used for notify icon convertion complete
* @since 5.0
*/
void NotifyCompletionL( TInt aErr ) ;
private: // Data
TBool iOverwriting;
CFileMan* iFileMgr; // owned
RFs iRfs; // owned
RWidgetRegistryClientSession iRegistry;
TBool iServerConnected; // to Widget Registry server
CWidgetConfigHandler* iWidgetConfigHandler; // owned
CWidgetRegistrationManager* iAppManager; // owned
TFileName iOriginalDir; // for overwrite backup/restore
TFileName iBackupDir; // for overwrite backup/restore
TFileName iBundleRootName; // e.g. yahooTraffic.wdgt
// these values mainly come from parsing bundle metadata file
// (info.plist) and are passed to WidgetRegistry for registration.
RPointerArray<CWidgetPropertyValue> iPropertyValues;
#ifdef _DEBUG
RFileLogger iFileLogger;
TBool iCanLog;
#endif
};
#endif // WIDGETINSTALLER_H
// End of File