Dynamic languages in selector

Similar to categories, Languages in the selector are now shown based on the library.
This commit is contained in:
Nikhil Tanwar 2023-07-11 15:30:17 +05:30
parent 574d1e2a29
commit 71f8c2f8f4
4 changed files with 34 additions and 29 deletions

View File

@ -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<QMap<QString, QVariant>> 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) {;

View File

@ -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<QPair<QString, QString>> LanguageList;
public:
typedef QList<QPair<QString, QString>> 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);

View File

@ -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);
}

View File

@ -33,6 +33,7 @@ private:
public slots:
void setCategories(QStringList);
void setLanguages(ContentManager::LanguageList);
};
#endif // CONTENTMANAGERSIDE_H