2008-01-25 00:12:25 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* __________ __ ___.
|
|
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
|
|
* \/ \/ \/ \/ \/
|
|
|
|
*
|
|
|
|
* Copyright (C) 2007 by Dominik Wenger
|
|
|
|
*
|
|
|
|
* All files in this archive are subject to the GNU General Public License.
|
|
|
|
* See the file COPYING in the source tree root for full license agreement.
|
|
|
|
*
|
|
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
* KIND, either express or implied.
|
|
|
|
*
|
|
|
|
****************************************************************************/
|
2009-02-25 21:05:57 +00:00
|
|
|
|
2008-01-25 00:12:25 +00:00
|
|
|
#include "rbsettings.h"
|
2010-01-24 21:12:11 +00:00
|
|
|
#include "systeminfo.h"
|
2008-01-25 00:12:25 +00:00
|
|
|
#include <QSettings>
|
|
|
|
|
2009-02-25 21:05:57 +00:00
|
|
|
#if defined(Q_OS_LINUX)
|
|
|
|
#include <unistd.h>
|
|
|
|
#endif
|
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
// user settings
|
|
|
|
const static struct {
|
|
|
|
RbSettings::UserSettings setting;
|
|
|
|
const char* name;
|
|
|
|
const char* def;
|
|
|
|
} UserSettingsList[] = {
|
|
|
|
{ RbSettings::RbutilVersion, "rbutil_version", "" },
|
|
|
|
{ RbSettings::CurrentPlatform, "platform", "" },
|
|
|
|
{ RbSettings::Mountpoint, "mountpoint", "" },
|
|
|
|
{ RbSettings::CachePath, "cachepath", "" },
|
|
|
|
{ RbSettings::Build, "build", "" },
|
|
|
|
{ RbSettings::ProxyType, "proxytype", "" },
|
|
|
|
{ RbSettings::Proxy, "proxy", "" },
|
|
|
|
{ RbSettings::OfPath, "ofpath", "" },
|
|
|
|
{ RbSettings::Platform, "platform", "" },
|
|
|
|
{ RbSettings::Language, "lang", "" },
|
2012-06-25 22:24:58 +00:00
|
|
|
{ RbSettings::BackupPath, "backuppath", "" },
|
2012-06-26 16:41:25 +00:00
|
|
|
{ RbSettings::InstallRockbox, "install_rockbox", "true" },
|
|
|
|
{ RbSettings::InstallFonts, "install_fonts", "true" },
|
|
|
|
{ RbSettings::InstallThemes, "install_themes", "false" },
|
|
|
|
{ RbSettings::InstallGamefiles, "install_gamefiles", "true" },
|
2011-04-22 13:32:04 +00:00
|
|
|
#if defined(Q_OS_WIN32)
|
|
|
|
{ RbSettings::Tts, "tts", "sapi" },
|
|
|
|
#elif defined(Q_OS_MACX)
|
|
|
|
{ RbSettings::Tts, "tts", "carbon" },
|
|
|
|
#else
|
|
|
|
{ RbSettings::Tts, "tts", "espeak" },
|
|
|
|
#endif
|
2011-10-01 19:48:58 +00:00
|
|
|
{ RbSettings::UseTtsCorrections, "use_tts_corrections", "true" },
|
2012-06-14 20:36:54 +00:00
|
|
|
{ RbSettings::TalkFolders, "talk_folders", "" },
|
|
|
|
{ RbSettings::TalkProcessFiles, "talk_process_files", "true" },
|
|
|
|
{ RbSettings::TalkProcessFolders, "talk_process_folders", "true" },
|
|
|
|
{ RbSettings::TalkRecursive, "talk_recursive", "true" },
|
|
|
|
{ RbSettings::TalkSkipExisting, "talk_skip_existing", "true" },
|
|
|
|
{ RbSettings::TalkStripExtensions, "talk_strip_extensions","true" },
|
|
|
|
{ RbSettings::TalkIgnoreFiles, "talk_ignore_files", "false" },
|
|
|
|
{ RbSettings::TalkIgnoreWildcards, "talk_ignore_wildcards","" },
|
2009-04-29 20:58:47 +00:00
|
|
|
{ RbSettings::VoiceLanguage, "voicelanguage", "" },
|
|
|
|
{ RbSettings::TtsLanguage, ":tts:/language", "" },
|
|
|
|
{ RbSettings::TtsOptions, ":tts:/options", "" },
|
2011-04-03 09:23:21 +00:00
|
|
|
{ RbSettings::TtsPitch, ":tts:/pitch", "0" },
|
2009-04-29 20:58:47 +00:00
|
|
|
{ RbSettings::TtsPath, ":tts:/path", "" },
|
|
|
|
{ RbSettings::TtsVoice, ":tts:/voice", "" },
|
|
|
|
{ RbSettings::EncoderPath, ":encoder:/encoderpath", "" },
|
|
|
|
{ RbSettings::EncoderOptions, ":encoder:/encoderoptions", "" },
|
|
|
|
{ RbSettings::CacheOffline, "offline", "false" },
|
|
|
|
{ RbSettings::CacheDisabled, "cachedisable", "false" },
|
|
|
|
{ RbSettings::TtsUseSapi4, "sapi/useSapi4", "false" },
|
|
|
|
{ RbSettings::EncoderNarrowBand, ":encoder:/narrowband", "false" },
|
|
|
|
{ RbSettings::WavtrimThreshold, "wavtrimthreshold", "500"},
|
2010-03-11 20:09:22 +00:00
|
|
|
{ RbSettings::TtsSpeed, ":tts:/speed", "175" },
|
2009-04-29 20:58:47 +00:00
|
|
|
{ RbSettings::EncoderComplexity, ":encoder:/complexity", "10" },
|
2012-01-29 14:36:30 +00:00
|
|
|
{ RbSettings::EncoderQuality, ":encoder:/quality", "-1.0" },
|
2009-04-29 20:58:47 +00:00
|
|
|
{ RbSettings::EncoderVolume, ":encoder:/volume", "1.0" },
|
|
|
|
};
|
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
//! pointer to setting object to NULL
|
|
|
|
QSettings* RbSettings::userSettings = NULL;
|
|
|
|
|
|
|
|
void RbSettings::ensureRbSettingsExists()
|
2008-01-25 00:12:25 +00:00
|
|
|
{
|
2009-05-09 16:59:14 +00:00
|
|
|
if(userSettings == NULL)
|
2008-01-25 00:12:25 +00:00
|
|
|
{
|
2009-05-09 16:59:14 +00:00
|
|
|
// portable installation:
|
|
|
|
// check for a configuration file in the program folder.
|
|
|
|
QFileInfo config;
|
|
|
|
config.setFile(QCoreApplication::instance()->applicationDirPath()
|
|
|
|
+ "/RockboxUtility.ini");
|
|
|
|
if(config.isFile())
|
|
|
|
{
|
|
|
|
userSettings = new QSettings(QCoreApplication::instance()->applicationDirPath()
|
|
|
|
+ "/RockboxUtility.ini", QSettings::IniFormat, NULL);
|
2009-06-16 18:45:20 +00:00
|
|
|
qDebug() << "[Settings] configuration: portable";
|
2009-05-09 16:59:14 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
userSettings = new QSettings(QSettings::IniFormat,
|
|
|
|
QSettings::UserScope, "rockbox.org", "RockboxUtility",NULL);
|
2009-06-16 18:45:20 +00:00
|
|
|
qDebug() << "[Settings] configuration: system";
|
2009-05-09 16:59:14 +00:00
|
|
|
}
|
2008-01-25 00:12:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void RbSettings::sync()
|
|
|
|
{
|
2009-06-15 19:06:03 +00:00
|
|
|
ensureRbSettingsExists();
|
2009-05-09 16:59:14 +00:00
|
|
|
|
2008-01-25 00:12:25 +00:00
|
|
|
userSettings->sync();
|
2009-02-25 21:05:57 +00:00
|
|
|
#if defined(Q_OS_LINUX)
|
|
|
|
// when using sudo it runs rbutil with uid 0 but unfortunately without a
|
|
|
|
// proper login shell, thus the configuration file gets placed in the
|
|
|
|
// calling users $HOME. This in turn will cause issues if trying to
|
|
|
|
// run rbutil later as user. Try to detect this case via the environment
|
|
|
|
// variable SUDO_UID and SUDO_GID and if set chown the user config file.
|
|
|
|
if(getuid() == 0)
|
|
|
|
{
|
|
|
|
char* realuser = getenv("SUDO_UID");
|
|
|
|
char* realgroup = getenv("SUDO_GID");
|
|
|
|
if(realuser != NULL && realgroup != NULL)
|
|
|
|
{
|
|
|
|
int realuid = atoi(realuser);
|
|
|
|
int realgid = atoi(realgroup);
|
2009-04-16 21:09:19 +00:00
|
|
|
// chown is attribute warn_unused_result, but in case this fails
|
|
|
|
// we can't do anything useful about it. Notifying the user
|
|
|
|
// is somewhat pointless. Add hack to suppress compiler warning.
|
2009-10-14 20:43:50 +00:00
|
|
|
if(chown(qPrintable(userSettings->fileName()), realuid, realgid))
|
|
|
|
{ }
|
2009-02-25 21:05:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
2008-01-25 00:12:25 +00:00
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
QString RbSettings::userSettingFilename()
|
|
|
|
{
|
2009-06-15 19:06:03 +00:00
|
|
|
ensureRbSettingsExists();
|
2009-05-09 16:59:14 +00:00
|
|
|
return userSettings->fileName();
|
|
|
|
}
|
2008-04-24 20:40:33 +00:00
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
QVariant RbSettings::value(enum UserSettings setting)
|
2009-06-15 19:06:03 +00:00
|
|
|
{
|
|
|
|
QString empty;
|
2009-05-09 16:59:14 +00:00
|
|
|
return subValue(empty, setting);
|
2008-01-25 00:12:25 +00:00
|
|
|
}
|
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
QVariant RbSettings::subValue(QString sub, enum UserSettings setting)
|
2008-01-25 00:12:25 +00:00
|
|
|
{
|
2009-06-15 19:06:03 +00:00
|
|
|
ensureRbSettingsExists();
|
2009-05-09 16:59:14 +00:00
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
// locate setting item
|
|
|
|
int i = 0;
|
|
|
|
while(UserSettingsList[i].setting != setting)
|
|
|
|
i++;
|
2009-02-25 21:05:57 +00:00
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
QString s = constructSettingPath(UserSettingsList[i].name, sub);
|
|
|
|
qDebug() << "[Settings] GET U:" << s << userSettings->value(s).toString();
|
|
|
|
return userSettings->value(s, UserSettingsList[i].def);
|
2008-01-25 00:12:25 +00:00
|
|
|
}
|
2009-02-25 21:05:57 +00:00
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
void RbSettings::setValue(enum UserSettings setting , QVariant value)
|
|
|
|
{
|
2009-06-15 19:06:03 +00:00
|
|
|
QString empty;
|
2009-05-09 16:59:14 +00:00
|
|
|
return setSubValue(empty, setting, value);
|
|
|
|
}
|
2008-01-25 00:12:25 +00:00
|
|
|
|
2009-05-09 16:59:14 +00:00
|
|
|
void RbSettings::setSubValue(QString sub, enum UserSettings setting, QVariant value)
|
2008-01-25 00:12:25 +00:00
|
|
|
{
|
2009-06-15 19:06:03 +00:00
|
|
|
ensureRbSettingsExists();
|
2009-05-09 16:59:14 +00:00
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
// locate setting item
|
|
|
|
int i = 0;
|
|
|
|
while(UserSettingsList[i].setting != setting)
|
|
|
|
i++;
|
2008-01-25 00:12:25 +00:00
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
QString s = constructSettingPath(UserSettingsList[i].name, sub);
|
|
|
|
userSettings->setValue(s, value);
|
2010-01-20 22:18:36 +00:00
|
|
|
qDebug() << "[Settings] SET U:" << s << userSettings->value(s).toString();
|
|
|
|
}
|
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
QString RbSettings::constructSettingPath(QString path, QString substitute)
|
2008-01-25 00:12:25 +00:00
|
|
|
{
|
2010-01-29 22:46:40 +00:00
|
|
|
// anything to substitute?
|
|
|
|
if(path.contains(':')) {
|
|
|
|
QString platform = userSettings->value("platform").toString();
|
|
|
|
if(!substitute.isEmpty()) {
|
|
|
|
path.replace(":tts:", substitute);
|
|
|
|
path.replace(":encoder:", substitute);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
path.replace(":tts:", userSettings->value("tts").toString());
|
|
|
|
path.replace(":encoder:", SystemInfo::platformValue(platform,SystemInfo::CurEncoder).toString());
|
|
|
|
}
|
|
|
|
path.replace(":platform:", platform);
|
2009-04-29 20:58:47 +00:00
|
|
|
}
|
2008-01-25 00:12:25 +00:00
|
|
|
|
2009-04-29 20:58:47 +00:00
|
|
|
return path;
|
2008-01-25 00:12:25 +00:00
|
|
|
}
|
2008-09-28 17:02:36 +00:00
|
|
|
|