mirror of
https://github.com/kiwix/kiwix-desktop.git
synced 2025-09-22 03:26:05 -04:00
Dynamic languages in selector
Similar to categories, Languages in the selector are now shown based on the library.
This commit is contained in:
parent
574d1e2a29
commit
71f8c2f8f4
@ -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) {;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ private:
|
||||
|
||||
public slots:
|
||||
void setCategories(QStringList);
|
||||
void setLanguages(ContentManager::LanguageList);
|
||||
};
|
||||
|
||||
#endif // CONTENTMANAGERSIDE_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user