]> git.lizzy.rs Git - local-nhentai.git/blob - info.js
Generic stats and select
[local-nhentai.git] / info.js
1 const fs = require("fs").promises
2 const criteriaKeys = ["tag", "group", "artist", "character", "parody"]
3
4 module.exports.doujins = shortNames => fs.readdir(".", {encoding: "utf8", withFileTypes: true})
5         .then(doujins => doujins
6                 .map(dirent => fs.readFile(`${dirent.name}/metadata.json`)
7                         .then(data => JSON.parse(data.toString()))
8                         .then(data => {data.title = dirent.name; return data})
9                         .then(data => [dirent.name, data])
10                         .catch(_ => [])))
11         .then(promises => Promise.all(promises))
12         .then(doujins => doujins
13                 .filter(([title, data]) => title && data))
14                 //.filter(([title, data]) => (title == data.title) == !shortNames))
15         .then(doujins => Object.fromEntries(doujins))
16
17 module.exports.criteria = _ => {
18         const criteria = Object.fromEntries(criteriaKeys.map(key => [key, {["*"]: []}]))
19
20         return module.exports.doujins()
21                 .then(doujins => Object.values(doujins))
22                 .then(doujins => doujins
23                         .forEach(doujin =>
24                                 criteriaKeys.forEach(crit => {
25                                         criteria[crit]["*"].push(doujin.title)
26
27                                         doujin[crit] && doujin[crit].forEach(val => {
28                                                 criteria[crit][val] = criteria[crit][val] || []
29                                                 criteria[crit][val].push(doujin.title)
30                                         })
31                                 })
32                         ))
33                 .then(_ => criteria)
34 }