sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: sl@0: #include "uloggerconfigmanager.h" sl@0: #include "uloggershared.h" sl@0: #include sl@0: #include sl@0: sl@0: namespace Ulogger sl@0: { sl@0: sl@0: EXPORT_C CConfigFileManager* CConfigFileManager::NewL() sl@0: { sl@0: CConfigFileManager* self = new (ELeave) CConfigFileManager; sl@0: CleanupStack::PushL(self); sl@0: self->iConfig = NULL; sl@0: TInt error = self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: if(error) sl@0: { sl@0: delete self; sl@0: self = NULL; sl@0: } sl@0: return self; sl@0: } sl@0: sl@0: TInt CConfigFileManager::ConstructL() sl@0: { sl@0: return InitializeFilesL(); sl@0: } sl@0: sl@0: EXPORT_C TInt CConfigFileManager::RefreshConfigFiles() sl@0: { sl@0: return InitializeFilesL(); sl@0: } sl@0: sl@0: TInt CConfigFileManager::InitializeFilesL() sl@0: { sl@0: //Load the respective configuration file sl@0: TInt error = CheckIfFileExistsInPathL(KConfigFilename, KPublicConfigFilePath, iFilename); sl@0: if (error == KErrNotFound || error == KErrPathNotFound) sl@0: { sl@0: error = CheckIfFileExistsInPathL(KConfigFilename, KPrivateConfigFilePath, iFilename); sl@0: if((error != KErrNotFound) && (iFilename == KDefaultConfigFilePath)) sl@0: { sl@0: error = CopyFileToSystemDriveL(iFilename); sl@0: } sl@0: } sl@0: if(!error) sl@0: { sl@0: if(iConfig) sl@0: delete iConfig; sl@0: iConfig = CConfig::NewL(NULL, iFilename); sl@0: } sl@0: if(iConfig == NULL) sl@0: error = KErrNotFound; sl@0: return error; sl@0: } sl@0: sl@0: TInt CConfigFileManager::CheckIfFileExistsInPathL(const TDesC& aFilename, const TDesC& aPath, TFileName& aFullFilePath) sl@0: { sl@0: RFs fs; sl@0: TParse fileParse; sl@0: User::LeaveIfError(fs.Connect()); sl@0: TFindFile findfile(fs); sl@0: TInt error = findfile.FindByDir(aFilename,aPath); sl@0: if(error == KErrNone) //file is found, now set the aFullFilePath to the full path including drive sl@0: { sl@0: fileParse.Set(findfile.File(),NULL,NULL); sl@0: aFullFilePath.Zero(); sl@0: aFullFilePath.Append(fileParse.FullName()); sl@0: } sl@0: fs.Close(); sl@0: return error; sl@0: } sl@0: sl@0: /* Copy file to the System drives private path sl@0: * if the drive exists otherwise sl@0: * create the drive and copy the file*/ sl@0: TInt CConfigFileManager::CopyFileToSystemDriveL(TFileName &aFilePath) sl@0: { sl@0: TFileName fileName; sl@0: TDriveName aSystemDrive; sl@0: TDriveUnit driveunit(RFs::GetSystemDrive()); sl@0: aSystemDrive.Zero(); sl@0: aSystemDrive=driveunit.Name(); sl@0: fileName.Zero(); sl@0: fileName.Append(aSystemDrive); sl@0: fileName.Append(KPrivateConfigFilePath); sl@0: sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: sl@0: TInt error= fs.MkDir(fileName); sl@0: if(error==KErrNone || error== KErrAlreadyExists) sl@0: { sl@0: CFileMan* fMan = CFileMan::NewL(fs); sl@0: CleanupStack::PushL(fMan); sl@0: fileName.Append(KConfigFilename); sl@0: User::LeaveIfError(fMan->Copy(KDefaultConfigFilePath, fileName, CFileMan::EOverWrite) ); sl@0: CleanupStack::PopAndDestroy(fMan); sl@0: User::LeaveIfError(fs.SetAtt(fileName,0, KEntryAttReadOnly)); sl@0: } sl@0: fs.Close(); sl@0: aFilePath.Zero(); sl@0: aFilePath.Append(fileName); sl@0: return error; sl@0: } sl@0: sl@0: sl@0: EXPORT_C TInt CConfigFileManager::GetSectionValues(const TDesC8& aSectionName,CConfigSettingsIter& aIter) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->GetSectionValues(aSectionName, aIter); sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: EXPORT_C TInt CConfigFileManager::GetOutputPlugins(CConfigSettingsIter& aIter) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->GetOutputPlugins(aIter); sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: EXPORT_C TInt CConfigFileManager::RemovePluginSettings(const TDesC8& aOutputChanId) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->RemovePluginSettings(aOutputChanId); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::GetActiveFilters(CConfigSettingsIter& aIter,TInt aFilter) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->GetActiveFilters(aIter, aFilter); sl@0: } sl@0: return error; sl@0: } sl@0: sl@0: EXPORT_C TInt CConfigFileManager::RemoveActiveFilter(const RArray& aFilter, const TInt &aFilterValue) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->RemoveActiveFilter(aFilter, aFilterValue); sl@0: } sl@0: return error; sl@0: } sl@0: //Get direct setting's value API sl@0: EXPORT_C TInt CConfigFileManager::SetActiveFilter(const RArray& aFilter, const TDesC8 &aSectionName) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->SetActiveFilter(aFilter, aSectionName); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::SetTraceSettings(const TDesC8& aValue, const TDesC8& aSetting) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->SetTraceSettings(aValue, aSetting); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::SetPluginSetting(const TDesC8& aOutputChanId, sl@0: const TDesC8& aSetting, sl@0: const TDesC8& aValue) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->SetPluginSetting(aOutputChanId, aSetting, aValue); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::SetActiveOutputPlugin(const TDesC8& aMediaName) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->SetActiveOutputPlugin(aMediaName); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::SetActiveInputPlugin(const TDesC8& aMediaName) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->SetActiveInputPlugin(aMediaName); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::GetActiveInputPlugins(CConfigSettingsIter& aIter) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->GetActivePlugins(aIter); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::GetPluginSettings(CConfigSettingsIter& aIter) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->GetTraceSettings(aIter); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::DeActivateOutputPlugin(const TDesC8& aMediaName) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->DeActivateOutputPlugin(aMediaName); sl@0: } sl@0: return error; sl@0: } sl@0: EXPORT_C TInt CConfigFileManager::DeActivateInputPlugin(const TDesC8& aMediaName) sl@0: { sl@0: TInt error = RefreshConfigFiles(); sl@0: if(!error) sl@0: { sl@0: error = iConfig->DeActivateInputPlugin(aMediaName); sl@0: } sl@0: return error; sl@0: } sl@0: }//namespace