Работа над проектом

This commit is contained in:
Book Pauk
2022-08-31 18:51:31 +07:00
parent 9aae057f32
commit 77938aac04
9 changed files with 328 additions and 8 deletions

View File

@@ -275,7 +275,10 @@ class DbCreator {
let genre = rec.genre || emptyFieldValue;
genre = rec.genre.split(',');
for (const g of genre) {
for (let g of genre) {
if (!g)
g = emptyFieldValue;
let genreRec;
if (genreMap.has(g)) {
const genreId = genreMap.get(g);

View File

@@ -1,5 +1,6 @@
const os = require('os');
const fs = require('fs-extra');
const _ = require('lodash');
const WorkerState = require('./WorkerState');
const { JembaDbThread } = require('jembadb');
@@ -9,6 +10,7 @@ const DbSearcher = require('./DbSearcher');
const ayncExit = new (require('./AsyncExit'))();
const log = new (require('./AppLogger'))().log;//singleton
const utils = require('./utils');
const genreTree = require('./genres');
//server states
const ssNormal = 'normal';
@@ -203,6 +205,43 @@ class WebWorker {
return await this.dbSearcher.getBookList(authorId);
}
async getGenreTree() {
this.checkMyState();
const config = await this.dbConfig();
let result;
const db = this.db;
if (!db.wwCache.genres) {
const genres = _.cloneDeep(genreTree);
const last = genres[genres.length - 1];
const genreValues = new Set();
for (const section of genres) {
for (const g of section.value)
genreValues.add(g.value);
}
//добавим к жанрам те, что нашлись при парсинге
const rows = await db.select({table: 'genre', map: `(r) => ({value: r.value})`});
for (const row of rows) {
if (!genreValues.has(row.value))
last.value.push({name: row.value, value: row.value});
}
result = {
genreTree: genres,
inpxHash: (config.inpxHash ? config.inpxHash : ''),
};
db.wwCache.genres = result;
} else {
result = db.wwCache.genres;
}
return result;
}
async logServerStats() {
while (1) {// eslint-disable-line
try {

View File

@@ -1,4 +1,4 @@
"
module.exports = `
#---------- Список жанров fb2 ----------
0.1 Фантастика
0.2 Детективы и Триллеры
@@ -276,4 +276,4 @@
0.22.251 tbg_secondary;Учебники и пособия для среднего и специального образования
0.22.252 tbg_higher;Учебники и пособия ВУЗов
#---------- 2021-07-22 11:35:50.469539----------
"
`;

View File

@@ -0,0 +1,53 @@
const genresText = require('./genresText.js');
const genres = [];
const sec2index = {};
const lines = genresText.split('\n').map(l => l.trim());
let index = 0;
let other;//прочее в конец
for (const line of lines) {
if (!line || line[0] == '#')
continue;
const p = line.indexOf(' ');
const num = line.substring(0, p).trim().split('.');
if (num.length < 2)
continue;
const section = `${num[0]}.${num[1]}`;
if (section == '0.0')
continue;
let name = line.substring(p + 1).trim();
if (num.length < 3) {//раздел
if (section == '0.20') {//прочее
other = {name, value: []};
} else {
if (sec2index[section] === undefined) {
if (!genres[index])
genres[index] = {name, value: []};
sec2index[section] = index;
index++;
}
}
} else {//подраздел
const n = name.split(';').map(l => l.trim());
if (section == '0.20') {//прочее
other.value.push({name: n[1], value: n[0]});
} else {
const i = sec2index[section];
if (i !== undefined) {
genres[i].value.push({name: n[1], value: n[0]});
}
}
}
}
if (other)
genres.push(other);
module.exports = genres;