Explorar o código

Работа над opds

Book Pauk %!s(int64=2) %!d(string=hai) anos
pai
achega
4371e1a641
Modificáronse 2 ficheiros con 23 adicións e 25 borrados
  1. 4 4
      server/core/DbSearcher.js
  2. 19 21
      server/core/opds/BasePage.js

+ 4 - 4
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,

+ 19 - 21
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++;