diff -r 000000000000 -r 08ec8eefde2f traceservices/tracefw/ulogger/src/sysconfig/configfilemanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/traceservices/tracefw/ulogger/src/sysconfig/configfilemanager.cpp Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,256 @@ +// Copyright (c) 2007-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: +// + + +#include "uloggerconfigmanager.h" +#include "uloggershared.h" +#include +#include + +namespace Ulogger +{ + +EXPORT_C CConfigFileManager* CConfigFileManager::NewL() + { + CConfigFileManager* self = new (ELeave) CConfigFileManager; + CleanupStack::PushL(self); + self->iConfig = NULL; + TInt error = self->ConstructL(); + CleanupStack::Pop(); + if(error) + { + delete self; + self = NULL; + } + return self; + } + +TInt CConfigFileManager::ConstructL() + { + return InitializeFilesL(); + } + +EXPORT_C TInt CConfigFileManager::RefreshConfigFiles() + { + return InitializeFilesL(); + } + +TInt CConfigFileManager::InitializeFilesL() + { + //Load the respective configuration file + TInt error = CheckIfFileExistsInPathL(KConfigFilename, KPublicConfigFilePath, iFilename); + if (error == KErrNotFound || error == KErrPathNotFound) + { + error = CheckIfFileExistsInPathL(KConfigFilename, KPrivateConfigFilePath, iFilename); + if((error != KErrNotFound) && (iFilename == KDefaultConfigFilePath)) + { + error = CopyFileToSystemDriveL(iFilename); + } + } + if(!error) + { + if(iConfig) + delete iConfig; + iConfig = CConfig::NewL(NULL, iFilename); + } + if(iConfig == NULL) + error = KErrNotFound; + return error; + } + +TInt CConfigFileManager::CheckIfFileExistsInPathL(const TDesC& aFilename, const TDesC& aPath, TFileName& aFullFilePath) + { + RFs fs; + TParse fileParse; + User::LeaveIfError(fs.Connect()); + TFindFile findfile(fs); + TInt error = findfile.FindByDir(aFilename,aPath); + if(error == KErrNone) //file is found, now set the aFullFilePath to the full path including drive + { + fileParse.Set(findfile.File(),NULL,NULL); + aFullFilePath.Zero(); + aFullFilePath.Append(fileParse.FullName()); + } + fs.Close(); + return error; + } + +/* Copy file to the System drives private path + * if the drive exists otherwise + * create the drive and copy the file*/ +TInt CConfigFileManager::CopyFileToSystemDriveL(TFileName &aFilePath) + { + TFileName fileName; + TDriveName aSystemDrive; + TDriveUnit driveunit(RFs::GetSystemDrive()); + aSystemDrive.Zero(); + aSystemDrive=driveunit.Name(); + fileName.Zero(); + fileName.Append(aSystemDrive); + fileName.Append(KPrivateConfigFilePath); + + RFs fs; + User::LeaveIfError(fs.Connect()); + + TInt error= fs.MkDir(fileName); + if(error==KErrNone || error== KErrAlreadyExists) + { + CFileMan* fMan = CFileMan::NewL(fs); + CleanupStack::PushL(fMan); + fileName.Append(KConfigFilename); + User::LeaveIfError(fMan->Copy(KDefaultConfigFilePath, fileName, CFileMan::EOverWrite) ); + CleanupStack::PopAndDestroy(fMan); + User::LeaveIfError(fs.SetAtt(fileName,0, KEntryAttReadOnly)); + } + fs.Close(); + aFilePath.Zero(); + aFilePath.Append(fileName); + return error; + } + + +EXPORT_C TInt CConfigFileManager::GetSectionValues(const TDesC8& aSectionName,CConfigSettingsIter& aIter) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->GetSectionValues(aSectionName, aIter); + } + return error; + } + +EXPORT_C TInt CConfigFileManager::GetOutputPlugins(CConfigSettingsIter& aIter) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->GetOutputPlugins(aIter); + } + return error; + } + +EXPORT_C TInt CConfigFileManager::RemovePluginSettings(const TDesC8& aOutputChanId) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->RemovePluginSettings(aOutputChanId); + } + return error; + } +EXPORT_C TInt CConfigFileManager::GetActiveFilters(CConfigSettingsIter& aIter,TInt aFilter) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->GetActiveFilters(aIter, aFilter); + } + return error; + } + +EXPORT_C TInt CConfigFileManager::RemoveActiveFilter(const RArray& aFilter, const TInt &aFilterValue) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->RemoveActiveFilter(aFilter, aFilterValue); + } + return error; + } +//Get direct setting's value API +EXPORT_C TInt CConfigFileManager::SetActiveFilter(const RArray& aFilter, const TDesC8 &aSectionName) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->SetActiveFilter(aFilter, aSectionName); + } + return error; + } +EXPORT_C TInt CConfigFileManager::SetTraceSettings(const TDesC8& aValue, const TDesC8& aSetting) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->SetTraceSettings(aValue, aSetting); + } + return error; + } +EXPORT_C TInt CConfigFileManager::SetPluginSetting(const TDesC8& aOutputChanId, + const TDesC8& aSetting, + const TDesC8& aValue) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->SetPluginSetting(aOutputChanId, aSetting, aValue); + } + return error; + } +EXPORT_C TInt CConfigFileManager::SetActiveOutputPlugin(const TDesC8& aMediaName) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->SetActiveOutputPlugin(aMediaName); + } + return error; + } +EXPORT_C TInt CConfigFileManager::SetActiveInputPlugin(const TDesC8& aMediaName) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->SetActiveInputPlugin(aMediaName); + } + return error; + } +EXPORT_C TInt CConfigFileManager::GetActiveInputPlugins(CConfigSettingsIter& aIter) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->GetActivePlugins(aIter); + } + return error; + } +EXPORT_C TInt CConfigFileManager::GetPluginSettings(CConfigSettingsIter& aIter) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->GetTraceSettings(aIter); + } + return error; + } +EXPORT_C TInt CConfigFileManager::DeActivateOutputPlugin(const TDesC8& aMediaName) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->DeActivateOutputPlugin(aMediaName); + } + return error; + } +EXPORT_C TInt CConfigFileManager::DeActivateInputPlugin(const TDesC8& aMediaName) + { + TInt error = RefreshConfigFiles(); + if(!error) + { + error = iConfig->DeActivateInputPlugin(aMediaName); + } + return error; + } +}//namespace