supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_resourceutils.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:06:48 +0200
changeset 0 667063e416a2
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2009 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: Resource utilities 
*
*/

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//
void FindResourceFileL( 
    RFs& aFsSession,
    const TDesC& aFilePathAndName,
    TFileName& aRscFile )
    {
    TParse parse;
    parse.Set( aFilePathAndName, NULL, NULL );
    
    TFindFile finder( aFsSession );
    if ( finder.FindByDir( parse.NameAndExt(), parse.Path() ) == KErrNone )
        {
        aRscFile.Copy( finder.File() );
        }
    else
        {
        User::Leave( KErrNotFound );
        }
    }
    
    
// -----------------------------------------------------------------------------
// COMASuplSession::ShowOfflineNoteL
//  
// -----------------------------------------------------------------------------
void FindLocalizedResourceFileL( 
    RFs& aFsSession, 
    const TDesC& aRscFile,
    TFileName& aFileName )
    {
    TFileName fileName( aRscFile );

    TParse parse;
    parse.Set( aRscFile, NULL, NULL );

    // look on c: drives first
    BaflUtils::NearestLanguageFile( aFsSession, fileName );
    
    const TInt KLangPartOfExtensionLen = 2;
    
    TBool found = ( fileName.Right( KLangPartOfExtensionLen ) != 
                    aRscFile.Right( KLangPartOfExtensionLen ) );
    
    if ( !found )
        {
        // look on other drives
        TDriveList drives;
        aFsSession.DriveList( drives );

        for ( TInt drive = EDriveZ; drive >= EDriveA; drive-- )
            {
            if ( drive != EDriveC ) // already checked
                {
                TDriveInfo drvInfo;
                aFsSession.Drive( drvInfo, drive );
                
                if ( drvInfo.iType != EMediaNotPresent )
                    {
                    TChar drv;
                    aFsSession.DriveToChar( drive, drv );

                    fileName.Zero();
                    fileName.Append( drv );
                    fileName.Append( KDriveDelimiter );
                    fileName.Append( parse.Path() );
                    fileName.Append( parse.NameAndExt() );

                    // look on c: and this drive
                    BaflUtils::NearestLanguageFile( aFsSession, fileName );

                    found = ( fileName.Right( KLangPartOfExtensionLen ) != 
                              aRscFile.Right( KLangPartOfExtensionLen ) );
                    if ( found ) break;
                    }
                }
            }
        }
        
    if ( found )
        {
        aFileName.Copy( fileName );
        }
    else
        {
        // localized file not found, try using SC
        FindResourceFileL( aFsSession, aRscFile, aFileName );
        }
    }

//////////////////////////////////////////////////////////////
HBufC* LoadResourceTextL( 
    RFs& aFsSession, 
    const TDesC& aRscFile, 
    TInt aResourceId )
    {
 
    TFileName fileName;
    FindLocalizedResourceFileL( aFsSession, aRscFile, fileName );

    CResourceFile* resFile = CResourceFile::NewL( aFsSession, fileName, 0, 0 );
    CleanupStack::PushL( resFile );
    resFile->ConfirmSignatureL( 0 );
    
    RResourceReader reader;
    reader.OpenL( resFile, aResourceId );
    CleanupClosePushL( reader );
    
    HBufC* text = reader.ReadHBufC16L();
    
    CleanupStack::PopAndDestroy( &reader );
    CleanupStack::PopAndDestroy( resFile );
    return text;  

    }