From 5519e23e02bc90e27033507f90497746174463ff Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 28 Jan 2023 18:14:35 +0700 Subject: [PATCH] =?UTF-8?q?OPDS:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20"=D0=96?= =?UTF-8?q?=D0=B0=D0=BD=D1=80=D1=8B",=20=D0=B2=20=D0=BF=D0=BE=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20"=D0=9F=D0=BE=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=20=D0=BA=D0=BD=D0=B8=D0=B3=20=D0=B2=20=D0=B6=D0=B0?= =?UTF-8?q?=D0=BD=D1=80=D0=B5"=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/opds/AuthorPage.js | 4 ++-- server/core/opds/BasePage.js | 4 +++- server/core/opds/GenrePage.js | 14 +++++++++----- server/core/opds/RootPage.js | 3 +++ server/core/opds/SearchPage.js | 12 +++++++++++- server/core/opds/SeriesPage.js | 4 ++-- server/core/opds/TitlePage.js | 2 +- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/server/core/opds/AuthorPage.js b/server/core/opds/AuthorPage.js index cb33bc9..5f9a11e 100644 --- a/server/core/opds/AuthorPage.js +++ b/server/core/opds/AuthorPage.js @@ -66,7 +66,7 @@ class AuthorPage extends BasePage { author: req.query.author || '', series: req.query.series || '', genre: req.query.genre || '', - del: 0, + del: '0', all: req.query.all || '', depth: 0, @@ -86,7 +86,7 @@ class AuthorPage extends BasePage { if (bookList.books) { let books = bookList.books; - const booksAll = this.filterBooks(books, {del: 0}); + const booksAll = this.filterBooks(books); const filtered = (query.all ? booksAll : this.filterBooks(books, query)); const sorted = this.sortSeriesBooks(filtered); diff --git a/server/core/opds/BasePage.js b/server/core/opds/BasePage.js index fd5abe4..c986f1f 100644 --- a/server/core/opds/BasePage.js +++ b/server/core/opds/BasePage.js @@ -20,6 +20,8 @@ class BasePage { this.webWorker = new WebWorker(config); this.rootTag = 'feed'; this.opdsRoot = config.opdsRoot; + + this.showDeleted = false; } makeEntry(entry = {}) { @@ -213,7 +215,7 @@ class BasePage { } //скопировано из BaseList.js, часть функционала не используется - filterBooks(books, query) { + filterBooks(books, query = {}) { const s = query; const splitAuthor = (author) => { diff --git a/server/core/opds/GenrePage.js b/server/core/opds/GenrePage.js index f9df2b9..91cbfc3 100644 --- a/server/core/opds/GenrePage.js +++ b/server/core/opds/GenrePage.js @@ -13,13 +13,17 @@ class GenrePage extends BasePage { const result = {}; const query = { - from: req.query.from || '', + from: req.query.from || 'search', + term: req.query.term || '*', section: req.query.section || '', }; + let searchQuery = ''; + if (query.from == 'search') + searchQuery = `&type=title&term=${encodeURIComponent(query.term)}`; + const entry = []; if (query.from) { - if (query.section) { //выбираем подразделы const {genreSection} = await this.getGenres(); @@ -34,7 +38,7 @@ class GenrePage extends BasePage { this.makeEntry({ id: ++id, title: g.name, - link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(g.value)}`}), + link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(g.value)}${searchQuery}`}), }) ); } @@ -43,7 +47,7 @@ class GenrePage extends BasePage { this.makeEntry({ id: 'whole_section', title: '[Весь раздел]', - link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(all.join(','))}`}), + link: this.navLink({href: `/${encodeURIComponent(query.from)}?genre=${encodeURIComponent(all.join(','))}${searchQuery}`}), }) ); } @@ -56,7 +60,7 @@ class GenrePage extends BasePage { this.makeEntry({ id: ++id, title: section.name, - link: this.navLink({href: `/genre?from=${encodeURIComponent(query.from)}§ion=${encodeURIComponent(section.name)}`}), + link: this.navLink({href: `/genre?from=${encodeURIComponent(query.from)}§ion=${encodeURIComponent(section.name)}${searchQuery}`}), }) ); } diff --git a/server/core/opds/RootPage.js b/server/core/opds/RootPage.js index 4ee4fb6..c8b9df1 100644 --- a/server/core/opds/RootPage.js +++ b/server/core/opds/RootPage.js @@ -2,6 +2,7 @@ const BasePage = require('./BasePage'); const AuthorPage = require('./AuthorPage'); const SeriesPage = require('./SeriesPage'); const TitlePage = require('./TitlePage'); +const GenrePage = require('./GenrePage'); class RootPage extends BasePage { constructor(config) { @@ -13,6 +14,7 @@ class RootPage extends BasePage { this.authorPage = new AuthorPage(config); this.seriesPage = new SeriesPage(config); this.titlePage = new TitlePage(config); + this.genrePage = new GenrePage(config); } async body(req) { @@ -30,6 +32,7 @@ class RootPage extends BasePage { this.authorPage.myEntry(), this.seriesPage.myEntry(), this.titlePage.myEntry(), + this.genrePage.myEntry(), ]; return this.makeBody(result, req); diff --git a/server/core/opds/SearchPage.js b/server/core/opds/SearchPage.js index 42026ec..0632e04 100644 --- a/server/core/opds/SearchPage.js +++ b/server/core/opds/SearchPage.js @@ -15,6 +15,7 @@ class SearchPage extends BasePage { const query = { type: req.query.type || '', term: req.query.term || '', + genre: req.query.genre || '', page: parseInt(req.query.page, 10) || 1, }; @@ -27,7 +28,7 @@ class SearchPage extends BasePage { const limit = 100; const offset = (page - 1)*limit; - const queryRes = await this.webWorker.search(from, {[from]: query.term, del: 0, offset, limit}); + const queryRes = await this.webWorker.search(from, {[from]: query.term, genre: query.genre, del: '0', offset, limit}); const found = queryRes.found; @@ -98,6 +99,15 @@ class SearchPage extends BasePage { '*TEXT': `Искать по названиям книг`, }, }), + this.makeEntry({ + id: 'search_genre', + title: 'Поиск книг в жанре', + link: this.navLink({href: `/genre?from=search&term=${encodeURIComponent(query.term)}`}), + content: { + '*ATTRS': {type: 'text'}, + '*TEXT': `Искать по названиям книг в выбранном жанре`, + }, + }), this.makeEntry({ id: 'search_help', title: '[Памятка по поиску]', diff --git a/server/core/opds/SeriesPage.js b/server/core/opds/SeriesPage.js index 5c54a80..0860822 100644 --- a/server/core/opds/SeriesPage.js +++ b/server/core/opds/SeriesPage.js @@ -26,7 +26,7 @@ class SeriesPage extends BasePage { const query = { series: req.query.series || '', genre: req.query.genre || '', - del: 0, + del: '0', all: req.query.all || '', depth: 0, @@ -46,7 +46,7 @@ class SeriesPage extends BasePage { if (bookList.books) { let books = bookList.books; - const booksAll = this.filterBooks(books, {del: 0}); + const booksAll = this.filterBooks(books); const filtered = (query.all ? booksAll : this.filterBooks(books, query)); const sorted = this.sortSeriesBooks(filtered); diff --git a/server/core/opds/TitlePage.js b/server/core/opds/TitlePage.js index 9715c3a..7d08266 100644 --- a/server/core/opds/TitlePage.js +++ b/server/core/opds/TitlePage.js @@ -15,7 +15,7 @@ class TitlePage extends BasePage { const query = { title: req.query.title || '', genre: req.query.genre || '', - del: 0, + del: '0', depth: 0, };