diff --git a/src/platform/qt/ConfigController.cpp b/src/platform/qt/ConfigController.cpp index 92d963008..f7039e188 100644 --- a/src/platform/qt/ConfigController.cpp +++ b/src/platform/qt/ConfigController.cpp @@ -13,6 +13,11 @@ #include +static const mOption s_frontendOptions[] = { + { "ecard", true, '\0' }, + { 0 } +}; + using namespace QGBA; ConfigOption::ConfigOption(const QString& name, QObject* parent) @@ -129,24 +134,27 @@ ConfigController::ConfigController(QObject* parent) mSubParserGraphicsInit(&m_subparsers[0], &m_graphicsOpts); m_subparsers[1].usage = "Frontend options:\n" - " --ecard FILENAME Scan an e-Reader card in the first loaded game\n" - " Can be paassed multiple times for multiple cards"; + " --ecard FILE Scan an e-Reader card in the first loaded game\n" + " Can be paassed multiple times for multiple cards\n" m_subparsers[1].parse = nullptr; m_subparsers[1].parseLong = [](struct mSubParser* parser, const char* option, const char* arg) { - if (option == QLatin1String("ecard")) { - QStringList* eCards = static_cast(parser->opts); - eCards->append(QString::fromUtf8(arg)); + ConfigController* self = static_cast(parser->opts); + QString optionName(QString::fromUtf8(option)); + if (optionName == QLatin1String("ecard")) { + QStringList ecards; + if (self->m_argvOptions.contains(optionName)) { + ecards = self->m_argvOptions[optionName].toStringList(); + } + ecards.append(QString::fromUtf8(arg)); + self->m_argvOptions[optionName] = ecards; return true; } return false; }; m_subparsers[1].apply = nullptr; m_subparsers[1].extraOptions = nullptr; - m_subparsers[1].longOptions = (const mOption[]) { - { "ecard", true, '\0' }, - { 0 } - }; - m_subparsers[1].opts = &m_eCards; + m_subparsers[1].longOptions = s_frontendOptions; + m_subparsers[1].opts = this; } ConfigController::~ConfigController() { @@ -223,6 +231,14 @@ QVariant ConfigController::getQtOption(const QString& key, const QString& group) return value; } +QVariant ConfigController::getArgvOption(const QString& key) const { + return m_argvOptions.value(key); +} + +QVariant ConfigController::takeArgvOption(const QString& key) { + return m_argvOptions.take(key); +} + void ConfigController::saveOverride(const Override& override) { override.save(overrides()); write(); @@ -334,10 +350,6 @@ void ConfigController::usage(const char* arg0) const { ::usage(arg0, nullptr, nullptr, m_subparsers.data(), m_subparsers.size()); } -QStringList ConfigController::takeECardList() { - return QStringList(std::move(m_eCards)); -} - bool ConfigController::isPortable() { return mCoreConfigIsPortable(); } diff --git a/src/platform/qt/ConfigController.h b/src/platform/qt/ConfigController.h index 13a638f59..57fbda9c5 100644 --- a/src/platform/qt/ConfigController.h +++ b/src/platform/qt/ConfigController.h @@ -81,6 +81,9 @@ public: QVariant getQtOption(const QString& key, const QString& group = QString()) const; + QVariant getArgvOption(const QString& key) const; + QVariant takeArgvOption(const QString& key); + QList getMRU() const; void setMRU(const QList& mru); @@ -96,8 +99,6 @@ public: const mGraphicsOpts* graphicsOpts() const { return &m_graphicsOpts; } void usage(const char* arg0) const; - QStringList takeECardList(); - static const QString& configDir(); static bool isPortable(); @@ -113,6 +114,8 @@ public slots: void write(); private: + void addArgvOption(const QString& key, const QVariant& value); + Configuration* defaults() { return &m_config.defaultsTable; } mCoreConfig m_config; @@ -121,8 +124,8 @@ private: mGraphicsOpts m_graphicsOpts{}; std::array m_subparsers; bool m_parsed = false; - QStringList m_eCards; - + + QHash m_argvOptions; QHash m_optionSet; std::unique_ptr m_settings; static QString s_configDir; diff --git a/src/platform/qt/CoreController.cpp b/src/platform/qt/CoreController.cpp index f4ff03d16..5433054f3 100644 --- a/src/platform/qt/CoreController.cpp +++ b/src/platform/qt/CoreController.cpp @@ -912,7 +912,7 @@ void CoreController::scanCard(const QString& path) { break; } QString filepath(QString::fromUtf8(line)); - if (filepath[0] == QChar('#')) { + if (filepath.isEmpty() || filepath[0] == QChar('#')) { continue; } if (QFileInfo(filepath).isRelative()) { diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index cfcb93599..8c69efc4f 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -931,7 +931,10 @@ void Window::gameStarted() { #ifdef M_CORE_GBA if (m_controller->platform() == mPLATFORM_GBA) { - m_controller->scanCards(m_config->takeECardList()); + QVariant eCardList = m_config->takeArgvOption(QString("ecard")); + if (eCardList.canConvert(QMetaType::QStringList)) { + m_controller->scanCards(eCardList.toStringList()); + } } #endif