///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2014 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2015 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#include "Model_Settings.h"
+//Internal
#include "Global.h"
#include "Registry_Encoder.h"
+//MUtils
+#include <MUtils/Global.h>
+#include <MUtils/Translation.h>
+#include <MUtils/OSSupport.h>
+
+//Qt
#include <QSettings>
#include <QDesktopServices>
#include <QApplication>
class SettingsCache
{
public:
- SettingsCache(QSettings *configFile) : m_configFile(configFile)
+ SettingsCache(QSettings *configFile)
+ :
+ m_configFile(configFile),
+ m_cache(new cache_data_t()),
+ m_cacheDirty(new string_set_t())
{
- m_cache = new QHash<QString, QVariant>();
- m_cacheLock = new QMutex();
- m_cacheDirty = new QSet<QString>();
}
~SettingsCache(void)
{
flushValues();
-
- LAMEXP_DELETE(m_cache);
- LAMEXP_DELETE(m_cacheDirty);
- LAMEXP_DELETE(m_cacheLock);
- LAMEXP_DELETE(m_configFile);
}
inline void storeValue(const QString &key, const QVariant &value)
{
- QMutexLocker lock(m_cacheLock);
+ QWriteLocker writeLock(&m_cacheLock);
if(!m_cache->contains(key))
{
inline QVariant loadValue(const QString &key, const QVariant &defaultValue) const
{
- QMutexLocker lock(m_cacheLock);
+ QReadLocker readLock(&m_cacheLock);
+
+ if(m_cache->contains(key))
+ {
+ return m_cache->value(key, defaultValue);
+ }
+
+ readLock.unlock();
+ QWriteLocker writeLock(&m_cacheLock);
if(!m_cache->contains(key))
{
inline void flushValues(void)
{
- QMutexLocker lock(m_cacheLock);
+ QWriteLocker writeLock(&m_cacheLock);
if(!m_cacheDirty->isEmpty())
{
}
else
{
- qWarning("Could not find '%s' in cache, but it has been marked as dirty!", QUTF8(*iter));
+ qWarning("Could not find '%s' in cache, but it has been marked as dirty!", MUTILS_UTF8(*iter));
}
}
m_configFile->sync();
}
private:
- QSettings *m_configFile;
- QHash<QString, QVariant> *m_cache;
- QSet<QString> *m_cacheDirty;
- QMutex *m_cacheLock;
+ typedef QSet<QString> string_set_t;
+ typedef QHash<QString, QVariant> cache_data_t;
+
+ QScopedPointer<QSettings> m_configFile;
+ QScopedPointer<cache_data_t> m_cache;
+ QScopedPointer<string_set_t> m_cacheDirty;
+
+ mutable QReadWriteLock m_cacheLock;
};
////////////////////////////////////////////////////////////
//LUT
const int SettingsModel::samplingRates[8] = {0, 16000, 22050, 24000, 32000, 44100, 48000, -1};
-static QReadWriteLock s_lock;
-
////////////////////////////////////////////////////////////
// Constructor
////////////////////////////////////////////////////////////
SettingsModel::SettingsModel(void)
+:
+ m_configCache(NULL)
{
QString configPath = "LameXP.ini";
- if(!lamexp_portable_mode())
+ if(!lamexp_version_portable())
{
QString dataPath = initDirectory(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
if(!dataPath.isEmpty())
continue;
}
}
- qWarning("Deleting obsolete group from config: %s", QUTF8(current));
+ qWarning("Deleting obsolete group from config: %s", MUTILS_UTF8(current));
REMOVE_GROUP(configFile, current);
}
SettingsModel::~SettingsModel(void)
{
- LAMEXP_DELETE(m_configCache);
- LAMEXP_DELETE(m_defaultLanguage);
+ MUTILS_DELETE(m_configCache);
}
////////////////////////////////////////////////////////////
}
}
- if(!lamexp_query_translations().contains(this->currentLanguage(), Qt::CaseInsensitive))
+ QStringList translations;
+ if(MUtils::Translation::enumerate(translations) > 0)
{
- qWarning("Current language \"%s\" is unknown, reverting to default language!", this->currentLanguage().toLatin1().constData());
- this->currentLanguage(defaultLanguage());
+ if(!translations.contains(this->currentLanguage(), Qt::CaseInsensitive))
+ {
+ qWarning("Current language \"%s\" is unknown, reverting to default language!", this->currentLanguage().toLatin1().constData());
+ this->currentLanguage(defaultLanguage());
+ }
}
if(this->hibernateComputer())
{
- if(!lamexp_is_hibernation_supported())
+ if(!MUtils::OS::is_hibernation_supported())
{
this->hibernateComputer(false);
}
{
this->overwriteMode(SettingsModel::Overwrite_KeepBoth);
}
-
}
void SettingsModel::syncNow(void)
// Private Functions
////////////////////////////////////////////////////////////
-QString *SettingsModel::m_defaultLanguage = NULL;
-
QString SettingsModel::defaultLanguage(void) const
{
- QReadLocker readLock(&s_lock);
+ QMutexLocker lock(&m_defaultLangLock);
//Default already initialized?
- if(m_defaultLanguage)
- {
- return *m_defaultLanguage;
- }
-
- //Acquire write lock now
- readLock.unlock();
- QWriteLocker writeLock(&s_lock);
-
- //Default still not initialized?
- if(m_defaultLanguage)
+ if(!m_defaultLanguage.isNull())
{
return *m_defaultLanguage;
}
//Detect system langauge
QLocale systemLanguage= QLocale::system();
qDebug("[Locale]");
- qDebug("Language: %s (%d)", QUTF8(QLocale::languageToString(systemLanguage.language())), systemLanguage.language());
- qDebug("Country is: %s (%d)", QUTF8(QLocale::countryToString(systemLanguage.country())), systemLanguage.country());
- qDebug("Script is: %s (%d)\n", QUTF8(QLocale::scriptToString(systemLanguage.script())), systemLanguage.script());
+ qDebug("Language: %s (%d)", MUTILS_UTF8(QLocale::languageToString(systemLanguage.language())), systemLanguage.language());
+ qDebug("Country is: %s (%d)", MUTILS_UTF8(QLocale::countryToString(systemLanguage.country())), systemLanguage.country());
+ qDebug("Script is: %s (%d)\n", MUTILS_UTF8(QLocale::scriptToString(systemLanguage.script())), systemLanguage.script());
//Check if we can use the default translation
if(systemLanguage.language() == QLocale::English /*|| systemLanguage.language() == QLocale::C*/)
{
- m_defaultLanguage = new QString(LAMEXP_DEFAULT_LANGID);
- return LAMEXP_DEFAULT_LANGID;
+ m_defaultLanguage.reset(new QString(MUtils::Translation::DEFAULT_LANGID));
+ return MUtils::Translation::DEFAULT_LANGID;
}
- //Try to find a suitable translation for the user's system language *and* country
- QStringList languages = lamexp_query_translations();
- while(!languages.isEmpty())
+ QStringList languages;
+ if(MUtils::Translation::enumerate(languages) > 0)
{
- QString currentLangId = languages.takeFirst();
- if(lamexp_translation_sysid(currentLangId) == systemLanguage.language())
+ //Try to find a suitable translation for the user's system language *and* country
+ for(QStringList::ConstIterator iter = languages.constBegin(); iter != languages.constEnd(); iter++)
{
- if(lamexp_translation_country(currentLangId) == systemLanguage.country())
+ if(MUtils::Translation::get_sysid(*iter) == systemLanguage.language())
{
- m_defaultLanguage = new QString(currentLangId);
- return currentLangId;
+ if(MUtils::Translation::get_country(*iter) == systemLanguage.country())
+ {
+ m_defaultLanguage.reset(new QString(*iter));
+ return (*iter);
+ }
}
}
- }
- //Try to find a suitable translation for the user's system language
- languages = lamexp_query_translations();
- while(!languages.isEmpty())
- {
- QString currentLangId = languages.takeFirst();
- if(lamexp_translation_sysid(currentLangId) == systemLanguage.language())
+ //Try to find a suitable translation for the user's system language
+ for(QStringList::ConstIterator iter = languages.constBegin(); iter != languages.constEnd(); iter++)
{
- m_defaultLanguage = new QString(currentLangId);
- return currentLangId;
+ if(MUtils::Translation::get_sysid(*iter) == systemLanguage.language())
+ {
+ m_defaultLanguage.reset(new QString(*iter));
+ return (*iter);
+ }
}
}
//Fall back to the default translation
- m_defaultLanguage = new QString(LAMEXP_DEFAULT_LANGID);
- return LAMEXP_DEFAULT_LANGID;
+ m_defaultLanguage.reset(new QString(MUtils::Translation::DEFAULT_LANGID));
+ return MUtils::Translation::DEFAULT_LANGID;
}
QString SettingsModel::defaultDirectory(void) const
for(int i = 0; i < 32; i++)
{
if(QDir(path).mkpath(".")) break;
- lamexp_sleep(1);
+ MUtils::OS::sleep_ms(1);
}
}
LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation, false)
LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled, true)
LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta, false)
-LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, (!lamexp_portable_mode()));
+LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, (!lamexp_version_portable()));
LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck, "Never")
LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled, false)
LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate, 500)
LAMEXP_MAKE_OPTION_B(renameOutputFilesEnabled, false)
LAMEXP_MAKE_OPTION_S(renameOutputFilesPattern, "[<TrackNo>] <Artist> - <Title>")
LAMEXP_MAKE_OPTION_I(samplingRate, 0)
-LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled, !lamexp_portable_mode())
+LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled, !lamexp_version_portable())
LAMEXP_MAKE_OPTION_B(slowStartup, false)
LAMEXP_MAKE_OPTION_B(soundsEnabled, true)
LAMEXP_MAKE_OPTION_I(toneAdjustBass, 0)