Работа над проектом
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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----------
|
||||
"
|
||||
`;
|
||||
53
server/core/genres/index.js
Normal file
53
server/core/genres/index.js
Normal 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;
|
||||
Reference in New Issue
Block a user