From 28532d5dcac7dd75f04e1f8673e8da3fff30a6d1 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 01:41:15 +0530 Subject: [PATCH 1/6] Added functions to get languages and categories from OPDS feed Done necessary refactoring in OpdsRequestManager to allow different types of requests. Added functions to provide languages and categories from an OPDS feed. --- src/contentmanager.cpp | 10 +++++++ src/contentmanager.h | 2 ++ src/opdsrequestmanager.cpp | 57 ++++++++++++++++++++++++++++++-------- src/opdsrequestmanager.h | 10 +++++-- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 49a5522..9317024 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -68,6 +68,8 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, connect(mp_view->getView(), SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onCustomContextMenu(const QPoint &))); connect(this, &ContentManager::pendingRequest, mp_view, &ContentManagerView::showLoader); connect(treeView, &QTreeView::doubleClicked, this, &ContentManager::openBookWithIndex); + connect(&m_remoteLibraryManager, &OpdsRequestManager::languagesReceived, this, &ContentManager::updateLanguages); + connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories); } QList> ContentManager::getBooksList() @@ -585,6 +587,14 @@ void ContentManager::updateRemoteLibrary(const QString& content) { }); } +void ContentManager::updateLanguages(const QString& content) { + auto languages = kiwix::readLanguagesFromFeed(content.toStdString()); +} + +void ContentManager::updateCategories(const QString& content) {; + auto categories = kiwix::readCategoriesFromFeed(content.toStdString()); +} + void ContentManager::setSearch(const QString &search) { m_searchQuery = search; diff --git a/src/contentmanager.h b/src/contentmanager.h index 7650dea..488a777 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -70,6 +70,8 @@ public slots: void setSortBy(const QString& sortBy, const bool sortOrderAsc); void eraseBook(const QString& id); void updateRemoteLibrary(const QString& content); + void updateLanguages(const QString& content); + void updateCategories(const QString& content); void pauseBook(const QString& id); void resumeBook(const QString& id); void cancelBook(const QString& id); diff --git a/src/opdsrequestmanager.cpp b/src/opdsrequestmanager.cpp index 197a145..a5e0ab1 100644 --- a/src/opdsrequestmanager.cpp +++ b/src/opdsrequestmanager.cpp @@ -3,7 +3,6 @@ #include "kiwixapp.h" OpdsRequestManager::OpdsRequestManager() -: mp_reply(nullptr) { } @@ -39,29 +38,63 @@ void OpdsRequestManager::doUpdate(const QString& currentLanguage, const QString& } query.addQueryItem("notag", excludeTags.join(";")); + auto mp_reply = opdsResponseFromPath("/catalog/search", query); + connect(mp_reply, &QNetworkReply::finished, this, [=]() { + receiveContent(mp_reply); + }); +} + +QNetworkReply* OpdsRequestManager::opdsResponseFromPath(const QString &path, const QUrlQuery &query) +{ QUrl url; url.setScheme("https"); url.setHost(CATALOG_HOST); url.setPort(CATALOG_PORT); - url.setPath("/catalog/search"); + url.setPath(path); url.setQuery(query); - qInfo() << "Downloading" << url.toString(QUrl::FullyEncoded); - QNetworkRequest request(url); - if (mp_reply) { - mp_reply->abort(); - } - mp_reply = m_networkManager.get(request); - connect(mp_reply, &QNetworkReply::finished, this, &OpdsRequestManager::receiveContent); + return m_networkManager.get(request); } -void OpdsRequestManager::receiveContent() +void OpdsRequestManager::getLanguagesFromOpds() { + auto mp_reply = opdsResponseFromPath("/catalog/v2/languages"); + connect(mp_reply, &QNetworkReply::finished, this, [=]() { + receiveLanguages(mp_reply); + }); +} + +void OpdsRequestManager::getCategoriesFromOpds() +{ + auto mp_reply = opdsResponseFromPath("/catalog/v2/categories"); + connect(mp_reply, &QNetworkReply::finished, this, [=]() { + receiveCategories(mp_reply); + }); +} + +QString replyContent(QNetworkReply *mp_reply) +{ + QString content; if (mp_reply->error() != QNetworkReply::OperationCanceledError) { - QString content = mp_reply->readAll().data(); - emit(requestReceived(content)); + content = mp_reply->readAll().data(); } mp_reply->deleteLater(); mp_reply = nullptr; + return content; +} + +void OpdsRequestManager::receiveLanguages(QNetworkReply *mp_reply) +{ + emit(languagesReceived(replyContent(mp_reply))); +} + +void OpdsRequestManager::receiveCategories(QNetworkReply *mp_reply) +{ + emit(categoriesReceived(replyContent(mp_reply))); +} + +void OpdsRequestManager::receiveContent(QNetworkReply *mp_reply) +{ + emit(requestReceived(replyContent(mp_reply))); } diff --git a/src/opdsrequestmanager.h b/src/opdsrequestmanager.h index 2e3b6fa..5a3d3c2 100644 --- a/src/opdsrequestmanager.h +++ b/src/opdsrequestmanager.h @@ -16,16 +16,22 @@ public: public: void doUpdate(const QString& currentLanguage, const QString& categoryFilter); + void getLanguagesFromOpds(); + void getCategoriesFromOpds(); private: QNetworkAccessManager m_networkManager; - QNetworkReply *mp_reply; + QNetworkReply* opdsResponseFromPath(const QString &path, const QUrlQuery &query = QUrlQuery()); signals: void requestReceived(const QString&); + void languagesReceived(const QString&); + void categoriesReceived(const QString&); public slots: - void receiveContent(); + void receiveContent(QNetworkReply*); + void receiveLanguages(QNetworkReply*); + void receiveCategories(QNetworkReply*); }; #endif // OPDSREQUESTMANAGER_H From ce140d2aa57bf476898b9566533d3145c59cb65c Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 02:55:47 +0530 Subject: [PATCH 2/6] set language and category functions ContentManager now keeps a list of current categories and languages. Added functions to change this based on local or remote libary --- src/contentmanager.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++ src/contentmanager.h | 7 +++++++ 2 files changed, 51 insertions(+) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 9317024..bf4045b 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -70,6 +70,7 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, connect(treeView, &QTreeView::doubleClicked, this, &ContentManager::openBookWithIndex); connect(&m_remoteLibraryManager, &OpdsRequestManager::languagesReceived, this, &ContentManager::updateLanguages); connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories); + setLanguages(); } QList> ContentManager::getBooksList() @@ -157,6 +158,37 @@ QStringList ContentManager::getTranslations(const QStringList &keys) return translations; } +void ContentManager::setCategories() +{ + QStringList categories; + if (m_local) { + auto categoryData = mp_library->getKiwixLibrary().getBooksCategories(); + for (auto category : categoryData) { + auto categoryName = QString::fromStdString(category); + categories.push_back(categoryName); + } + m_categories = categories; + return; + } + m_remoteLibraryManager.getCategoriesFromOpds(); +} + +void ContentManager::setLanguages() +{ + LanguageList languages; + if (m_local) { + auto languageData = mp_library->getKiwixLibrary().getBooksLanguages(); + for (auto language : languageData) { + auto langCode = QString::fromStdString(language); + auto selfName = QString::fromStdString(kiwix::getLanguageSelfName(language)); + languages.push_back({langCode, selfName}); + } + m_languages = languages; + return; + } + m_remoteLibraryManager.getLanguagesFromOpds(); +} + #define ADD_V(KEY, METH) {if(key==KEY) values.insert(key, QString::fromStdString((b->METH())));} QMap ContentManager::getBookInfos(QString id, const QStringList &keys) { @@ -589,10 +621,22 @@ void ContentManager::updateRemoteLibrary(const QString& content) { void ContentManager::updateLanguages(const QString& content) { auto languages = kiwix::readLanguagesFromFeed(content.toStdString()); + LanguageList tempLanguages; + for (auto language : languages) { + auto code = QString::fromStdString(language.first); + auto title = QString::fromStdString(language.second); + tempLanguages.push_back({code, title}); + } + m_languages = tempLanguages; } void ContentManager::updateCategories(const QString& content) {; auto categories = kiwix::readCategoriesFromFeed(content.toStdString()); + QStringList tempCategories; + for (auto catg : categories) { + tempCategories.push_back(QString::fromStdString(catg)); + } + m_categories = tempCategories; } void ContentManager::setSearch(const QString &search) diff --git a/src/contentmanager.h b/src/contentmanager.h index 488a777..45fb25c 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -16,6 +16,7 @@ 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: explicit ContentManager(Library* library, kiwix::Downloader *downloader, QObject *parent = nullptr); @@ -28,6 +29,8 @@ public: void setCurrentCategoryFilter(QString category); void setCurrentContentTypeFilter(QList& contentTypeFilter); bool isLocal() const { return m_local; } + QStringList getCategories() const { return m_categories; } + LanguageList getLanguages() const { return m_languages; } private: Library* mp_library; @@ -42,12 +45,16 @@ private: QList m_contentTypeFilters; kiwix::supportedListSortBy m_sortBy = kiwix::UNSORTED; bool m_sortOrderAsc = true; + LanguageList m_languages; + QStringList m_categories; QStringList getBookIds(); void eraseBookFilesFromComputer(const QString dirPath, const QString filename); QList> getBooksList(); ContentManagerModel *managerModel; QMutex remoteLibraryLocker; + void setCategories(); + void setLanguages(); signals: void filterParamsChanged(); From 574d1e2a296d7b853d00d7a45599b472d7b54ee3 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 14:46:35 +0530 Subject: [PATCH 3/6] Dynamic category values The category values are not static after this change. If local library is displayed, we get the categories from local library If remote library is displayed, we send a request to /catalog/v2/categories --- src/contentmanager.cpp | 13 +++++++++---- src/contentmanager.h | 1 + src/contentmanagerside.cpp | 40 +++++++++++++++++++++++++++----------- src/contentmanagerside.h | 3 +++ src/opdsrequestmanager.cpp | 6 +++--- 5 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index bf4045b..c800217 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -70,7 +70,7 @@ ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, connect(treeView, &QTreeView::doubleClicked, this, &ContentManager::openBookWithIndex); connect(&m_remoteLibraryManager, &OpdsRequestManager::languagesReceived, this, &ContentManager::updateLanguages); connect(&m_remoteLibraryManager, &OpdsRequestManager::categoriesReceived, this, &ContentManager::updateCategories); - setLanguages(); + setCategories(); } QList> ContentManager::getBooksList() @@ -146,6 +146,7 @@ void ContentManager::setLocal(bool local) { } m_local = local; emit(filterParamsChanged()); + setCategories(); } QStringList ContentManager::getTranslations(const QStringList &keys) @@ -163,11 +164,13 @@ void ContentManager::setCategories() QStringList categories; if (m_local) { auto categoryData = mp_library->getKiwixLibrary().getBooksCategories(); + categories.push_back("all"); for (auto category : categoryData) { auto categoryName = QString::fromStdString(category); categories.push_back(categoryName); } m_categories = categories; + emit(categoriesLoaded(m_categories)); return; } m_remoteLibraryManager.getCategoriesFromOpds(); @@ -633,10 +636,12 @@ void ContentManager::updateLanguages(const QString& content) { void ContentManager::updateCategories(const QString& content) {; auto categories = kiwix::readCategoriesFromFeed(content.toStdString()); QStringList tempCategories; + tempCategories.push_back("all"); for (auto catg : categories) { tempCategories.push_back(QString::fromStdString(catg)); } m_categories = tempCategories; + emit(categoriesLoaded(m_categories)); } void ContentManager::setSearch(const QString &search) @@ -653,9 +658,9 @@ QStringList ContentManager::getBookIds() acceptTags.push_back("_category:"+m_categoryFilter.toStdString()); } if (m_categoryFilter == "other") { - for (auto& category: S_CATEGORIES) { - if (category.first != "other" && category.first != "all") { - rejectTags.push_back("_category:"+category.first.toStdString()); + for (auto& category: m_categories) { + if (category != "other" && category != "all") { + rejectTags.push_back("_category:"+category.toStdString()); } } } diff --git a/src/contentmanager.h b/src/contentmanager.h index 45fb25c..3229e1f 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -64,6 +64,7 @@ signals: void downloadsChanged(); void currentLangChanged(); void pendingRequest(const bool); + void categoriesLoaded(QStringList); public slots: QStringList getTranslations(const QStringList &keys); diff --git a/src/contentmanagerside.cpp b/src/contentmanagerside.cpp index f361833..5fd81db 100644 --- a/src/contentmanagerside.cpp +++ b/src/contentmanagerside.cpp @@ -3,6 +3,7 @@ #include "kiwixapp.h" #include +#include #include "klistwidgetitem.h" #include "static_content.h" @@ -91,6 +92,9 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) : }); } + setCategories(KiwixApp::instance()->getContentManager()->getCategories()); + connect(KiwixApp::instance()->getContentManager(), &ContentManager::categoriesLoaded, this, &ContentManagerSide::setCategories); + for(auto lang: S_LANGUAGES) { auto currentLang = QLocale().language(); @@ -113,17 +117,6 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) : auto item = new KListWidgetItem("All"); item->setData(Qt::UserRole, QLocale::AnyLanguage); mp_languageSelector->insertItem(0, item); - - for (auto category: S_CATEGORIES) - { - auto item = new KListWidgetItem(category.second); - item->setData(Qt::UserRole, category.first); - mp_categorySelector->addItem(item); - if (category.first == "all") - { - item->setSelected(true); - } - } } ContentManagerSide::~ContentManagerSide() @@ -155,3 +148,28 @@ void ContentManagerSide::setContentManager(ContentManager *contentManager) mp_contentManager->setCurrentCategoryFilter(category); }); } + +QString beautify(QString word) +{ + word = word.replace("_", " "); + word[0] = word[0].toUpper(); + return word; +} + +void ContentManagerSide::setCategories(QStringList categories) +{ + mp_categorySelector->blockSignals(true); + mp_categorySelector->setHidden(true); + mp_categorySelector->clear(); + mp_categorySelector->blockSignals(false); + for (auto category: categories) + { + auto item = new KListWidgetItem(beautify(category)); + item->setData(Qt::UserRole, category); + mp_categorySelector->addItem(item); + if (category == "all") + { + item->setSelected(true); + } + } +} diff --git a/src/contentmanagerside.h b/src/contentmanagerside.h index da8dcff..1aab3e4 100644 --- a/src/contentmanagerside.h +++ b/src/contentmanagerside.h @@ -30,6 +30,9 @@ private: QListWidget* mp_categorySelector; QCheckBox* mp_contentTypeButton; QList m_contentTypeFilters; + +public slots: + void setCategories(QStringList); }; #endif // CONTENTMANAGERSIDE_H diff --git a/src/opdsrequestmanager.cpp b/src/opdsrequestmanager.cpp index a5e0ab1..a0ac41c 100644 --- a/src/opdsrequestmanager.cpp +++ b/src/opdsrequestmanager.cpp @@ -30,9 +30,9 @@ void OpdsRequestManager::doUpdate(const QString& currentLanguage, const QString& // Add "special negative" filter for "other" category (if necessary) if (categoryFilter == "other") { - for (auto& category: S_CATEGORIES) { - if (category.first != "other" && category.first != "all") { - excludeTags += "_category:"+category.first; + for (auto& category: KiwixApp::instance()->getContentManager()->getCategories()) { + if (category != "other" && category != "all") { + excludeTags += "_category:"+category; } } } From 71f8c2f8f43cbab757e4482d2611c440c7251172 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 15:30:17 +0530 Subject: [PATCH 4/6] Dynamic languages in selector Similar to categories, Languages in the selector are now shown based on the library. --- src/contentmanager.cpp | 4 +++ src/contentmanager.h | 3 ++- src/contentmanagerside.cpp | 55 +++++++++++++++++++------------------- src/contentmanagerside.h | 1 + 4 files changed, 34 insertions(+), 29 deletions(-) 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 From 2cf40eccde22ca60d7c4921d0a9193b042965995 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 15:32:56 +0530 Subject: [PATCH 5/6] Don't do unnecessary opds requests Added checks to not let unnecessary requests to remote library happen. --- src/contentmanager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 7d5674b..b13bdb5 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -584,6 +584,8 @@ void ContentManager::setCurrentLanguage(QString language) kiwix::converta2toa3(language.toStdString())); } catch (std::out_of_range&) {} } + if (m_currentLanguage == language) + return; m_currentLanguage = language; emit(currentLangChanged()); emit(filterParamsChanged()); @@ -591,6 +593,8 @@ void ContentManager::setCurrentLanguage(QString language) void ContentManager::setCurrentCategoryFilter(QString category) { + if (m_categoryFilter == category) + return; m_categoryFilter = category.toLower(); emit(filterParamsChanged()); } From 5da7609cde33bc3b598f893e250de7439eb0261d Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 11 Jul 2023 20:38:27 +0530 Subject: [PATCH 6/6] So long, static_content.h/cpp Removed references to static_content, now that it has been replaced by libkiwix API --- kiwix-desktop.pro | 2 - src/contentmanager.cpp | 1 - src/contentmanagerside.cpp | 1 - src/kiwixapp.cpp | 3 - src/opdsrequestmanager.cpp | 1 - src/static_content.cpp | 176 ------------------------------------- src/static_content.h | 15 ---- 7 files changed, 199 deletions(-) delete mode 100644 src/static_content.cpp delete mode 100644 src/static_content.h diff --git a/kiwix-desktop.pro b/kiwix-desktop.pro index 6f0467d..6ef6d27 100644 --- a/kiwix-desktop.pro +++ b/kiwix-desktop.pro @@ -72,7 +72,6 @@ SOURCES += \ src/fullscreenwindow.cpp \ src/fullscreennotification.cpp \ src/zimview.cpp \ - src/static_content.cpp HEADERS += \ src/contentmanagerdelegate.h \ @@ -115,7 +114,6 @@ HEADERS += \ src/fullscreennotification.h \ src/menuproxystyle.h \ src/zimview.h \ - src/static_content.h FORMS += \ src/contentmanagerview.ui \ diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index b13bdb5..5086891 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -1,7 +1,6 @@ #include "contentmanager.h" #include "kiwixapp.h" -#include "static_content.h" #include #include diff --git a/src/contentmanagerside.cpp b/src/contentmanagerside.cpp index ace1800..77c5436 100644 --- a/src/contentmanagerside.cpp +++ b/src/contentmanagerside.cpp @@ -6,7 +6,6 @@ #include #include "klistwidgetitem.h" -#include "static_content.h" ContentManagerSide::ContentManagerSide(QWidget *parent) : QWidget(parent), diff --git a/src/kiwixapp.cpp b/src/kiwixapp.cpp index 71130a2..53add8a 100644 --- a/src/kiwixapp.cpp +++ b/src/kiwixapp.cpp @@ -1,5 +1,4 @@ #include "kiwixapp.h" -#include "static_content.h" #include "zim/error.h" #include "zim/version.h" #include "kiwix/tools.h" @@ -66,8 +65,6 @@ void KiwixApp::init() } mp_manager = new ContentManager(&m_library, mp_downloader); - initStaticContent(); - auto icon = QIcon(); icon.addFile(":/icons/kiwix-app-icons-square.svg"); setWindowIcon(icon); diff --git a/src/opdsrequestmanager.cpp b/src/opdsrequestmanager.cpp index a0ac41c..209ee3b 100644 --- a/src/opdsrequestmanager.cpp +++ b/src/opdsrequestmanager.cpp @@ -1,5 +1,4 @@ #include "opdsrequestmanager.h" -#include "static_content.h" #include "kiwixapp.h" OpdsRequestManager::OpdsRequestManager() diff --git a/src/static_content.cpp b/src/static_content.cpp deleted file mode 100644 index 69b7407..0000000 --- a/src/static_content.cpp +++ /dev/null @@ -1,176 +0,0 @@ - -#include "static_content.h" -#include "kiwixapp.h" - - -std::vector S_LANGUAGES; -std::vector> S_CATEGORIES; - -void initStaticContent() { -#define PUSH(key) S_CATEGORIES.push_back(std::make_pair(QString::fromStdString(key), gt(key))) - PUSH("all"); - PUSH("other"); - PUSH("gutenberg"); - PUSH("mooc"); - PUSH("phet"); - PUSH("psiram"); - PUSH("stack_exchange"); - PUSH("ted"); - PUSH("vikidia"); - PUSH("wikibooks"); - PUSH("wikihow"); - PUSH("wikinews"); - PUSH("wikipedia"); - PUSH("wikiquote"); - PUSH("wikisource"); - PUSH("wikiversity"); - PUSH("wikivoyage"); - PUSH("wiktionary"); -#undef PUSH - -#define PUSH(value) S_LANGUAGES.push_back(value) - PUSH(QLocale::Afar); - PUSH(QLocale::Afrikaans); - PUSH(QLocale::Akan); - PUSH(QLocale::Amharic); - PUSH(QLocale::Arabic); - PUSH(QLocale::Assamese); - PUSH(QLocale::Azerbaijani); - PUSH(QLocale::Bashkir); - PUSH(QLocale::Belarusian); - PUSH(QLocale::Bulgarian); - PUSH(QLocale::Bambara); - PUSH(QLocale::Bengali); - PUSH(QLocale::Tibetan); - PUSH(QLocale::Breton); - PUSH(QLocale::Bosnian); - PUSH(QLocale::Catalan); - PUSH(QLocale::Chechen); - PUSH(QLocale::Corsican); - PUSH(QLocale::Czech); - PUSH(QLocale::Church); - PUSH(QLocale::Chuvash); - PUSH(QLocale::Welsh); - PUSH(QLocale::Danish); - PUSH(QLocale::German); - PUSH(QLocale::Divehi); - PUSH(QLocale::Dzongkha); - PUSH(QLocale::Ewe); - PUSH(QLocale::Greek); - PUSH(QLocale::English); - PUSH(QLocale::Spanish); - PUSH(QLocale::Estonian); - PUSH(QLocale::Basque); - PUSH(QLocale::Persian); - PUSH(QLocale::Fulah); - PUSH(QLocale::Finnish); - PUSH(QLocale::Faroese); - PUSH(QLocale::French); - PUSH(QLocale::WesternFrisian); - PUSH(QLocale::Irish); - PUSH(QLocale::Gaelic); - PUSH(QLocale::Galician); - PUSH(QLocale::Guarani); - PUSH(QLocale::Gujarati); - PUSH(QLocale::Manx); - PUSH(QLocale::Hausa); - PUSH(QLocale::Hebrew); - PUSH(QLocale::Hindi); - PUSH(QLocale::Croatian); - PUSH(QLocale::Hungarian); - PUSH(QLocale::Armenian); - PUSH(QLocale::Interlingua); - PUSH(QLocale::Indonesian); - PUSH(QLocale::Igbo); - PUSH(QLocale::Icelandic); - PUSH(QLocale::Italian); - PUSH(QLocale::Inuktitut); - PUSH(QLocale::Japanese); - PUSH(QLocale::Javanese); - PUSH(QLocale::Georgian); - PUSH(QLocale::Kikuyu); - PUSH(QLocale::Kazakh); - PUSH(QLocale::Greenlandic); - PUSH(QLocale::Khmer); - PUSH(QLocale::Kannada); - PUSH(QLocale::Korean); - PUSH(QLocale::Kashmiri); - PUSH(QLocale::Kurdish); - PUSH(QLocale::Cornish); - PUSH(QLocale::Kirghiz); - PUSH(QLocale::Luxembourgish); - PUSH(QLocale::Ganda); - PUSH(QLocale::Lingala); - PUSH(QLocale::Lao); - PUSH(QLocale::Lithuanian); - PUSH(QLocale::Latvian); - PUSH(QLocale::Malagasy); - PUSH(QLocale::Maori); - PUSH(QLocale::Maori); - PUSH(QLocale::Macedonian); - PUSH(QLocale::Malayalam); - PUSH(QLocale::Mongolian); - PUSH(QLocale::Marathi); - PUSH(QLocale::Malay); - PUSH(QLocale::Maltese); - PUSH(QLocale::Burmese); - PUSH(QLocale::Nepali); - PUSH(QLocale::Dutch); - PUSH(QLocale::NorwegianNynorsk); - PUSH(QLocale::NorwegianBokmal); - PUSH(QLocale::Nyanja); - PUSH(QLocale::Occitan); - PUSH(QLocale::Oromo); - PUSH(QLocale::Oriya); - PUSH(QLocale::Ossetic); - PUSH(QLocale::Punjabi); - PUSH(QLocale::Polish); - PUSH(QLocale::Pashto); - PUSH(QLocale::Portuguese); - PUSH(QLocale::Quechua); - PUSH(QLocale::Romansh); - PUSH(QLocale::Rundi); - PUSH(QLocale::Romanian); - PUSH(QLocale::Russian); - PUSH(QLocale::Kinyarwanda); - PUSH(QLocale::Sanskrit); - PUSH(QLocale::Sindhi); - PUSH(QLocale::NorthernSami); - PUSH(QLocale::Sango); - PUSH(QLocale::Sinhala); - PUSH(QLocale::Slovak); - PUSH(QLocale::Slovenian); - PUSH(QLocale::Shona); - PUSH(QLocale::Somali); - PUSH(QLocale::Albanian); - PUSH(QLocale::Serbian); - PUSH(QLocale::Swati); - PUSH(QLocale::SouthernSotho); - PUSH(QLocale::Swedish); - PUSH(QLocale::Swahili); - PUSH(QLocale::Tamil); - PUSH(QLocale::Telugu); - PUSH(QLocale::Tajik); - PUSH(QLocale::Thai); - PUSH(QLocale::Tigrinya); - PUSH(QLocale::Turkmen); - PUSH(QLocale::Filipino); - PUSH(QLocale::Tswana); - PUSH(QLocale::Tongan); - PUSH(QLocale::Turkish); - PUSH(QLocale::Tsonga); - PUSH(QLocale::Tatar); - PUSH(QLocale::Uighur); - PUSH(QLocale::Ukrainian); - PUSH(QLocale::Urdu); - PUSH(QLocale::Uzbek); - PUSH(QLocale::Venda); - PUSH(QLocale::Vietnamese); - PUSH(QLocale::Walloon); - PUSH(QLocale::Wolof); - PUSH(QLocale::Xhosa); - PUSH(QLocale::Yoruba); - PUSH(QLocale::Chinese); - PUSH(QLocale::Zulu); -#undef PUSH -} diff --git a/src/static_content.h b/src/static_content.h deleted file mode 100644 index 5fdd764..0000000 --- a/src/static_content.h +++ /dev/null @@ -1,15 +0,0 @@ - -#ifndef STATICCONTENT_H -#define STATICCONTENT_H - -#include -#include -#include -#include - -extern std::vector S_LANGUAGES; -extern std::vector> S_CATEGORIES; - -void initStaticContent(); - -#endif //STATICCONTENT_H