Add a filtering by Category.

Categories are static for now.
This commit is contained in:
Matthieu Gautier 2019-03-19 16:44:07 +01:00
parent 8ab7ee70bf
commit ceab9780a4
7 changed files with 91 additions and 14 deletions

View File

@ -214,16 +214,19 @@ QTabBar::close-button {
show-decoration-selected: 0;
}
#categorySelector QScrollBar,
#languageSelector QScrollBar {
width: 5px;
border: none;
outline: none;
}
#categorySelector QScrollBar::handle,
#languageSelector QScrollBar::handle {
background-color: grey;
}
#categorySelector::item:selected,
#languageSelector::item:selected {
background-color: white;
color: black;

View File

@ -215,6 +215,12 @@ void ContentManager::setCurrentLanguage(QString language)
emit(remoteParamsChanged());
}
void ContentManager::setCurrentCategoryFilter(QString category)
{
m_categoryFilter = category.toLower();
emit(remoteParamsChanged());
}
#define CATALOG_HOST "library.kiwix.org"
#define CATALOG_PORT 80
#define CATALOG_URL "library.kiwix.org"
@ -224,6 +230,9 @@ void ContentManager::updateRemoteLibrary() {
query.addQueryItem("lang", m_currentLanguage);
}
query.addQueryItem("count", QString::number(0));
if (m_categoryFilter != "all") {
query.addQueryItem("tag", m_categoryFilter);
}
QUrl url;
url.setScheme("http");
url.setHost(CATALOG_HOST);

View File

@ -23,6 +23,8 @@ public:
void setLocal(bool local);
QStringList getDownloadIds();
void setCurrentLanguage(QString language);
void setCurrentCategoryFilter(QString category);
private:
Library* mp_library;
kiwix::Library m_remoteLibrary;
@ -31,6 +33,7 @@ private:
bool m_local = true;
QString m_currentLanguage;
QString m_searchQuery;
QString m_categoryFilter = "all";
QStringList getBookIds();

View File

@ -21,10 +21,15 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) :
this, [=](bool checked) { mp_ui->localFileButton->setStyleSheet(
checked ?"*{font-weight: bold}" : "");});
mp_ui->localFileButton->setStyleSheet("*{font-weight: bold}");
mp_languageButton = mp_ui->languageButton;
mp_languageSelector = mp_ui->languageSelector;
connect(mp_languageButton, &QCheckBox::toggled, this, [=](bool checked) { mp_languageSelector->setHidden(!checked); });
mp_languageSelector->setHidden(true);
mp_categoryButton = mp_ui->categoryButton;
mp_categorySelector = mp_ui->categorySelector;
connect(mp_categoryButton, &QCheckBox::toggled, this, [=](bool checked) { mp_categorySelector->setHidden(!checked); });
mp_categorySelector->setHidden(true);
for (auto lang:
@ -198,12 +203,43 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) :
}
}
for (auto category: {
"All",
"Gutenberg",
"Other",
"Phet",
"Psiram",
"Stack_exchange",
"Ted",
"Vikidia",
"Wikibooks",
"Wikinews",
"Wikipedia",
"Wikiquote",
"Wikisource",
"Wikispecies",
"Wikiversity",
"Wikivoyage",
"Wiktionary"
})
{
auto c = QString(category);
auto item = new KListWidgetItem(c);
mp_categorySelector->addItem(item);
if (c == "All")
{
item->setSelected(true);
}
}
}
ContentManagerSide::~ContentManagerSide()
{
delete mp_ui;
}
void ContentManagerSide::setContentManager(ContentManager *contentManager)
{
mp_contentManager = contentManager;
@ -217,5 +253,13 @@ void ContentManagerSide::setContentManager(ContentManager *contentManager)
return;
}
auto locale = QLocale(QLocale::Language(item->data(Qt::UserRole).toInt()));
mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0));});
mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0));
});
connect(mp_categorySelector, &QListWidget::itemSelectionChanged,
this, [=]() {
auto item = mp_categorySelector->selectedItems().at(0);
if (!item) return;
auto category = item->text();
mp_contentManager->setCurrentCategoryFilter(category);
});
}

View File

@ -25,6 +25,8 @@ private:
ContentManager* mp_contentManager;
QCheckBox* mp_languageButton;
QListWidget* mp_languageSelector;
QCheckBox* mp_categoryButton;
QListWidget* mp_categorySelector;
};
#endif // CONTENTMANAGERSIDE_H

View File

@ -43,7 +43,7 @@
<property name="flat">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0,0,0,0,1">
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0,0,0,0,0,1">
<property name="spacing">
<number>0</number>
</property>
@ -94,9 +94,6 @@
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="cursor" stdset="0">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@ -115,24 +112,43 @@
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectItems</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="categoryButton">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>Browse By Category</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="categorySelector">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="contentTypeButton">
<property name="enabled">

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>836</width>
<height>519</height>
<width>1024</width>
<height>576</height>
</rect>
</property>
<property name="windowTitle">