diff --git a/framework/languages/ilanguagesconfiguration.h b/framework/languages/ilanguagesconfiguration.h index 8d2591a8..eef88970 100644 --- a/framework/languages/ilanguagesconfiguration.h +++ b/framework/languages/ilanguagesconfiguration.h @@ -22,6 +22,8 @@ #ifndef MUSE_LANGUAGES_ILANGUAGESCONFIGURATION_H #define MUSE_LANGUAGES_ILANGUAGESCONFIGURATION_H +#include + #include "modularity/imoduleinterface.h" #include "types/retval.h" #include "io/path.h" @@ -46,6 +48,8 @@ class ILanguagesConfiguration : MODULE_GLOBAL_INTERFACE virtual io::path_t builtinLanguagesJsonPath() const = 0; virtual io::path_t builtinLanguageFilePath(const QString& resourceName, const QString& languageCode) const = 0; virtual io::path_t userLanguageFilePath(const QString& resourceName, const QString& languageCode) const = 0; + + virtual QStringList languageResourceNames() const = 0; }; } diff --git a/framework/languages/internal/languagesconfiguration.cpp b/framework/languages/internal/languagesconfiguration.cpp index 2cfa1a15..3419cf8d 100644 --- a/framework/languages/internal/languagesconfiguration.cpp +++ b/framework/languages/internal/languagesconfiguration.cpp @@ -21,6 +21,7 @@ */ #include "languagesconfiguration.h" +#include #include #include "global/configreader.h" @@ -94,3 +95,13 @@ io::path_t LanguagesConfiguration::userLanguageFilePath(const QString& resourceN { return languagesUserAppDataPath() + QString("/%1_%2.qm").arg(resourceName, languageCode); } + +QStringList LanguagesConfiguration::languageResourceNames() const +{ + const Val& val = m_config.value("resource_names"); + QStringList result; + for (const Val& item : val.toList()) { + result.append(item.toQString()); + } + return result; +} diff --git a/framework/languages/internal/languagesconfiguration.h b/framework/languages/internal/languagesconfiguration.h index 12f5bce4..21490152 100644 --- a/framework/languages/internal/languagesconfiguration.h +++ b/framework/languages/internal/languagesconfiguration.h @@ -52,6 +52,8 @@ class LanguagesConfiguration : public ILanguagesConfiguration, public Contextabl io::path_t builtinLanguageFilePath(const QString& resourceName, const QString& languageCode) const override; io::path_t userLanguageFilePath(const QString& resourceName, const QString& languageCode) const override; + QStringList languageResourceNames() const override; + private: Config m_config; async::Channel m_currentLanguageCodeChanged; diff --git a/framework/languages/internal/languagesservice.cpp b/framework/languages/internal/languagesservice.cpp index 73156d99..db10c887 100644 --- a/framework/languages/internal/languagesservice.cpp +++ b/framework/languages/internal/languagesservice.cpp @@ -46,11 +46,6 @@ using namespace muse; using namespace muse::languages; using namespace muse::network; -static const QStringList LANGUAGE_RESOURCE_NAMES = { - "musescore", - "instruments" -}; - static const std::string LANGUAGES_RESOURCE_NAME("LANGUAGES"); void LanguagesService::init() @@ -114,7 +109,7 @@ const Language& LanguagesService::placeholderLanguage() const bool LanguagesService::hasPlaceholderLanguage() const { - for (const QString& resourceName : LANGUAGE_RESOURCE_NAMES) { + for (const QString& resourceName : configuration()->languageResourceNames()) { if (!fileSystem()->exists(configuration()->builtinLanguageFilePath(resourceName, PLACEHOLDER_LANGUAGE_CODE))) { return false; } @@ -334,7 +329,7 @@ Ret LanguagesService::doLoadLanguage(Language& lang) lang.files[resourceName] = useUserPath ? userFilePath : appFilePath; } - for (const QString& resourceName : LANGUAGE_RESOURCE_NAMES) { + for (const QString& resourceName : configuration()->languageResourceNames()) { if (!lang.files.contains(resourceName)) { LOGE() << "Could not find resource " << resourceName << " for language " << lang.code; return muse::make_ret(muse::Ret::Code::InternalError); @@ -446,7 +441,7 @@ QStringList LanguagesService::languagesToUpdate(const QString& mainLanguageCode, const Language& lang = m_languagesHash[code]; const QJsonObject languageObject = serverLanguagesInfo.value(code).toObject(); - for (const QString& resource : LANGUAGE_RESOURCE_NAMES) { + for (const QString& resource : configuration()->languageResourceNames()) { RetVal hash = fileHash(lang.files[resource]); QString latestHash = languageObject.value(resource).toObject().value("hash").toString(); diff --git a/framework/stubs/languages/languagesconfigurationstub.cpp b/framework/stubs/languages/languagesconfigurationstub.cpp index 47a23612..28cb25bb 100644 --- a/framework/stubs/languages/languagesconfigurationstub.cpp +++ b/framework/stubs/languages/languagesconfigurationstub.cpp @@ -67,3 +67,8 @@ io::path_t LanguagesConfigurationStub::userLanguageFilePath(const QString&, cons { return io::path_t(); } + +QStringList LanguagesConfigurationStub::languageResourceNames() const +{ + return {}; +} diff --git a/framework/stubs/languages/languagesconfigurationstub.h b/framework/stubs/languages/languagesconfigurationstub.h index 89ec14a3..0ce409a2 100644 --- a/framework/stubs/languages/languagesconfigurationstub.h +++ b/framework/stubs/languages/languagesconfigurationstub.h @@ -40,6 +40,8 @@ class LanguagesConfigurationStub : public ILanguagesConfiguration io::path_t builtinLanguagesJsonPath() const override; io::path_t builtinLanguageFilePath(const QString& resourceName, const QString& languageCode) const override; io::path_t userLanguageFilePath(const QString& resourceName, const QString& languageCode) const override; + + QStringList languageResourceNames() const override; }; }