<AdditionalIncludeDirectories>$(SolutionDir)\tmp\$(ProjectName);$(SolutionDir)\..\MUtilities\include;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CONFIG_NAME=$(ConfigurationName);WIN32;_DEBUG;_CONSOLE;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_DLL;QT_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<OpenMPSupport>false</OpenMPSupport>
<TreatWarningAsError>true</TreatWarningAsError>
+ <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
<Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
#define VER_LAMEXP_MINOR_HI 1
#define VER_LAMEXP_MINOR_LO 1
#define VER_LAMEXP_TYPE Beta
-#define VER_LAMEXP_PATCH 9
-#define VER_LAMEXP_BUILD 1639
+#define VER_LAMEXP_PATCH 10
+#define VER_LAMEXP_BUILD 1646
#define VER_LAMEXP_CONFG 1558
///////////////////////////////////////////////////////////////////////////////
AACDecoder::AACDecoder(void)
:
- m_binary(lamexp_tool_lookup("faad.exe"))
+ m_binary(lamexp_tools_lookup("faad.exe"))
{
if(m_binary.isEmpty())
{
AC3Decoder::AC3Decoder(void)
:
- m_binary(lamexp_tool_lookup("valdec.exe"))
+ m_binary(lamexp_tools_lookup("valdec.exe"))
{
if(m_binary.isEmpty())
{
ADPCMDecoder::ADPCMDecoder(void)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
ALACDecoder::ALACDecoder(void)
:
- m_binary(lamexp_tool_lookup("refalac.exe"))
+ m_binary(lamexp_tools_lookup("refalac.exe"))
{
if(m_binary.isEmpty())
{
AvisynthDecoder::AvisynthDecoder(void)
:
- m_binary(lamexp_tool_lookup("avs2wav.exe"))
+ m_binary(lamexp_tools_lookup("avs2wav.exe"))
{
if(m_binary.isEmpty())
{
FLACDecoder::FLACDecoder(void)
:
- m_binary(lamexp_tool_lookup("flac.exe"))
+ m_binary(lamexp_tools_lookup("flac.exe"))
{
if(m_binary.isEmpty())
{
MACDecoder::MACDecoder(void)
:
- m_binary(lamexp_tool_lookup("mac.exe"))
+ m_binary(lamexp_tools_lookup("mac.exe"))
{
if(m_binary.isEmpty())
{
MP3Decoder::MP3Decoder(void)
:
- m_binary(lamexp_tool_lookup("mpg123.exe"))
+ m_binary(lamexp_tools_lookup("mpg123.exe"))
{
if(m_binary.isEmpty())
{
MusepackDecoder::MusepackDecoder(void)
:
- m_binary(lamexp_tool_lookup("mpcdec.exe"))
+ m_binary(lamexp_tools_lookup("mpcdec.exe"))
{
if(m_binary.isEmpty())
{
OpusDecoder::OpusDecoder(void)
:
- m_binary(lamexp_tool_lookup("opusdec.exe"))
+ m_binary(lamexp_tools_lookup("opusdec.exe"))
{
if(m_binary.isEmpty())
{
ShortenDecoder::ShortenDecoder(void)
:
- m_binary(lamexp_tool_lookup("shorten.exe"))
+ m_binary(lamexp_tools_lookup("shorten.exe"))
{
if(m_binary.isEmpty())
{
SpeexDecoder::SpeexDecoder(void)
:
- m_binary(lamexp_tool_lookup("speexdec.exe"))
+ m_binary(lamexp_tools_lookup("speexdec.exe"))
{
if(m_binary.isEmpty())
{
TTADecoder::TTADecoder(void)
:
- m_binary(lamexp_tool_lookup("tta.exe"))
+ m_binary(lamexp_tools_lookup("tta.exe"))
{
if(m_binary.isEmpty())
{
VorbisDecoder::VorbisDecoder(void)
:
- m_binary(lamexp_tool_lookup("oggdec.exe"))
+ m_binary(lamexp_tools_lookup("oggdec.exe"))
{
if(m_binary.isEmpty())
{
WMADecoder::WMADecoder(void)
:
- m_binary(lamexp_tool_lookup("wma2wav.exe"))
+ m_binary(lamexp_tools_lookup("wma2wav.exe"))
{
if(m_binary.isEmpty())
{
WavPackDecoder::WavPackDecoder(void)
:
- m_binary(lamexp_tool_lookup("wvunpack.exe"))
+ m_binary(lamexp_tools_lookup("wvunpack.exe"))
{
if(m_binary.isEmpty())
{
if(!toolBin.isEmpty())
{
- const unsigned int version = lamexp_tool_version(toolBin, &toolTag);
- verStr = lamexp_version2string(toolVerFmt, version, tr("n/a"), &toolTag);
+ const unsigned int version = lamexp_tools_version(toolBin, &toolTag);
+ verStr = lamexp_version2string(toolVerFmt, version, tr("n/a"), toolTag);
}
toolText += QString("<li>%1<br>").arg(NOBR(QString("<b>%1 (%2)</b>").arg(toolName, verStr)));
#include <MUtils/GUI.h>
#include <MUtils/Exception.h>
#include <MUtils/Sound.h>
+#include <MUtils/Translation.h>
#include <MUtils/Version.h>
//Qt includes
//Populate the language menu
m_languageActionGroup = new QActionGroup(this);
- QStringList translations = lamexp_query_translations();
- while(!translations.isEmpty())
- {
- QString langId = translations.takeFirst();
- QAction *currentLanguage = new QAction(this);
- currentLanguage->setData(langId);
- currentLanguage->setText(lamexp_translation_name(langId));
- currentLanguage->setIcon(QIcon(QString(":/flags/%1.png").arg(langId)));
- currentLanguage->setCheckable(true);
- currentLanguage->setChecked(false);
- m_languageActionGroup->addAction(currentLanguage);
- ui->menuLanguage->insertAction(ui->actionLoadTranslationFromFile, currentLanguage);
+ QStringList translations;
+ if(MUtils::Translation::enumerate(translations) > 0)
+ {
+ for(QStringList::ConstIterator iter = translations.constBegin(); iter != translations.constEnd(); iter++)
+ {
+ QAction *currentLanguage = new QAction(this);
+ currentLanguage->setData(*iter);
+ currentLanguage->setText(MUtils::Translation::get_name(*iter));
+ currentLanguage->setIcon(QIcon(QString(":/flags/%1.png").arg(*iter)));
+ currentLanguage->setCheckable(true);
+ currentLanguage->setChecked(false);
+ m_languageActionGroup->addAction(currentLanguage);
+ ui->menuLanguage->insertAction(ui->actionLoadTranslationFromFile, currentLanguage);
+ }
}
ui->menuLanguage->insertSeparator(ui->actionLoadTranslationFromFile);
connect(ui->actionLoadTranslationFromFile, SIGNAL(triggered(bool)), this, SLOT(languageFromFileActionActivated(bool)));
const QString qmFilePath = QFileInfo(m_settings->currentLanguageFile()).canonicalFilePath();
if((!qmFilePath.isEmpty()) && QFileInfo(qmFilePath).exists() && QFileInfo(qmFilePath).isFile() && (QFileInfo(qmFilePath).suffix().compare("qm", Qt::CaseInsensitive) == 0))
{
- if(lamexp_install_translator_from_file(qmFilePath))
+ if(MUtils::Translation::install_translator_from_file(qmFilePath))
{
QList<QAction*> actions = m_languageActionGroup->actions();
while(!actions.isEmpty()) actions.takeFirst()->setChecked(false);
while(!languageActions.isEmpty())
{
QAction *currentLanguage = languageActions.takeFirst();
- if(currentLanguage->data().toString().compare(LAMEXP_DEFAULT_LANGID, Qt::CaseInsensitive) == 0)
+ if(currentLanguage->data().toString().compare(MUtils::Translation::DEFAULT_LANGID, Qt::CaseInsensitive) == 0)
{
currentLanguage->setChecked(true);
languageActionActivated(currentLanguage);
{
if(m_settings->neroAacNotificationsEnabled())
{
- if(lamexp_tool_version("neroAacEnc.exe") < lamexp_toolver_neroaac())
+ if(lamexp_tools_version("neroAacEnc.exe") < lamexp_toolver_neroaac())
{
QString messageText;
messageText += NOBR(tr("LameXP detected that your version of the Nero AAC encoder is outdated!")).append("<br>");
- messageText += NOBR(tr("The current version available is %1 (or later), but you still have version %2 installed.").arg(lamexp_version2string("?.?.?.?", lamexp_toolver_neroaac(), tr("n/a")), lamexp_version2string("?.?.?.?", lamexp_tool_version("neroAacEnc.exe"), tr("n/a")))).append("<br><br>");
+ messageText += NOBR(tr("The current version available is %1 (or later), but you still have version %2 installed.").arg(lamexp_version2string("?.?.?.?", lamexp_toolver_neroaac(), tr("n/a")), lamexp_version2string("?.?.?.?", lamexp_tools_version("neroAacEnc.exe"), tr("n/a")))).append("<br><br>");
messageText += NOBR(tr("You can download the latest version of the Nero AAC encoder from the Nero website at:")).append("<br>");
messageText += "<nobr><tt>" + LINK(AboutDialog::neroAacUrl) + "</tt></nobr><br><br>";
messageText += NOBR(tr("(Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!)")).append("<br>");
{
QString langId = action->data().toString();
- if(lamexp_install_translator(langId))
+ if(MUtils::Translation::install_translator(langId))
{
action->setChecked(true);
ui->actionLoadTranslationFromFile->setChecked(false);
{
QStringList selectedFiles = dialog.selectedFiles();
const QString qmFile = QFileInfo(selectedFiles.first()).canonicalFilePath();
- if(lamexp_install_translator_from_file(qmFile))
+ if(MUtils::Translation::install_translator_from_file(qmFile))
{
QList<QAction*> actions = m_languageActionGroup->actions();
while(!actions.isEmpty())
*/
void MainWindow::showCustomParamsHelpScreen(const QString &toolName, const QString &command)
{
- const QString binary = lamexp_tool_lookup(toolName);
+ const QString binary = lamexp_tools_lookup(toolName);
if(binary.isEmpty())
{
MUtils::Sound::beep(MUtils::Sound::BEEP_ERR);
m_firstShow(true),
m_updateReadyToInstall(false),
m_updaterProcess(NULL),
- m_binaryUpdater(lamexp_tool_lookup("wupdate.exe")),
- m_binaryWGet(lamexp_tool_lookup("wget.exe")),
- m_binaryGnuPG(lamexp_tool_lookup("gpgv.exe")),
- m_binaryKeys(lamexp_tool_lookup("gpgv.gpg"))
+ m_binaryUpdater(lamexp_tools_lookup("wupdate.exe")),
+ m_binaryWGet(lamexp_tools_lookup("wget.exe")),
+ m_binaryGnuPG(lamexp_tools_lookup("gpgv.exe")),
+ m_binaryKeys(lamexp_tools_lookup("gpgv.gpg"))
{
if(m_binaryUpdater.isEmpty())
{
AACEncoder::AACEncoder(void)
:
- m_binary_enc(lamexp_tool_lookup("neroAacEnc.exe")),
- m_binary_tag(lamexp_tool_lookup("neroAacTag.exe")),
- m_binary_sox(lamexp_tool_lookup("sox.exe"))
+ m_binary_enc(lamexp_tools_lookup("neroAacEnc.exe")),
+ m_binary_tag(lamexp_tools_lookup("neroAacTag.exe")),
+ m_binary_sox(lamexp_tools_lookup("sox.exe"))
{
if(m_binary_enc.isEmpty() || m_binary_tag.isEmpty() || m_binary_sox.isEmpty())
{
FHGAACEncoder::FHGAACEncoder(void)
:
- m_binary_enc(lamexp_tool_lookup("fhgaacenc.exe")),
- m_binary_dll(lamexp_tool_lookup("enc_fhgaac.dll"))
+ m_binary_enc(lamexp_tools_lookup("fhgaacenc.exe")),
+ m_binary_dll(lamexp_tools_lookup("enc_fhgaac.dll"))
{
if(m_binary_enc.isEmpty() || m_binary_dll.isEmpty())
{
QAACEncoder::QAACEncoder(void)
:
- m_binary_qaac(lamexp_tool_lookup("qaac.exe")),
- m_binary_soxr(lamexp_tool_lookup("libsoxr.dll")),
- m_binary_soxc(lamexp_tool_lookup("libsoxconvolver.dll"))
+ m_binary_qaac(lamexp_tools_lookup("qaac.exe")),
+ m_binary_soxr(lamexp_tools_lookup("libsoxr.dll")),
+ m_binary_soxc(lamexp_tools_lookup("libsoxconvolver.dll"))
{
if(m_binary_qaac.isEmpty() || m_binary_soxr.isEmpty() || m_binary_soxc.isEmpty())
{
AC3Encoder::AC3Encoder(void)
:
- m_binary(lamexp_tool_lookup("aften.exe"))
+ m_binary(lamexp_tools_lookup("aften.exe"))
{
if(m_binary.isEmpty())
{
DCAEncoder::DCAEncoder(void)
:
- m_binary(lamexp_tool_lookup("dcaenc.exe"))
+ m_binary(lamexp_tools_lookup("dcaenc.exe"))
{
if(m_binary.isEmpty())
{
FLACEncoder::FLACEncoder(void)
:
- m_binary(lamexp_tool_lookup("flac.exe"))
+ m_binary(lamexp_tools_lookup("flac.exe"))
{
if(m_binary.isEmpty())
{
MACEncoder::MACEncoder(void)
:
- m_binary_enc(lamexp_tool_lookup("mac.exe")),
- m_binary_tag(lamexp_tool_lookup("tag.exe"))
+ m_binary_enc(lamexp_tools_lookup("mac.exe")),
+ m_binary_tag(lamexp_tools_lookup("tag.exe"))
{
if(m_binary_enc.isEmpty() || m_binary_tag.isEmpty())
{
MP3Encoder::MP3Encoder(void)
:
- m_binary(lamexp_tool_lookup("lame.exe"))
+ m_binary(lamexp_tools_lookup("lame.exe"))
{
if(m_binary.isEmpty())
{
OpusEncoder::OpusEncoder(void)
:
- m_binary(lamexp_tool_lookup("opusenc.exe"))
+ m_binary(lamexp_tools_lookup("opusenc.exe"))
{
if(m_binary.isEmpty())
{
VorbisEncoder::VorbisEncoder(void)
:
- m_binary(lamexp_tool_lookup("oggenc2.exe"))
+ m_binary(lamexp_tools_lookup("oggenc2.exe"))
{
if(m_binary.isEmpty())
{
DownmixFilter::DownmixFilter(void)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
NormalizeFilter::NormalizeFilter(int peakVolume, int equalizationMode)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
ResampleFilter::ResampleFilter(int samplingRate, int bitDepth)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
ToneAdjustFilter::ToneAdjustFilter(int bass, int treble)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
#include <cstdlib>
#include <QtGlobal>
+#include <QString>
//Forward declarations
class QDate;
class LockedFile;
///////////////////////////////////////////////////////////////////////////////
-// GLOBAL CONSTANTS
-///////////////////////////////////////////////////////////////////////////////
-
-extern const char* LAMEXP_DEFAULT_LANGID;
-extern const char* LAMEXP_DEFAULT_TRANSLATION;
-
-///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
/*
- * Translation Support
- */
-QStringList lamexp_query_translations(void);
-unsigned int lamexp_translation_country(const QString &langId);
-bool lamexp_translation_init(void);
-QString lamexp_translation_name(const QString &language);
-bool lamexp_translation_register(const QString &langId, const QString &qmFile, const QString &langName, unsigned int &systemId, unsigned int &country);
-unsigned int lamexp_translation_sysid(const QString &langId);
-bool lamexp_install_translator(const QString &language);
-bool lamexp_install_translator_from_file(const QString &qmFile);
-
-/*
* Tools Support
*/
-bool lamexp_tool_check (const QString &toolName);
-const QString& lamexp_tool_lookup (const QString &toolName);
-void lamexp_tool_register(const QString &toolName, LockedFile *file, unsigned int version = 0, const QString *tag = NULL);
-unsigned int lamexp_tool_version (const QString &toolName, QString *tag = NULL);
+void lamexp_tools_register(const QString &toolName, LockedFile *const file, const quint32 &version, const QString &tag = QString());
+bool lamexp_tools_check (const QString &toolName);
+const QString& lamexp_tools_lookup (const QString &toolName);
+const quint32& lamexp_tools_version (const QString &toolName, QString *const tagOut = NULL);
/*
* Version getters
const char* lamexp_version_release (void);
bool lamexp_version_portable (void);
bool lamexp_version_demo (void);
-QDate& lamexp_version_expires (void);
+const QDate& lamexp_version_expires (void);
unsigned int lamexp_toolver_neroaac (void);
unsigned int lamexp_toolver_fhgaacenc(void);
unsigned int lamexp_toolver_qaacenc (void);
unsigned int lamexp_toolver_coreaudio(void);
-
/*
* URL getters
*/
* Misc Functions
*/
const QIcon& lamexp_app_icon(void);
-const QString lamexp_version2string(const QString &pattern, unsigned int version, const QString &defaultText, const QString *tag = NULL);
-
-/*
- * Finalization
- */
-void lamexp_finalization(void);
+const QString lamexp_version2string(const QString &pattern, unsigned int version, const QString &defaultText, const QString &tag = QString());
///////////////////////////////////////////////////////////////////////////////
// HELPER MACROS
//Qt includes
#include <QApplication>
-#include <QMap>
+#include <QHash>
#include <QReadWriteLock>
-#include <QReadLocker>
-#include <QWriteLocker>
#include <QString>
#include <QStringList>
-#include <QTranslator>
#include <QFileInfo>
+#include <QPair>
//MUtils
#include <MUtils/Global.h>
#include <MUtils/Exception.h>
+//CRT
+#include <stdint.h>
+
///////////////////////////////////////////////////////////////////////////////
// GLOBAL VARS
///////////////////////////////////////////////////////////////////////////////
-//Tools
-static struct
-{
- QMap<QString, LockedFile*> *registry;
- QMap<QString, unsigned int> *versions;
- QMap<QString, QString> *tags;
- QReadWriteLock lock;
-}
-g_lamexp_tools;
-
-//Supported languages
-static struct
-{
- QMap<QString, QString> *files;
- QMap<QString, QString> *names;
- QMap<QString, unsigned int> *sysid;
- QMap<QString, unsigned int> *cntry;
- QReadWriteLock lock;
-}
-g_lamexp_translation;
+//Typedef
+typedef QPair<quint32,QString> tool_info_t;
+typedef QPair<LockedFile*, tool_info_t> tool_data_t;
+typedef QHash<QString, tool_data_t> tool_hash_t;
-//Translator
-static struct
-{
- QTranslator *instance;
- QReadWriteLock lock;
-}
-g_lamexp_currentTranslator;
+//Tool registry
+static QScopedPointer<tool_hash_t> g_lamexp_tools_data;
+static QReadWriteLock g_lamexp_tools_lock;
//Null String
-static const QString g_null;
+static const QString g_null_string;
+
+//UINT_MAX
+static const quint32 g_max_uint32 = UINT32_MAX;
+
+//Helper Macro
+#define MAKE_ENTRY(LOCK_FILE,VER,TAG) \
+ qMakePair((LOCK_FILE),qMakePair((VER),(TAG)))
///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
/*
- * Register tool
- */
-void lamexp_tool_register(const QString &toolName, LockedFile *file, unsigned int version, const QString *tag)
-{
- QWriteLocker writeLock(&g_lamexp_tools.lock);
-
- if(!g_lamexp_tools.registry) g_lamexp_tools.registry = new QMap<QString, LockedFile*>();
- if(!g_lamexp_tools.versions) g_lamexp_tools.versions = new QMap<QString, unsigned int>();
- if(!g_lamexp_tools.tags) g_lamexp_tools.tags = new QMap<QString, QString>();
-
- if(g_lamexp_tools.registry->contains(toolName.toLower()))
- {
- MUTILS_THROW("lamexp_register_tool: Tool is already registered!");
- }
-
- g_lamexp_tools.registry->insert(toolName.toLower(), file);
- g_lamexp_tools.versions->insert(toolName.toLower(), version);
- g_lamexp_tools.tags->insert(toolName.toLower(), (tag) ? (*tag) : QString());
-}
-
-/*
- * Check for tool
- */
-bool lamexp_tool_check(const QString &toolName)
-{
- QReadLocker readLock(&g_lamexp_tools.lock);
- return (g_lamexp_tools.registry) ? g_lamexp_tools.registry->contains(toolName.toLower()) : false;
-}
-
-/*
- * Lookup tool path
- */
-const QString &lamexp_tool_lookup(const QString &toolName)
-{
- QReadLocker readLock(&g_lamexp_tools.lock);
-
- if(g_lamexp_tools.registry)
- {
- if(g_lamexp_tools.registry->contains(toolName.toLower()))
- {
- return g_lamexp_tools.registry->value(toolName.toLower())->filePath();
- }
- else
- {
- return g_null;
- }
- }
- else
- {
- return g_null;
- }
-}
-
-/*
- * Lookup tool version
+ * Clean-up *all* registered tools
*/
-unsigned int lamexp_tool_version(const QString &toolName, QString *tag)
+static void lamexp_tools_clean_up(void)
{
- QReadLocker readLock(&g_lamexp_tools.lock);
- if(tag) tag->clear();
+ QWriteLocker writeLock(&g_lamexp_tools_lock);
- if(g_lamexp_tools.versions)
+ if(!g_lamexp_tools_data.isNull())
{
- if(g_lamexp_tools.versions->contains(toolName.toLower()))
- {
- if(tag)
- {
- if(g_lamexp_tools.tags->contains(toolName.toLower())) *tag = g_lamexp_tools.tags->value(toolName.toLower());
- }
- return g_lamexp_tools.versions->value(toolName.toLower());
- }
- else
+ const QStringList keys = g_lamexp_tools_data->keys();
+ for(QStringList::ConstIterator iter = keys.constBegin(); iter != keys.constEnd(); iter++)
{
- return UINT_MAX;
+ tool_data_t currentTool = (*g_lamexp_tools_data)[*iter];
+ MUTILS_DELETE(currentTool.first);
}
- }
- else
- {
- return UINT_MAX;
+ g_lamexp_tools_data->clear();
}
}
/*
- * Version number to human-readable string
+ * Register tool
*/
-const QString lamexp_version2string(const QString &pattern, unsigned int version, const QString &defaultText, const QString *tag)
+void lamexp_tools_register(const QString &toolName, LockedFile *const file, const quint32 &version, const QString &tag)
{
- if(version == UINT_MAX)
- {
- return defaultText;
- }
-
- QString result = pattern;
- const int digits = result.count(QChar(L'?'), Qt::CaseInsensitive);
-
- if(digits < 1)
- {
- return result;
- }
-
- int pos = 0, index = -1;
- const QString versionStr = QString().sprintf("%0*u", digits, version);
- Q_ASSERT(versionStr.length() == digits);
+ QWriteLocker writeLock(&g_lamexp_tools_lock);
- while((index = result.indexOf(QChar(L'?'), Qt::CaseInsensitive)) >= 0)
+ if(g_lamexp_tools_data.isNull())
{
- result[index] = versionStr[pos++];
+ g_lamexp_tools_data.reset(new tool_hash_t());
+ atexit(lamexp_tools_clean_up);
}
- if(tag)
+ const QString key = toolName.simplified().toLower();
+ if(g_lamexp_tools_data->contains(key))
{
- if((index = result.indexOf(QChar(L'#'), Qt::CaseInsensitive)) >= 0)
- {
- result.remove(index, 1).insert(index, (*tag));
- }
+ MUTILS_THROW("lamexp_register_tool: Tool is already registered!");
}
- return result;
-}
-
-/*
- * Initialize translations and add default language
- */
-bool lamexp_translation_init(void)
-{
- QWriteLocker writeLockTranslations(&g_lamexp_translation.lock);
-
- if((!g_lamexp_translation.files) && (!g_lamexp_translation.names))
- {
- g_lamexp_translation.files = new QMap<QString, QString>();
- g_lamexp_translation.names = new QMap<QString, QString>();
- g_lamexp_translation.files->insert(LAMEXP_DEFAULT_LANGID, "");
- g_lamexp_translation.names->insert(LAMEXP_DEFAULT_LANGID, "English");
- return true;
- }
- else
- {
- qWarning("[lamexp_translation_init] Error: Already initialized!");
- return false;
- }
+ g_lamexp_tools_data->insert(key, MAKE_ENTRY(file, version, tag));
}
/*
- * Register a new translation
+ * Check for tool
*/
-bool lamexp_translation_register(const QString &langId, const QString &qmFile, const QString &langName, unsigned int &systemId, unsigned int &country)
+bool lamexp_tools_check(const QString &toolName)
{
- QWriteLocker writeLockTranslations(&g_lamexp_translation.lock);
+ QReadLocker readLock(&g_lamexp_tools_lock);
- if(qmFile.isEmpty() || langName.isEmpty() || systemId < 1)
+ if(!g_lamexp_tools_data.isNull())
{
- return false;
+ const QString key = toolName.simplified().toLower();
+ return g_lamexp_tools_data->contains(key);
}
- if(!g_lamexp_translation.files) g_lamexp_translation.files = new QMap<QString, QString>();
- if(!g_lamexp_translation.names) g_lamexp_translation.names = new QMap<QString, QString>();
- if(!g_lamexp_translation.sysid) g_lamexp_translation.sysid = new QMap<QString, unsigned int>();
- if(!g_lamexp_translation.cntry) g_lamexp_translation.cntry = new QMap<QString, unsigned int>();
-
- g_lamexp_translation.files->insert(langId, qmFile);
- g_lamexp_translation.names->insert(langId, langName);
- g_lamexp_translation.sysid->insert(langId, systemId);
- g_lamexp_translation.cntry->insert(langId, country);
-
- return true;
-}
-
-/*
- * Get list of all translations
- */
-QStringList lamexp_query_translations(void)
-{
- QReadLocker readLockTranslations(&g_lamexp_translation.lock);
- return (g_lamexp_translation.files) ? g_lamexp_translation.files->keys() : QStringList();
-}
-
-/*
- * Get translation name
- */
-QString lamexp_translation_name(const QString &langId)
-{
- QReadLocker readLockTranslations(&g_lamexp_translation.lock);
- return (g_lamexp_translation.names) ? g_lamexp_translation.names->value(langId.toLower(), QString()) : QString();
-}
-
-/*
- * Get translation system id
- */
-unsigned int lamexp_translation_sysid(const QString &langId)
-{
- QReadLocker readLockTranslations(&g_lamexp_translation.lock);
- return (g_lamexp_translation.sysid) ? g_lamexp_translation.sysid->value(langId.toLower(), 0) : 0;
-}
-
-/*
- * Get translation script id
- */
-unsigned int lamexp_translation_country(const QString &langId)
-{
- QReadLocker readLockTranslations(&g_lamexp_translation.lock);
- return (g_lamexp_translation.cntry) ? g_lamexp_translation.cntry->value(langId.toLower(), 0) : 0;
+ return false;
}
/*
- * Install a new translator
+ * Lookup tool path
*/
-bool lamexp_install_translator(const QString &langId)
+const QString &lamexp_tools_lookup(const QString &toolName)
{
- bool success = false;
- const QString qmFileToPath(":/localization/%1");
+ QReadLocker readLock(&g_lamexp_tools_lock);
- if(langId.isEmpty() || langId.toLower().compare(LAMEXP_DEFAULT_LANGID) == 0)
- {
- success = lamexp_install_translator_from_file(qmFileToPath.arg(LAMEXP_DEFAULT_TRANSLATION));
- }
- else
+ if(!g_lamexp_tools_data.isNull())
{
- QReadLocker readLock(&g_lamexp_translation.lock);
- QString qmFile = (g_lamexp_translation.files) ? g_lamexp_translation.files->value(langId.toLower(), QString()) : QString();
- readLock.unlock();
-
- if(!qmFile.isEmpty())
- {
- success = lamexp_install_translator_from_file(qmFileToPath.arg(qmFile));
- }
- else
+ const QString key = toolName.simplified().toLower();
+ if(g_lamexp_tools_data->contains(key))
{
- qWarning("Translation '%s' not available!", langId.toLatin1().constData());
+ return (*g_lamexp_tools_data)[key].first->filePath();
}
}
- return success;
+ return g_null_string;
}
/*
- * Install a new translator from file
+ * Lookup tool version
*/
-bool lamexp_install_translator_from_file(const QString &qmFile)
+const quint32 &lamexp_tools_version(const QString &toolName, QString *const tagOut)
{
- QWriteLocker writeLock(&g_lamexp_currentTranslator.lock);
- bool success = false;
-
- if(!g_lamexp_currentTranslator.instance)
- {
- g_lamexp_currentTranslator.instance = new QTranslator();
- }
+ QReadLocker readLock(&g_lamexp_tools_lock);
- if(!qmFile.isEmpty())
+ if(!g_lamexp_tools_data.isNull())
{
- QString qmPath = QFileInfo(qmFile).canonicalFilePath();
- QApplication::removeTranslator(g_lamexp_currentTranslator.instance);
- if(success = g_lamexp_currentTranslator.instance->load(qmPath))
+ const QString key = toolName.simplified().toLower();
+ if(g_lamexp_tools_data->contains(key))
{
- QApplication::installTranslator(g_lamexp_currentTranslator.instance);
- }
- else
- {
- qWarning("Failed to load translation:\n\"%s\"", qmPath.toLatin1().constData());
+ const tool_info_t &info = (*g_lamexp_tools_data)[key].second;
+ if(tagOut)
+ {
+ *tagOut = info.second;
+ }
+ return info.first;
}
}
- else
- {
- QApplication::removeTranslator(g_lamexp_currentTranslator.instance);
- success = true;
- }
-
- return success;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// INITIALIZATION
-///////////////////////////////////////////////////////////////////////////////
-
-extern "C" void _lamexp_global_init_tools(void)
-{
- MUTILS_ZERO_MEMORY(g_lamexp_tools);
- MUTILS_ZERO_MEMORY(g_lamexp_currentTranslator);
- MUTILS_ZERO_MEMORY(g_lamexp_translation);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// FINALIZATION
-///////////////////////////////////////////////////////////////////////////////
-
-extern "C" void _lamexp_global_free_tools(void)
-{
- //Free *all* registered translations
- if(g_lamexp_currentTranslator.instance)
- {
- QApplication::removeTranslator(g_lamexp_currentTranslator.instance);
- MUTILS_DELETE(g_lamexp_currentTranslator.instance);
- }
- MUTILS_DELETE(g_lamexp_translation.files);
- MUTILS_DELETE(g_lamexp_translation.names);
- MUTILS_DELETE(g_lamexp_translation.cntry);
- MUTILS_DELETE(g_lamexp_translation.sysid);
- //Free *all* registered tools
- if(g_lamexp_tools.registry)
+ if(tagOut)
{
- QStringList keys = g_lamexp_tools.registry->keys();
- for(int i = 0; i < keys.count(); i++)
- {
- LockedFile *lf = g_lamexp_tools.registry->take(keys.at(i));
- MUTILS_DELETE(lf);
- }
- g_lamexp_tools.registry->clear();
- g_lamexp_tools.versions->clear();
- g_lamexp_tools.tags->clear();
+ tagOut->clear();
}
- MUTILS_DELETE(g_lamexp_tools.registry);
- MUTILS_DELETE(g_lamexp_tools.versions);
- MUTILS_DELETE(g_lamexp_tools.tags);
-
+ return g_max_uint32;
}
return *g_lamexp_icon_data;
}
+
+/*
+ * Version number to human-readable string
+ */
+const QString lamexp_version2string(const QString &pattern, unsigned int version, const QString &defaultText, const QString &tag)
+{
+ if(version == UINT_MAX)
+ {
+ return defaultText;
+ }
+
+ QString result = pattern;
+ const int digits = result.count(QChar(L'?'), Qt::CaseInsensitive);
+
+ if(digits < 1)
+ {
+ return result;
+ }
+
+ int pos = 0, index = -1;
+ const QString versionStr = QString().sprintf("%0*u", digits, version);
+ Q_ASSERT(versionStr.length() == digits);
+
+ while((index = result.indexOf(QChar(L'?'), Qt::CaseInsensitive)) >= 0)
+ {
+ result[index] = versionStr[pos++];
+ }
+
+ if(!tag.isEmpty())
+ {
+ if((index = result.indexOf(QChar(L'#'), Qt::CaseInsensitive)) >= 0)
+ {
+ result.remove(index, 1).insert(index, tag);
+ }
+ }
+
+ return result;
+}
#include "Global.h"
//LameXP includes
-#define LAMEXP_INC_CONFIG
+#define LAMEXP_INC_CONFIG 1
#include "Resource.h"
#include "Config.h"
/*
* Calculate expiration date
*/
-QDate &lamexp_version_expires(void)
+const QDate &lamexp_version_expires(void)
{
QReadLocker readLock(&g_lamexp_version_lock);
#endif
#endif
-//Localization
-const char* LAMEXP_DEFAULT_LANGID = "en";
-const char* LAMEXP_DEFAULT_TRANSLATION = "LameXP_EN.qm";
-
///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
extern "C"
{
int mainCRTStartup(void);
- void _lamexp_global_init_tools(void);
- void _lamexp_global_free_tools(void);
}
/*
* Application entry point (runs before static initializers)
*/
-
extern "C" int lamexp_entry_point(void)
{
if(g_lamexp_entry_check_flag != 0x789E09B2)
MUtils::OS::fatal_exit(L"Application initialization has failed, take care!");
}
- //Call global initialization functions
- _lamexp_global_init_tools();
-
//Make sure we will pass the check
g_lamexp_entry_check_flag = (~g_lamexp_entry_check_flag);
//Now initialize the C Runtime library!
return mainCRTStartup();
}
-
-/*
- * Application finalization function
- */
-void lamexp_finalization(void)
-{
- qDebug("lamexp_finalization()");
-
- //Call global finalization functions, in proper order
- _lamexp_global_free_tools();
-}
#include <QMutex>
#include <QDir>
+//VLD
+#ifdef _MSC_VER
+#include <vld.h>
+#endif
+
///////////////////////////////////////////////////////////////////////////////
// Helper functions
///////////////////////////////////////////////////////////////////////////////
settingsModel->slowStartup(poInitializationThread->getSlowIndicator());
}
-static int lamexp_main_loop_helper(MUtils::IPCChannel *const ipcChannel, FileListModel *const fileListModel, AudioFileModel_MetaInfo *const metaInfo, SettingsModel *const settingsModel, int &iShutdown)
+static int lamexp_main_loop(const MUtils::CPUFetaures::cpu_info_t &cpuFeatures, MUtils::IPCChannel *const ipcChannel, int &iShutdown)
{
int iResult = -1;
bool bAccepted = true;
+ //Create models
+ QScopedPointer<FileListModel> fileListModel(new FileListModel() );
+ QScopedPointer<AudioFileModel_MetaInfo> metaInfo (new AudioFileModel_MetaInfo());
+ QScopedPointer<SettingsModel> settingsModel(new SettingsModel() );
+
+ //Show splash screen
+ lamexp_show_splash(cpuFeatures, settingsModel.data());
+
+ //Validate settings
+ settingsModel->validate();
+
//Create main window
- QScopedPointer<MainWindow> poMainWindow(new MainWindow(ipcChannel, fileListModel, metaInfo, settingsModel));
+ QScopedPointer<MainWindow> poMainWindow(new MainWindow(ipcChannel, fileListModel.data(), metaInfo.data(), settingsModel.data()));
//Main application loop
while(bAccepted && (iShutdown <= SHUTDOWN_FLAG_NONE))
//Show processing dialog
if(bAccepted && (fileListModel->rowCount() > 0))
{
- ProcessingDialog *processingDialog = new ProcessingDialog(fileListModel, metaInfo, settingsModel);
+ ProcessingDialog *processingDialog = new ProcessingDialog(fileListModel.data(), metaInfo.data(), settingsModel.data());
processingDialog->exec();
iShutdown = processingDialog->getShutdownFlag();
MUTILS_DELETE(processingDialog);
return iResult;
}
-static int lamexp_main_loop(const MUtils::CPUFetaures::cpu_info_t &cpuFeatures, MUtils::IPCChannel *const ipcChannel, int &iShutdown)
-{
- //Create models
- QScopedPointer<FileListModel> fileListModel(new FileListModel() );
- QScopedPointer<AudioFileModel_MetaInfo> metaInfo (new AudioFileModel_MetaInfo());
- QScopedPointer<SettingsModel> settingsModel(new SettingsModel() );
-
- //Show splash screen
- lamexp_show_splash(cpuFeatures, settingsModel.data());
-
- //Validate settings
- settingsModel->validate();
-
- //Main processing loop
- return lamexp_main_loop_helper(ipcChannel, fileListModel.data(), metaInfo.data(), settingsModel.data(), iShutdown);
-}
-
///////////////////////////////////////////////////////////////////////////////
// Main function
///////////////////////////////////////////////////////////////////////////////
qDebug(" Number of CPU's : %d\n", cpuFeatures.count);
//Initialize Qt
- if(!MUtils::Startup::init_qt(argc, argv, QLatin1String("LameXP - Audio Encoder Front-End")))
+ QScopedPointer<QApplication> application(MUtils::Startup::create_qt(argc, argv, QLatin1String("LameXP - Audio Encoder Front-End")));
+ if(application.isNull())
{
- lamexp_finalization();
return EXIT_FAILURE;
}
//Initialize application
- qApp->setWindowIcon(lamexp_app_icon());
- qApp->setApplicationVersion(QString().sprintf("%d.%02d.%04d", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build()));
-
- //Add the default translations
- lamexp_translation_init();
+ application->setWindowIcon(lamexp_app_icon());
+ application->setApplicationVersion(QString().sprintf("%d.%02d.%04d", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build()));
//Check for expiration
if(lamexp_version_demo())
{
if(!arguments[i].compare("--kill", Qt::CaseInsensitive) || !arguments[i].compare("--force-kill", Qt::CaseInsensitive))
{
- lamexp_finalization();
return EXIT_SUCCESS;
}
}
}
//Terminate
- lamexp_finalization();
return iResult;
}
//MUtils
#include <MUtils/Global.h>
+#include <MUtils/Translation.h>
#include <MUtils/OSSupport.h>
//Qt
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();
-
- MUTILS_DELETE(m_cache);
- MUTILS_DELETE(m_cacheDirty);
- MUTILS_DELETE(m_cacheLock);
- MUTILS_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())
{
}
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";
SettingsModel::~SettingsModel(void)
{
MUTILS_DELETE(m_configCache);
- MUTILS_DELETE(m_defaultLanguage);
}
////////////////////////////////////////////////////////////
}
}
- 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())
{
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;
}
//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
#pragma once
+#include <QMutex>
+#include <QScopedPointer>
+
class QString;
class SettingsCache;
void syncNow(void);
private:
- SettingsCache *m_configCache;
+ SettingsModel(const SettingsModel &other) {}
+ SettingsModel &operator=(const SettingsModel &other) { return *this; }
QString initDirectory(const QString &path) const;
QString defaultLanguage(void) const;
QString defaultDirectory(void) const;
- static QString *m_defaultLanguage;
+ SettingsCache *m_configCache;
+
+ mutable QMutex m_defaultLangLock;
+ mutable QScopedPointer<QString> m_defaultLanguage;
};
///////////////////////////////////////////////////////////////////////////////
int EncoderRegistry::getAacEncoder(void)
{
- if(lamexp_tool_check("qaac.exe") && lamexp_tool_check("libsoxr.dll") && lamexp_tool_check("libsoxconvolver.dll"))
+ if(lamexp_tools_check("qaac.exe") && lamexp_tools_check("libsoxr.dll") && lamexp_tools_check("libsoxconvolver.dll"))
{
return SettingsModel::AAC_ENCODER_QAAC;
}
- else if(lamexp_tool_check("fhgaacenc.exe") && lamexp_tool_check("enc_fhgaac.dll") && lamexp_tool_check("nsutil.dll") && lamexp_tool_check("libmp4v2.dll"))
+ else if(lamexp_tools_check("fhgaacenc.exe") && lamexp_tools_check("enc_fhgaac.dll") && lamexp_tools_check("nsutil.dll") && lamexp_tools_check("libmp4v2.dll"))
{
return SettingsModel::AAC_ENCODER_FHG;
}
- else if(lamexp_tool_check("neroAacEnc.exe") && lamexp_tool_check("neroAacDec.exe") && lamexp_tool_check("neroAacTag.exe"))
+ else if(lamexp_tools_check("neroAacEnc.exe") && lamexp_tools_check("neroAacDec.exe") && lamexp_tools_check("neroAacTag.exe"))
{
return SettingsModel::AAC_ENCODER_NERO;
}
m_model(model),
m_outputDir(outputDir),
m_baseName(baseName),
- m_soxBin(lamexp_tool_lookup("sox.exe"))
+ m_soxBin(lamexp_tools_lookup("sox.exe"))
{
if(m_soxBin.isEmpty())
{
m_taskId(taskId),
m_inputFile(inputFile),
m_templateFile(templateFile),
- m_mediaInfoBin(lamexp_tool_lookup("mediainfo.exe")),
- m_avs2wavBin(lamexp_tool_lookup("avs2wav.exe")),
+ m_mediaInfoBin(lamexp_tools_lookup("mediainfo.exe")),
+ m_avs2wavBin(lamexp_tools_lookup("avs2wav.exe")),
m_abortFlag(abortFlag)
{
if(m_mediaInfoBin.isEmpty() || m_avs2wavBin.isEmpty())
#include "Thread_Initialization.h"
//Internal
-#include "LockedFile.h"
+#define LAMEXP_INC_TOOLS 1
#include "Tools.h"
+#include "LockedFile.h"
#include "Tool_Abstract.h"
//MUtils
#include <MUtils/Global.h>
#include <MUtils/OSSupport.h>
+#include <MUtils/Translation.h>
#include <MUtils/Exception.h>
//Qt
if(lockedFile)
{
- lamexp_tool_register(toolShortName, lockedFile, version, &m_toolTag);
+ lamexp_tools_register(toolShortName, lockedFile, version, m_toolTag);
}
}
void InitializationThread::initTranslations(void)
{
//Search for language files
- QStringList qmFiles = QDir(":/localization").entryList(QStringList() << "LameXP_??.qm", QDir::Files, QDir::Name);
+ const QDir qmDirectory(":/localization");
+ const QStringList qmFiles = qmDirectory.entryList(QStringList() << "LameXP_??.qm", QDir::Files, QDir::Name);
//Make sure we found at least one translation
if(qmFiles.count() < 1)
return;
}
+ //Initialize variables
+ const QString langResTemplate(":/localization/%1.txt");
+ QRegExp langIdExp("^LameXP_(\\w\\w)\\.qm$", Qt::CaseInsensitive);
+
//Add all available translations
- while(!qmFiles.isEmpty())
+ for(QStringList::ConstIterator iter = qmFiles.constBegin(); iter != qmFiles.constEnd(); iter++)
{
+ const QString langFile = qmDirectory.absoluteFilePath(*iter);
QString langId, langName;
unsigned int systemId = 0, country = 0;
- QString qmFile = qmFiles.takeFirst();
- QRegExp langIdExp("LameXP_(\\w\\w)\\.qm", Qt::CaseInsensitive);
- if(langIdExp.indexIn(qmFile) >= 0)
+ if(QFileInfo(langFile).isFile() && (langIdExp.indexIn(*iter) >= 0))
{
langId = langIdExp.cap(1).toLower();
- QResource langRes = QResource(QString(":/localization/%1.txt").arg(qmFile));
+ QResource langRes = QResource(langResTemplate.arg(*iter));
if(langRes.isValid() && langRes.size() > 0)
{
QByteArray data = QByteArray::fromRawData(reinterpret_cast<const char*>(langRes.data()), langRes.size());
QTextStream stream(&data, QIODevice::ReadOnly);
stream.setAutoDetectUnicode(false); stream.setCodec("UTF-8");
- while(!stream.atEnd())
+
+ while(!(stream.atEnd() || (stream.status() != QTextStream::Ok)))
{
QStringList langInfo = stream.readLine().simplified().split(",", QString::SkipEmptyParts);
- if(langInfo.count() == 3)
+ if(langInfo.count() >= 3)
{
systemId = langInfo.at(0).trimmed().toUInt();
country = langInfo.at(1).trimmed().toUInt();
}
}
- if(!(langId.isEmpty() || langName.isEmpty() || systemId == 0))
+ if(!(langId.isEmpty() || langName.isEmpty() || (systemId == 0)))
{
- if(lamexp_translation_register(langId, qmFile, langName, systemId, country))
+ if(MUtils::Translation::insert(langId, langFile, langName, systemId, country))
{
- qDebug("Registering translation: %s = %s (%u) [%u]", MUTILS_UTF8(qmFile), MUTILS_UTF8(langName), systemId, country);
+ qDebug("Registering translation: %s = %s (%u) [%u]", MUTILS_UTF8(*iter), MUTILS_UTF8(langName), systemId, country);
}
else
{
- qWarning("Failed to register: %s", qmFile.toLatin1().constData());
+ qWarning("Failed to register: %s", langFile.toLatin1().constData());
}
}
}
for(int i = 0; i < 3; i++)
{
- lamexp_tool_register(neroFileInfo[i].fileName(), neroBin[i], neroVersion);
+ lamexp_tools_register(neroFileInfo[i].fileName(), neroBin[i], neroVersion);
}
}
for(int i = 0; i < 5; i++)
{
- lamexp_tool_register(fhgFileInfo[i].fileName(), fhgBin[i], fhgVersion);
+ lamexp_tools_register(fhgFileInfo[i].fileName(), fhgBin[i], fhgVersion);
}
}
return;
}
- lamexp_tool_register(qaacFileInfo[0].fileName(), qaacBin[0], qaacVersion);
- lamexp_tool_register(qaacFileInfo[1].fileName(), qaacBin[1], qaacVersion);
- lamexp_tool_register(qaacFileInfo[2].fileName(), qaacBin[2], qaacVersion);
- lamexp_tool_register(qaacFileInfo[3].fileName(), qaacBin[3], qaacVersion);
+ lamexp_tools_register(qaacFileInfo[0].fileName(), qaacBin[0], qaacVersion);
+ lamexp_tools_register(qaacFileInfo[1].fileName(), qaacBin[1], qaacVersion);
+ lamexp_tools_register(qaacFileInfo[2].fileName(), qaacBin[2], qaacVersion);
+ lamexp_tools_register(qaacFileInfo[3].fileName(), qaacBin[3], qaacVersion);
}
void InitializationThread::selfTest(void)
WaveProperties::WaveProperties(void)
:
- m_binary(lamexp_tool_lookup("sox.exe"))
+ m_binary(lamexp_tools_lookup("sox.exe"))
{
if(m_binary.isEmpty())
{
#include <stdlib.h>
+#ifndef LAMEXP_INC_TOOLS
+#error Please do *not* include TOOLS.H directly!
+#endif
+
////////////////////////////////////////////////////////////
// CPU FLags
////////////////////////////////////////////////////////////