00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "compat.h"
00012
00013 #include <cstdlib>
00014 #include <cstdio>
00015 #include <cstdlib>
00016 #include <ctime>
00017
00018 #include <fstream>
00019 #include <string>
00020 using namespace std;
00021
00022 #include <QDir>
00023
00024 #include "oldsettings.h"
00025 #include "mythlogging.h"
00026
00027 Settings::Settings(QString strSettingsFile)
00028 {
00029 if (strSettingsFile.length() == 0)
00030 strSettingsFile = "settings.txt";
00031 m_pSettings = new map<QString, QString>;
00032
00033 ReadSettings(strSettingsFile);
00034 }
00035
00036 Settings::~Settings()
00037 {
00038 delete m_pSettings;
00039 }
00040
00041
00043 QString Settings::GetSetting(QString strSetting, QString defaultvalue)
00044 {
00045 map<QString, QString>::iterator i;
00046 if ((!m_pSettings->empty()) &&
00047 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00048 {
00049 return (*i).second;
00050 }
00051 return defaultvalue;
00052 }
00053
00055 int Settings::GetNumSetting(QString strSetting, int defaultvalue)
00056 {
00057 int retval = defaultvalue;
00058 map<QString, QString>::iterator i;
00059 if ((!m_pSettings->empty()) &&
00060 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00061 {
00062 bool ok = false;
00063 retval = (*i).second.toInt(&ok);
00064 if (!ok)
00065 retval = defaultvalue;
00066 }
00067 return retval;
00068 }
00069
00071 float Settings::GetFloatSetting(QString strSetting, float defaultvalue)
00072 {
00073 float retval = defaultvalue;
00074
00075 map<QString, QString>::iterator i;
00076 if ((!m_pSettings->empty()) &&
00077 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00078 {
00079 bool ok = false;
00080 retval = ((*i).second).toFloat(&ok);
00081 if (!ok)
00082 retval = defaultvalue;
00083 }
00084
00085 return retval;
00086 }
00087
00088
00090 void Settings::SetSetting(QString strSetting, QString strNewVal)
00091 {
00092 (*m_pSettings)[strSetting] = strNewVal;
00093 }
00094
00096 void Settings::SetSetting(QString strSetting, int nNewVal)
00097 {
00098 QString tmp;
00099 tmp = tmp.setNum(nNewVal);
00100 (*m_pSettings)[strSetting] = tmp;
00101 }
00102
00104 void Settings::SetSetting(QString strSetting, float fNewVal)
00105 {
00106 QString tmp;
00107 tmp = tmp.setNum(fNewVal);
00108 (*m_pSettings)[strSetting] = tmp;
00109 }
00110
00111 bool Settings::LoadSettingsFiles(QString filename, QString prefix,
00112 QString confdir)
00113 {
00114 int result = ReadSettings(prefix + "/share/mythtv/" + filename);
00115 result += ReadSettings(prefix + "/etc/mythtv/" + filename);
00116 result += ReadSettings(confdir + '/' + filename);
00117 result += ReadSettings("./" + filename);
00118 return result;
00119 }
00120
00121 bool Settings::ReadSettings(QString pszFile)
00122 {
00123 QString LOC = "(old)Settings::ReadSettings(" + pszFile + ") - ";
00124 fstream fin(pszFile.toLocal8Bit().constData(), ios::in);
00125
00126 if (!fin.is_open())
00127 {
00128 LOG(VB_FILE, LOG_ERR, LOC + "No such file " + pszFile);
00129 return false;
00130 }
00131
00132 string strLine;
00133 QString strKey;
00134 QString strVal;
00135 QString strType;
00136 QString line;
00137 int nSplitPoint = 0;
00138
00139 while(!fin.eof())
00140 {
00141 getline(fin,strLine);
00142 line = strLine.c_str();
00143
00144 if ((line[0] != '#') && (!line.isEmpty()))
00145 {
00146 nSplitPoint = strLine.find('=');
00147 if (nSplitPoint != -1)
00148 {
00149 strType = line.mid(0, 3);
00150
00151 if (strType == "flt" || strType == "int" || strType == "str")
00152 strKey = line.mid(4, nSplitPoint - 4);
00153 else
00154 strKey = line.mid(0, nSplitPoint);
00155
00156 strVal = line.mid(nSplitPoint + 1, strLine.size());
00157
00158 (*m_pSettings)[strKey] = strVal;
00159
00160 LOG(VB_FILE, LOG_DEBUG, LOC + QString("'%1' = '%2'.")
00161 .arg(strKey) .arg(strVal));
00162 }
00163 }
00164 }
00165 return true;
00166 }