OSDN Git Service

Merge branch 'master' of github.com:lordmulder/LameXP
[lamexp/LameXP.git] / src / Model_Settings.cpp
index b7301ba..716ee5c 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // 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))
                {
@@ -86,7 +89,15 @@ public:
 
        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))
                {
@@ -99,7 +110,7 @@ public:
 
        inline void flushValues(void)
        {
-               QMutexLocker lock(m_cacheLock);
+               QWriteLocker writeLock(&m_cacheLock);
 
                if(!m_cacheDirty->isEmpty())
                {
@@ -112,7 +123,7 @@ public:
                                }
                                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();
@@ -121,10 +132,14 @@ public:
        }
 
 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;
 };
 
 ////////////////////////////////////////////////////////////
@@ -271,17 +286,17 @@ LAMEXP_MAKE_ID(writeMetaTags,                "Flags/WriteMetaTags");
 //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())
@@ -331,7 +346,7 @@ SettingsModel::SettingsModel(void)
                                continue;
                        }
                }
-               qWarning("Deleting obsolete group from config: %s", QUTF8(current));
+               qWarning("Deleting obsolete group from config: %s", MUTILS_UTF8(current));
                REMOVE_GROUP(configFile, current);
        }
 
@@ -350,8 +365,7 @@ SettingsModel::SettingsModel(void)
 
 SettingsModel::~SettingsModel(void)
 {
-       LAMEXP_DELETE(m_configCache);
-       LAMEXP_DELETE(m_defaultLanguage);
+       MUTILS_DELETE(m_configCache);
 }
 
 ////////////////////////////////////////////////////////////
@@ -411,15 +425,19 @@ void SettingsModel::validate(void)
                }
        }
 
-       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);
                }
@@ -429,7 +447,6 @@ void SettingsModel::validate(void)
        {
                this->overwriteMode(SettingsModel::Overwrite_KeepBoth);
        }
-
 }
 
 void SettingsModel::syncNow(void)
@@ -441,24 +458,12 @@ 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;
        }
@@ -466,47 +471,47 @@ QString SettingsModel::defaultLanguage(void) const
        //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
@@ -538,7 +543,7 @@ QString SettingsModel::initDirectory(const QString &path) const
                for(int i = 0; i < 32; i++)
                {
                        if(QDir(path).mkpath(".")) break;
-                       lamexp_sleep(1);
+                       MUtils::OS::sleep_ms(1);
                }
        }
 
@@ -561,7 +566,7 @@ LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize, 8)
 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)
@@ -646,7 +651,7 @@ LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath, false)
 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)