menucontentsrv/srvinc/mcssuitehandler.h
changeset 0 79c6a41cd166
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menucontentsrv/srvinc/mcssuitehandler.h	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 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:  
+*
+*/
+
+#ifndef MCSSUITEHANDLER_H_
+#define MCSSUITEHANDLER_H_
+
+#include <e32base.h>
+#include <f32file.h>
+
+
+#include "menusvrsuite.h"
+#include "mcsinstallnotifier.h"
+#include "menuengoperation.h"
+#include "mcsmmcobserver.h"
+#include "mcsfreespaceobserver.h"
+
+class CMenuEng;
+class TMenuItem;
+
+/**
+ *  Suite Handler.
+ *  @lib mcsdrmhandler.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CMcsSuiteHandler ): 
+    public CBase, MMcsInstallListener, MMenuEngOperation, MMcsMmcObserver,
+        MMcsFreeSpaceObserver
+    {
+public:
+    
+    /**
+    * Two-phased constructor. Leaves on failure.
+    * @return The constructed object.
+    */
+    static CMcsSuiteHandler* NewL( 
+        CMenuEng& aEng, const TDesC& aDirName );
+    
+    /**
+    * Destructor.
+    * @since S60 v5.0
+    * @capability None.
+    * @throws None.
+    * @panic None.
+    */
+    virtual ~CMcsSuiteHandler();
+    
+    /**
+     * Check if suite of given name is present
+     * in handler.
+     */
+    TBool HaveSuite(const TDesC& aSuiteName);
+    
+    /**
+     * Get attribute from suite handler.
+     */
+    void GetAttribute( const TDesC& aSuiteName, const TDesC& aAttrName, 
+               TBool& aAttrExists, TDes& aAttrVal );
+    
+private:
+
+    /**
+    * Execute engine operation:
+    * Do the application scan and update menu accordingly.
+    */
+    void RunMenuEngOperationL();
+    void CompletedMenuEngOperation( TInt aErr );
+    /**
+    * Constructor.
+    */
+	CMcsSuiteHandler( CMenuEng& aEng );
+
+    /**
+    * 2nd phase constructor.
+    */
+    void ConstructL(const TDesC& aDirName);
+    
+    /**
+     * Handle Install Event
+     */
+    void HandleInstallNotifyL(TInt aEvent);
+    
+    /**
+     * Handle Mmc Event
+     */
+    void HandleMmcEventL(TInt aEvent);
+    
+    /**
+     * Handle Free Space Event.
+     */
+    void HandleFreeSpaceEventL();
+    /**
+     * Lists new suits
+     */
+    void CheckSuiteDirL();
+    
+    /**
+     * Add new suits
+     */
+    void AddNew();
+    
+    /**
+     * Remove old suits 
+     */
+    void RemoveOld();
+    
+	/**
+	* Removes not installed suites from content xml file(basically during restore) 
+	* @since S60 v5.0.
+	*/
+    void ScanSuitesL();
+    
+    
+    /**
+     * Check if file is installed
+     */
+    TBool FileInstalled(const TDesC& aFileName);
+    
+    /**
+     * Check if file was removed from installed file list
+     */
+    TBool FileUninstalled(const TDesC& aFileName);
+    
+    /**
+     * Check if file need Update
+     * @param aTimestamp - actual timestamp of file 
+     */
+    TBool FileNeedUpdate(const TDesC& aFileName, const TTime& aTimestamp);
+
+    /**
+     * Validates file extansion
+     */
+    TBool ValidExtansion(const TDesC& aFileName);
+    
+    /**
+     * Install file with suites
+     */
+    void InstallFileL(const TDesC& aFileName, const TTime& aTimestam);
+    
+    /**
+     * Removes file with suites
+     */
+    void UninstallFileL(const TDesC& aFileName);
+    
+    /**
+     * Update file with suites
+     */
+    void UpdateFileL(const TDesC& aFileName, const TTime& aTimestam);
+    
+    /**
+     * Get suites from a file
+     */
+    void GetSuitesL(const TDesC& aFileName, RPointerArray<CSuiteObject>& aSuiteArray);
+    
+    /*
+     * Reopen older suite. Used when deleteing suite that was replaced by newer one.
+     */
+    void ReopenSuiteL(TInt aSuiteArrayPos);
+
+	/**
+	* Append suite items to array
+	* @since S60 v5.0.
+	* @param aItemArray array to append suite items 
+	* @param aAttrName attribute name
+	* @param aAttrValue attribute value
+	*/
+    void GetMenuSuitesL( 
+    		RArray<TMenuItem>& aItemArray, 
+    		const TDesC& aAttrName, 
+    		const TDesC& aAttrValue );
+
+    
+    /**
+     * Addes or updates suite
+     */
+    void AddSuiteL( const TPtrC& aSuiteName );
+  
+    /**
+     * Removes suite
+     */
+    void RemoveSuiteFromXmlL( const TPtrC& aSuiteName );
+    
+	/**
+	* Updates suites in content xml file
+	* @since S60 v5.0.
+	* @param aMcsItems suite items
+	* @param aIndex index of suite item to update
+	*/
+    void UpdateSuiteInXmlL( 
+    		RArray<TMenuItem> & aMcsItems, 
+    		TInt aIndex );
+    
+    /**
+     * Addes suite to main xml file
+     */
+    void AddSuiteToXmlL( const TPtrC& aSuiteName );
+    
+    
+    void UpdateItemsL( const RArray<TMenuItem>& aItemArray );
+    
+private:    // data
+    CMenuEng& iEng ; ///< Engine. Not Own.
+    RFs iFs; ///< File Server. Own.
+    RBuf iDirPath; ///< Path to observerd dir. Own.
+    CDesCArrayFlat* iFileNewList; ///< List of new files in dir. Own.
+    CDesCArrayFlat* iInstalledFileList; ///< List of installed suites. Own.
+    RArray<TTime> iNewTimestamps; ///< List of current files' timestamps. Own.
+    RArray<TTime> iTimestamps; ///< List of files' timestamps when isntalled. Own.
+    CMcsInstallNotifier* iInstallNotifier; ///< Own
+    CMcsMmcObserver* iMmcObserver;
+    CMcsFreeSpaceObserver* iFreeSpaceObserver; /// Free space observer. Own.
+    RMenuSrvSuiteArray iSuites; ///< Suite array. Own.
+    TInt iEvent;/// < last event. Own
+    };
+
+#endif /* MCSSUITEHANDLER_H_ */