mirror of
https://github.com/kiwix/kiwix-desktop.git
synced 2025-09-22 11:37:56 -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::languagesReceived, this, &ContentManager::updateLanguages);
|
||||||
connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories);
|
connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories);
|
||||||
setCategories();
|
setCategories();
|
||||||
|
setLanguages();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QMap<QString, QVariant>> ContentManager::getBooksList()
|
QList<QMap<QString, QVariant>> ContentManager::getBooksList()
|
||||||
@ -147,6 +148,7 @@ void ContentManager::setLocal(bool local) {
|
|||||||
m_local = local;
|
m_local = local;
|
||||||
emit(filterParamsChanged());
|
emit(filterParamsChanged());
|
||||||
setCategories();
|
setCategories();
|
||||||
|
setLanguages();
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ContentManager::getTranslations(const QStringList &keys)
|
QStringList ContentManager::getTranslations(const QStringList &keys)
|
||||||
@ -187,6 +189,7 @@ void ContentManager::setLanguages()
|
|||||||
languages.push_back({langCode, selfName});
|
languages.push_back({langCode, selfName});
|
||||||
}
|
}
|
||||||
m_languages = languages;
|
m_languages = languages;
|
||||||
|
emit(languagesLoaded(m_languages));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_remoteLibraryManager.getLanguagesFromOpds();
|
m_remoteLibraryManager.getLanguagesFromOpds();
|
||||||
@ -631,6 +634,7 @@ void ContentManager::updateLanguages(const QString& content) {
|
|||||||
tempLanguages.push_back({code, title});
|
tempLanguages.push_back({code, title});
|
||||||
}
|
}
|
||||||
m_languages = tempLanguages;
|
m_languages = tempLanguages;
|
||||||
|
emit(languagesLoaded(m_languages));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentManager::updateCategories(const QString& content) {;
|
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 bookIds READ getBookIds NOTIFY booksChanged)
|
||||||
Q_PROPERTY(QStringList downloadIds READ getDownloadIds NOTIFY downloadsChanged)
|
Q_PROPERTY(QStringList downloadIds READ getDownloadIds NOTIFY downloadsChanged)
|
||||||
Q_PROPERTY(QString currentLanguage MEMBER m_currentLanguage WRITE setCurrentLanguage NOTIFY currentLangChanged)
|
Q_PROPERTY(QString currentLanguage MEMBER m_currentLanguage WRITE setCurrentLanguage NOTIFY currentLangChanged)
|
||||||
typedef QList<QPair<QString, QString>> LanguageList;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
typedef QList<QPair<QString, QString>> LanguageList;
|
||||||
explicit ContentManager(Library* library, kiwix::Downloader *downloader, QObject *parent = nullptr);
|
explicit ContentManager(Library* library, kiwix::Downloader *downloader, QObject *parent = nullptr);
|
||||||
virtual ~ContentManager() {}
|
virtual ~ContentManager() {}
|
||||||
|
|
||||||
@ -65,6 +65,7 @@ signals:
|
|||||||
void currentLangChanged();
|
void currentLangChanged();
|
||||||
void pendingRequest(const bool);
|
void pendingRequest(const bool);
|
||||||
void categoriesLoaded(QStringList);
|
void categoriesLoaded(QStringList);
|
||||||
|
void languagesLoaded(LanguageList);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
QStringList getTranslations(const QStringList &keys);
|
QStringList getTranslations(const QStringList &keys);
|
||||||
|
@ -93,30 +93,9 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
setCategories(KiwixApp::instance()->getContentManager()->getCategories());
|
setCategories(KiwixApp::instance()->getContentManager()->getCategories());
|
||||||
|
setLanguages(KiwixApp::instance()->getContentManager()->getLanguages());
|
||||||
connect(KiwixApp::instance()->getContentManager(), &ContentManager::categoriesLoaded, this, &ContentManagerSide::setCategories);
|
connect(KiwixApp::instance()->getContentManager(), &ContentManager::categoriesLoaded, this, &ContentManagerSide::setCategories);
|
||||||
|
connect(KiwixApp::instance()->getContentManager(), &ContentManager::languagesLoaded, this, &ContentManagerSide::setLanguages);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentManagerSide::~ContentManagerSide()
|
ContentManagerSide::~ContentManagerSide()
|
||||||
@ -131,14 +110,12 @@ void ContentManagerSide::setContentManager(ContentManager *contentManager)
|
|||||||
this, [=]() {
|
this, [=]() {
|
||||||
auto item = mp_languageSelector->selectedItems().at(0);
|
auto item = mp_languageSelector->selectedItems().at(0);
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
auto langId = item->data(Qt::UserRole).toInt();
|
auto lang = item->data(Qt::UserRole).toString();
|
||||||
auto lang = QLocale::Language(langId);
|
if (lang == "all") {
|
||||||
if (lang == QLocale::AnyLanguage) {
|
|
||||||
mp_contentManager->setCurrentLanguage("*");
|
mp_contentManager->setCurrentLanguage("*");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto locale = QLocale(lang);
|
mp_contentManager->setCurrentLanguage(lang);
|
||||||
mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0));
|
|
||||||
});
|
});
|
||||||
connect(mp_categorySelector, &QListWidget::itemSelectionChanged,
|
connect(mp_categorySelector, &QListWidget::itemSelectionChanged,
|
||||||
this, [=]() {
|
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:
|
public slots:
|
||||||
void setCategories(QStringList);
|
void setCategories(QStringList);
|
||||||
|
void setLanguages(ContentManager::LanguageList);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CONTENTMANAGERSIDE_H
|
#endif // CONTENTMANAGERSIDE_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user