diff -r 1a6714c53019 -r cce62ebc198e radioengine/settings/src/cradiosettingsimp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/src/cradiosettingsimp.cpp Tue Aug 31 15:15:02 2010 +0300 @@ -0,0 +1,234 @@ +/* +* 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: +* +*/ + +// System includes +#include +#include +#include +#include +#include + +// User includes +#include "cradiosettingsimp.h" +#include "cradioapplicationsettings.h" +#include "cradioenginesettings.h" +//#include "radioengineutils.h" +#include "cradioenginelogger.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioSettingsImp* CRadioSettingsImp::NewL() + { + LEVEL3( LOG_METHOD_AUTO ); + CRadioSettingsImp* self = new (ELeave) CRadioSettingsImp; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioSettingsImp::ConstructL() + { + LEVEL3( LOG_METHOD_AUTO ); + iFsSession = new ( ELeave ) RFs; + User::LeaveIfError( iFsSession->Connect() ); + + // Constructs the implementors of the interfaces. + iApplicationSettings = CRadioApplicationSettings::NewL(); + iEngineSettings = CRadioEngineSettings::NewL( *this ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioSettingsImp::CRadioSettingsImp() + { + LEVEL3( LOG_METHOD_AUTO ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioSettingsImp::~CRadioSettingsImp() + { + LEVEL3( LOG_METHOD_AUTO ); + delete iEngineSettings; + delete iApplicationSettings; + if ( iFsSession ) + { + iFsSession->Close(); + } + delete iFsSession; + } + +// --------------------------------------------------------------------------- +// Determines if region is allowed. +// --------------------------------------------------------------------------- +// +TBool CRadioSettingsImp::IsRegionAllowed( TRadioRegion aRegionId ) const + { + LEVEL3( LOG_METHOD_AUTO ); + return iEngineSettings->IsRegionAllowed( aRegionId ); + } + +// --------------------------------------------------------------------------- +// Returns the application settings interface. +// --------------------------------------------------------------------------- +// +MRadioApplicationSettings& CRadioSettingsImp::ApplicationSettings() const + { + LEVEL3( LOG_METHOD_AUTO ); + return *iApplicationSettings; + } + +// --------------------------------------------------------------------------- +// Returns the radio settings interface. +// --------------------------------------------------------------------------- +// +MRadioEngineSettings& CRadioSettingsImp::EngineSettings() const + { + LEVEL3( LOG_METHOD_AUTO ); + return *iEngineSettings; + } + +// --------------------------------------------------------------------------- +// Returns the radio settings setter interface. +// --------------------------------------------------------------------------- +// +MRadioSettingsSetter& CRadioSettingsImp::RadioSetter() const + { + LEVEL3( LOG_METHOD_AUTO ); + return *iEngineSettings; + } + +// --------------------------------------------------------------------------- +// Static version of ResolveDriveL. +// --------------------------------------------------------------------------- +// +void CRadioSettingsImp::ResolveDriveL( TFileName& aFileName, const TDesC& aPath ) + { + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aFileName = %S, aPath = %S", &aFileName, &aPath ) ); + + TFileName fileName; + TFileName baseResource; + TFindFile finder( *iFsSession ); + TLanguage language( ELangNone ); + + _LIT( resourceFileExt, ".rsc" ); + _LIT( resourceFileWildExt, ".r*" ); + + TParsePtrC parse( aFileName ); + TBool isResourceFile = ( parse.Ext() == resourceFileExt() ); + + TInt err = KErrUnknown; + if ( isResourceFile ) + { + CDir* entries = NULL; + fileName.Copy( parse.Name() ); + fileName.Append( resourceFileWildExt() ); + err = finder.FindWildByDir( fileName, aPath, entries ); + delete entries; + } + else + { + // TFindFile applies search order that is from + // drive Y to A, then Z + err = finder.FindByDir( aFileName, aPath ); + } + + LEVEL3( LOG_FORMAT( "err = %d", err ) ); + TBool found = EFalse; + if ( !isResourceFile && ( KErrNone == err ) ) + { + found = ETrue; + aFileName.Zero(); + aFileName.Append( finder.File() ); + } + + while ( !found && ( KErrNone == err ) && isResourceFile ) + { + // Found file + fileName.Zero(); + TParsePtrC foundPath( finder.File() ); + fileName.Copy( foundPath.DriveAndPath() ); + fileName.Append( aFileName ); + BaflUtils::NearestLanguageFile( *iFsSession, fileName, language ); + if ( language != ELangNone && BaflUtils::FileExists( *iFsSession, fileName ) ) + { + found = ETrue; + aFileName.Zero(); + aFileName.Copy( fileName ); + } + else + { + if ( language == ELangNone && + !baseResource.Compare( KNullDesC ) && + BaflUtils::FileExists( *iFsSession, fileName ) ) + { + baseResource.Copy( fileName ); + } + CDir* entries = NULL; + err = finder.FindWild( entries ); + delete entries; + } + } + + if ( !found && baseResource.Compare( KNullDesC ) ) + { + // If we found *.rsc then better to use that than nothing + if ( BaflUtils::FileExists( *iFsSession, baseResource ) ) + { + found = ETrue; + aFileName.Zero(); + aFileName.Append( baseResource ); + } + } + + if ( !found ) + { + LEVEL3( LOG_FORMAT( "File %S not found ( err = %d )!", &aFileName, err ) ); + if ( !err ) + { + err = KErrNotFound; + } + User::Leave( err ); + } + + LEVEL3( LOG_FORMAT( "aFileName = %S", &aFileName ) ); + } + +// --------------------------------------------------------------------------- +// Returns the file server session +// --------------------------------------------------------------------------- +// +RFs& CRadioSettingsImp::FsSession() + { + LEVEL3( LOG_METHOD_AUTO ); + return *iFsSession; + }