csxhelp/HelpEngine/inc/CSXHRuntimeIndexing.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:56 +0100
branchRCL_3
changeset 18 cbffe13eac63
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201031 Kit: 201035

/*
* Copyright (c) 2006 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:  This is a utility class that provides functionality
*                for scanning app help folder, generate index XML
*                at runtime, and also update it if any install/uninstall        
*
*/

#ifndef CSXHRUNTIMEINDEXING_H
#define CSXHRUNTIMEINDEXING_H

// INCLUDES
#include <e32base.h>
#include <f32file.h>

// CONSTANTS
// the help content folder doesn't exist
const TInt KNoDirExist = -3;
// there is no changes in help content folder (like install/uninstall)
const TInt KNoChange = -2;
// there is no index.xml file (due to no help content at previous time)
const TInt KNoIndexExist = -1;

// FORWARD CLASS DECLARATION
class CCSXHHtmlTOC1;
class CCSXHKywdTOC1;
class CCoeEnv;

/*
 * runtime indexing handling class
 * responsible for generating index file, maintaining it.
 * this class also create CS X Help private folder if not exist
 * 
 */
class CCSXHRuntimeIndexing : public CBase
    {
public:

    /*
     * constructor
     */
    CCSXHRuntimeIndexing();
    /*
    
     * destructor
     */
    ~CCSXHRuntimeIndexing();
    
    /*
     * Two-phase constructor
     */
    static CCSXHRuntimeIndexing* NewL();
    
    /*
     * Generate the master index file content
     * @param aToc1: TOC1 object which contains main topic information
     * @param aFeature: Feature information, supported by Feature Mgr
     */
    void RuntimeGenerateIndexL( const CCSXHHtmlTOC1& aToc1, const TDesC& aFeature );
    
    /*
     * Check whether master index exist
     * Since Z based helps must exist
     * Usage: to determine Help was launched before
     */
    TBool IndexFileExistsL();
    
    /*
     * create temporary index file
     * this file will be saved to C:\\private\\<help-uid>\\<aDrive>\\<lang-id>\\
     * @param: aDrive Drive information
     */
    void BeginIndexFileL( const TChar& aDrive );
    
    /*
     * close the temporary index file, and rename it to index.xml formally
     * tmp.xml -> index.xml
     * this function can backup index.xml, once exception happens
     */
    void FinishAndCloseIndexFileL();
    
    /*
     * Get help application private path in C drive
     * @param aName[out] return help app private path in C
     */
    void GetPrivatePath( TDes& aName );
    
    /*
     * Get proper locale, and append it to descriptor
     * for more information about proper locale
     *   please refer to BaflUtils::GetDowngradePathL
     * @param aDir[out] append proper locale
     */
    void AppendLocaleL( TDes& aDir );
    
    /*
     * Delete master index file, particular in C: or E: or F: (user disk)
     * this will only occur when user remove all custom helps, no more helps folder
     *   in this case, custom index mustn't exist.
     * @param aDrive the file to be deleted
     */
    void DeleteIndexFileL( const TChar& aDrive );
    
    /*
     * Check if helps folder changed
     * changes include: 
     *        A: install new application
     *        B: uninstall (if unistall all helps, custom helps folder will also removed)
     *        C: user changed the language
     *        D: user restored the cell phone
     * @param aName[out] return help app private path in C
     */
    TInt CheckDirChangeL( const TChar& aDrive );
    
private:

    /*
     * two-phase constructor, private
     */
    void ConstructL();
    
private:

    /*
     * buff current index file name
     * owned
     */
    HBufC* iFullDirName;
    
    /*
     * CoeEnv
     * not owned
     */
    CCoeEnv * iCoeEnv;
    
    /*
     * current index file handle
     */
    RFile iFile;
    
    /*
     * actually it's iFullDirName's drive letter
     * for more convenient, keep it as a class member
     */
    TChar iDriveLetter;
    
    };
    
#endif // CSXHRUNTIMEINDEXING_H