diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index c800217..7d5674b 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -71,6 +71,7 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, connect(&m_remoteLibraryManager, &OpdsRequestManager::languagesReceived, this, &ContentManager::updateLanguages); connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories); setCategories(); + setLanguages(); } QList> ContentManager::getBooksList() @@ -147,6 +148,7 @@ void ContentManager::setLocal(bool local) { m_local = local; emit(filterParamsChanged()); setCategories(); + setLanguages(); } QStringList ContentManager::getTranslations(const QStringList &keys) @@ -187,6 +189,7 @@ void ContentManager::setLanguages() languages.push_back({langCode, selfName}); } m_languages = languages; + emit(languagesLoaded(m_languages)); return; } m_remoteLibraryManager.getLanguagesFromOpds(); @@ -631,6 +634,7 @@ void ContentManager::updateLanguages(const QString& content) { tempLanguages.push_back({code, title}); } m_languages = tempLanguages; + emit(languagesLoaded(m_languages)); } void ContentManager::updateCategories(const QString& content) {; diff --git a/src/contentmanager.h b/src/contentmanager.h index 3229e1f..60db333 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -16,9 +16,9 @@ class ContentManager : public QObject Q_PROPERTY(QStringList bookIds READ getBookIds NOTIFY booksChanged) Q_PROPERTY(QStringList downloadIds READ getDownloadIds NOTIFY downloadsChanged) Q_PROPERTY(QString currentLanguage MEMBER m_currentLanguage WRITE setCurrentLanguage NOTIFY currentLangChanged) - typedef QList> LanguageList; public: + typedef QList> LanguageList; explicit ContentManager(Library* library, kiwix::Downloader *downloader, QObject *parent = nullptr); virtual ~ContentManager() {} @@ -65,6 +65,7 @@ signals: void currentLangChanged(); void pendingRequest(const bool); void categoriesLoaded(QStringList); + void languagesLoaded(LanguageList); public slots: QStringList getTranslations(const QStringList &keys); diff --git a/src/contentmanagerside.cpp b/src/contentmanagerside.cpp index 5fd81db..ace1800 100644 --- a/src/contentmanagerside.cpp +++ b/src/contentmanagerside.cpp @@ -93,30 +93,9 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) : } setCategories(KiwixApp::instance()->getContentManager()->getCategories()); + setLanguages(KiwixApp::instance()->getContentManager()->getLanguages()); connect(KiwixApp::instance()->getContentManager(), &ContentManager::categoriesLoaded, this, &ContentManagerSide::setCategories); - - for(auto lang: S_LANGUAGES) - { - auto currentLang = QLocale().language(); - auto locale = QLocale(lang); - if (locale.language() != lang) { - // Qt may not find the locale for the lang :/ - // In this case, Qt return the current locale - // So we must be sure that the locale found correspond to the lang we want to add, - // else we may add several time the current language. - continue; - } - auto item = new KListWidgetItem(QLocale::languageToString(locale.language())); - item->setData(Qt::UserRole, lang); - mp_languageSelector->addItem(item); - if (lang == currentLang) { - item->setSelected(true); - } - } - mp_languageSelector->sortItems(); - auto item = new KListWidgetItem("All"); - item->setData(Qt::UserRole, QLocale::AnyLanguage); - mp_languageSelector->insertItem(0, item); + connect(KiwixApp::instance()->getContentManager(), &ContentManager::languagesLoaded, this, &ContentManagerSide::setLanguages); } ContentManagerSide::~ContentManagerSide() @@ -131,14 +110,12 @@ void ContentManagerSide::setContentManager(ContentManager *contentManager) this, [=]() { auto item = mp_languageSelector->selectedItems().at(0); if (!item) return; - auto langId = item->data(Qt::UserRole).toInt(); - auto lang = QLocale::Language(langId); - if (lang == QLocale::AnyLanguage) { + auto lang = item->data(Qt::UserRole).toString(); + if (lang == "all") { mp_contentManager->setCurrentLanguage("*"); return; } - auto locale = QLocale(lang); - mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0)); + mp_contentManager->setCurrentLanguage(lang); }); connect(mp_categorySelector, &QListWidget::itemSelectionChanged, this, [=]() { @@ -173,3 +150,25 @@ void ContentManagerSide::setCategories(QStringList categories) } } } + +void ContentManagerSide::setLanguages(ContentManager::LanguageList langList) +{ + mp_languageSelector->blockSignals(true); + mp_languageSelector->setHidden(true); + mp_languageSelector->clear(); + mp_languageSelector->blockSignals(false); + for(auto lang: langList) + { + auto currentLang = QLocale().language(); + auto item = new KListWidgetItem(lang.second); + item->setData(Qt::UserRole, lang.first); + mp_languageSelector->addItem(item); + if (lang.second == QLocale::languageToString(currentLang)) { + item->setSelected(true); + } + } + mp_languageSelector->sortItems(); + auto item = new KListWidgetItem("All"); + item->setData(Qt::UserRole, "all"); + mp_languageSelector->insertItem(0, item); +} diff --git a/src/contentmanagerside.h b/src/contentmanagerside.h index 1aab3e4..bc21494 100644 --- a/src/contentmanagerside.h +++ b/src/contentmanagerside.h @@ -33,6 +33,7 @@ private: public slots: void setCategories(QStringList); + void setLanguages(ContentManager::LanguageList); }; #endif // CONTENTMANAGERSIDE_H