From 4371e1a64165091ae12b6c194d86dad4db9a576a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 24 Nov 2022 16:36:40 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20opds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbSearcher.js | 8 ++++---- server/core/opds/BasePage.js | 40 +++++++++++++++++------------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/server/core/DbSearcher.js b/server/core/DbSearcher.js index 4b7b8e1..4199208 100644 --- a/server/core/DbSearcher.js +++ b/server/core/DbSearcher.js @@ -567,17 +567,17 @@ class DbSearcher { const ids = ${db.esc(Array.from(ids))}; for (const id of ids) { const row = @unsafeRow(id); - const s = row.name.substring(0, depth); + const s = row.value.substring(0, depth); let g = group.get(s); if (!g) { - g = {id: row.id, name: s, count: 0}; + g = {id: row.id, name: row.name, value: s, count: 0}; group.set(s, g); } g.count++; } const result = Array.from(group.values()); - result.sort((a, b) => a.name.localeCompare(b.name)); + result.sort((a, b) => a.value.localeCompare(b.value)); return result; ` @@ -778,7 +778,7 @@ class DbSearcher { if (delCount < 1) return; - //выберем всех кандидатов на удаление + //выберем delCount кандидатов на удаление rows = await db.select({ table: 'query_time', rawResult: true, diff --git a/server/core/opds/BasePage.js b/server/core/opds/BasePage.js index 3d18c6c..300b066 100644 --- a/server/core/opds/BasePage.js +++ b/server/core/opds/BasePage.js @@ -150,35 +150,33 @@ class BasePage { //конец навигации return await this.search(from, query); } else { - const names = new Set(); let len = 0; for (const row of queryRes.found) { - const name = row.name.toUpperCase(); - const lowName = row.name.toLowerCase(); - len += name.length; + const value = row.value; + len += value.length; - if (lowName == query[from]) { - //конец навигации, результат содержит запрос - return await this.search(from, query); - } - - if (!names.has(name)) { - const rec = { + let rec; + if (row.count == 1) { + rec = { id: row.id, - title: name.replace(/ /g, spaceChar), - q: encodeURIComponent(lowName), - count: row.count, + title: row.name, + q: `=${encodeURIComponent(row.name)}`, }; - if (query.depth > 1 || enru.has(lowName[0])) { - result.push(rec); - } else { - others.push(rec); - } - names.add(name); + } else { + rec = { + id: row.id, + title: `${value.toUpperCase().replace(/ /g, spaceChar)}~`, + q: encodeURIComponent(value), + }; + } + if (query.depth > 1 || enru.has(value[0])) { + result.push(rec); + } else { + others.push(rec); } } - if (query[from] && query.depth > 1 && result.length < 20 && len > prevLen) { + if (query[from] && query.depth > 1 && result.length < 10 && len > prevLen) { //рекурсия, с увеличением глубины, для облегчения навигации const newQuery = _.cloneDeep(query); newQuery.depth++;