00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "oldsettings.h"
00013 #include "mythcontext.h"
00014 #include <qstring.h>
00015 #include <fstream>
00016 #include <cstdlib>
00017 #include <cstdio>
00018 #include <cstdlib>
00019 #include <ctime>
00020 #include <string>
00021 #include <sys/time.h>
00022
00023 using namespace std;
00024
00025 #include <qdir.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 if (m_pSettings != NULL)
00039 delete m_pSettings;
00040 }
00041
00042
00044 QString Settings::GetSetting(QString strSetting, QString defaultvalue)
00045 {
00046 map<QString, QString>::iterator i;
00047 if ((!m_pSettings->empty()) &&
00048 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00049 {
00050 return (*i).second;
00051 }
00052 return defaultvalue;
00053 }
00054
00056 int Settings::GetNumSetting(QString strSetting, int defaultvalue)
00057 {
00058 int retval = defaultvalue;
00059 map<QString, QString>::iterator i;
00060 if ((!m_pSettings->empty()) &&
00061 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00062 {
00063 bool ok = false;
00064 retval = (*i).second.toInt(&ok);
00065 if (!ok)
00066 retval = defaultvalue;
00067 }
00068 return retval;
00069 }
00070
00072 float Settings::GetFloatSetting(QString strSetting, float defaultvalue)
00073 {
00074 float retval = defaultvalue;
00075
00076 map<QString, QString>::iterator i;
00077 if ((!m_pSettings->empty()) &&
00078 ((i = m_pSettings->find(strSetting)) != m_pSettings->end()))
00079 {
00080 bool ok = false;
00081 retval = ((*i).second).toFloat(&ok);
00082 if (!ok)
00083 retval = defaultvalue;
00084 }
00085
00086 return defaultvalue;
00087 }
00088
00089
00091 void Settings::SetSetting(QString strSetting, QString strNewVal)
00092 {
00093 (*m_pSettings)[strSetting] = strNewVal;
00094 }
00095
00097 void Settings::SetSetting(QString strSetting, int nNewVal)
00098 {
00099 QString tmp;
00100 tmp = tmp.setNum(nNewVal);
00101 (*m_pSettings)[strSetting] = tmp;
00102 }
00103
00105 void Settings::SetSetting(QString strSetting, float fNewVal)
00106 {
00107 QString tmp;
00108 tmp = tmp.setNum(fNewVal);
00109 (*m_pSettings)[strSetting] = tmp;
00110 }
00111
00112 bool Settings::LoadSettingsFiles(QString filename, QString prefix)
00113 {
00114 int result = ReadSettings(prefix + "/share/mythtv/" + filename);
00115 result += ReadSettings(prefix + "/etc/mythtv/" + filename);
00116 result += ReadSettings(MythContext::GetConfDir() + "/" + filename);
00117 result += ReadSettings("./" + filename);
00118 return result;
00119 }
00120
00121 bool Settings::ReadSettings(QString pszFile)
00122 {
00123 fstream fin(pszFile.ascii(), ios::in);
00124 if (!fin.is_open()) return false;
00125
00126 string strLine;
00127 QString strKey;
00128 QString strVal;
00129 QString strType;
00130 QString line;
00131 int nSplitPoint = 0;
00132
00133 while(!fin.eof())
00134 {
00135 getline(fin,strLine);
00136 line = strLine.c_str();
00137
00138 if ((line[0] != '#') && (!line.isEmpty()))
00139 {
00140 nSplitPoint = strLine.find('=');
00141 if (nSplitPoint != -1)
00142 {
00143 strType = line.mid(0, 3);
00144
00145 if (strType == "flt" || strType == "int" || strType == "str")
00146 strKey = line.mid(4, nSplitPoint - 4);
00147 else
00148 strKey = line.mid(0, nSplitPoint);
00149
00150 strVal = line.mid(nSplitPoint + 1, strLine.size());
00151
00152 (*m_pSettings)[strKey] = strVal;
00153 }
00154 }
00155 }
00156 return true;
00157 }