Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c3172d2a9 | ||
|
|
f43a0bde45 | ||
|
|
0f7ac5c387 | ||
|
|
a4aa4ae2f0 | ||
|
|
6e9ff3787e | ||
|
|
cd35acb60e | ||
|
|
94bec6ed42 | ||
|
|
42436fabd3 | ||
|
|
36c50fd699 | ||
|
|
1a2cad315f | ||
|
|
1d22a129e5 | ||
|
|
2fd18a93e5 | ||
|
|
511f20e9bc | ||
|
|
a7af7342b6 | ||
|
|
2fa8be9cb0 | ||
|
|
9f67b3bf28 | ||
|
|
037d1aa022 | ||
|
|
b56eeaa024 |
@@ -30,34 +30,10 @@
|
|||||||
</q-icon>
|
</q-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--div v-if="!titleList" class="q-ml-sm row items-center">
|
|
||||||
{{ book.serno ? `${book.serno}. ` : '' }}
|
|
||||||
<div v-if="showAuthor && book.author">
|
|
||||||
<span class="clickable2 text-green-10" @click="selectAuthor">{{ bookAuthor }}</span>
|
|
||||||
-
|
|
||||||
<span class="clickable2" :class="titleColor" @click="selectTitle">{{ book.title }}</span>
|
|
||||||
</div>
|
|
||||||
<span v-else class="clickable2" :class="titleColor" @click="selectTitle">{{ book.title }}</span>
|
|
||||||
</div>
|
|
||||||
<div v-else class="q-ml-sm row items-center">
|
|
||||||
<span class="clickable2" :class="titleColor" @click="selectTitle">{{ book.title }}</span>
|
|
||||||
|
|
||||||
<div v-if="book.author || bookSeries" class="row">
|
|
||||||
-
|
|
||||||
<div v-if="book.author">
|
|
||||||
<span class="clickable2 text-green-10" @click="selectAuthor">{{ bookAuthor }}</span>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div v-if="bookSeries">
|
|
||||||
<span class="clickable2" @click="selectSeries">{{ bookSeries }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div-->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="q-ml-sm column">
|
<div class="q-ml-sm column">
|
||||||
<div v-if="(mode == 'series' || mode == 'title') && bookAuthor" class="row items-center clickable2 text-green-10">
|
<div v-if="(mode == 'series' || mode == 'title') && bookAuthor" class="row items-center clickable2 text-green-10" @click="selectAuthor">
|
||||||
{{ bookAuthor }}
|
{{ bookAuthor }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "inpx-web",
|
"name": "inpx-web",
|
||||||
"version": "1.1.0",
|
"version": "1.1.4",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "inpx-web",
|
"name": "inpx-web",
|
||||||
"version": "1.1.0",
|
"version": "1.1.4",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "inpx-web",
|
"name": "inpx-web",
|
||||||
"version": "1.1.0",
|
"version": "1.1.4",
|
||||||
"author": "Book Pauk <bookpauk@gmail.com>",
|
"author": "Book Pauk <bookpauk@gmail.com>",
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"repository": "bookpauk/inpx-web",
|
"repository": "bookpauk/inpx-web",
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ module.exports = {
|
|||||||
bookReadLink: '',
|
bookReadLink: '',
|
||||||
loggingEnabled: true,
|
loggingEnabled: true,
|
||||||
|
|
||||||
//поправить в случае, если были критические изменения в DbCreator
|
//поправить в случае, если были критические изменения в DbCreator или InpxParser
|
||||||
//иначе будет рассинхронизация между сервером и клиентом на уровне БД
|
//иначе будет рассинхронизация между сервером и клиентом на уровне БД
|
||||||
dbVersion: '5',
|
dbVersion: '6',
|
||||||
dbCacheSize: 5,
|
dbCacheSize: 5,
|
||||||
|
|
||||||
maxPayloadSize: 500,//in MB
|
maxPayloadSize: 500,//in MB
|
||||||
|
|||||||
@@ -70,9 +70,8 @@ class InpxParser {
|
|||||||
this.chunk = [];
|
this.chunk = [];
|
||||||
for (const inpFile of inpFiles) {
|
for (const inpFile of inpFiles) {
|
||||||
await readFileCallback({fileName: inpFile, current: ++current});
|
await readFileCallback({fileName: inpFile, current: ++current});
|
||||||
const buf = await zipReader.extractToBuf(inpFile);
|
|
||||||
|
|
||||||
await this.parseInp(buf, structure, parsedCallback);
|
await this.parseInp(zipReader, inpFile, structure, parsedCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.chunk.length) {
|
if (this.chunk.length) {
|
||||||
@@ -84,10 +83,13 @@ class InpxParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseInp(inpBuf, structure, parsedCallback) {
|
async parseInp(zipReader, inpFile, structure, parsedCallback) {
|
||||||
const structLen = structure.length;
|
const inpBuf = await zipReader.extractToBuf(inpFile);
|
||||||
const rows = inpBuf.toString().split('\n');
|
const rows = inpBuf.toString().split('\n');
|
||||||
|
|
||||||
|
const defaultFolder = `${path.basename(inpFile, '.inp')}.zip`;
|
||||||
|
const structLen = structure.length;
|
||||||
|
|
||||||
for (const row of rows) {
|
for (const row of rows) {
|
||||||
let line = row;
|
let line = row;
|
||||||
if (!line)
|
if (!line)
|
||||||
@@ -115,6 +117,9 @@ class InpxParser {
|
|||||||
rec.genre = rec.genre.split(':').filter(s => s).join(',');
|
rec.genre = rec.genre.split(':').filter(s => s).join(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!rec.folder)
|
||||||
|
rec.folder = defaultFolder;
|
||||||
|
|
||||||
rec.serno = parseInt(rec.serno, 10) || 0;
|
rec.serno = parseInt(rec.serno, 10) || 0;
|
||||||
rec.size = parseInt(rec.size, 10) || 0;
|
rec.size = parseInt(rec.size, 10) || 0;
|
||||||
rec.del = parseInt(rec.del, 10) || 0;
|
rec.del = parseInt(rec.del, 10) || 0;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class RemoteLib {
|
|||||||
|
|
||||||
const buf = await this.down.load(`${this.remoteHost}${link}`, {decompress: false});
|
const buf = await this.down.load(`${this.remoteHost}${link}`, {decompress: false});
|
||||||
|
|
||||||
const publicPath = `${this.config.publicDir}${link}`;
|
const publicPath = `${this.config.publicFilesDir}${link}`;
|
||||||
|
|
||||||
await fs.writeFile(publicPath, buf);
|
await fs.writeFile(publicPath, buf);
|
||||||
|
|
||||||
|
|||||||
@@ -370,12 +370,14 @@ class WebWorker {
|
|||||||
const bookFileDesc = `${bookFile}.json`;
|
const bookFileDesc = `${bookFile}.json`;
|
||||||
|
|
||||||
if (!await fs.pathExists(bookFile) || !await fs.pathExists(bookFileDesc)) {
|
if (!await fs.pathExists(bookFile) || !await fs.pathExists(bookFileDesc)) {
|
||||||
await fs.ensureDir(path.dirname(bookFile));
|
if (!await fs.pathExists(bookFile) && extractedFile) {
|
||||||
|
const tmpFile = `${this.config.tempDir}/${utils.randomHexString(30)}`;
|
||||||
const tmpFile = `${this.config.tempDir}/${utils.randomHexString(30)}`;
|
await utils.gzipFile(extractedFile, tmpFile, 4);
|
||||||
await utils.gzipFile(extractedFile, tmpFile, 4);
|
await fs.remove(extractedFile);
|
||||||
await fs.remove(extractedFile);
|
await fs.move(tmpFile, bookFile, {overwrite: true});
|
||||||
await fs.move(tmpFile, bookFile, {overwrite: true});
|
} else {
|
||||||
|
await utils.touchFile(bookFile);
|
||||||
|
}
|
||||||
|
|
||||||
await fs.writeFile(bookFileDesc, JSON.stringify({bookPath, downFileName}));
|
await fs.writeFile(bookFileDesc, JSON.stringify({bookPath, downFileName}));
|
||||||
} else {
|
} else {
|
||||||
@@ -411,9 +413,10 @@ class WebWorker {
|
|||||||
const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(bookPath)})`});
|
const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(bookPath)})`});
|
||||||
if (rows.length) {//хеш найден по bookPath
|
if (rows.length) {//хеш найден по bookPath
|
||||||
const hash = rows[0].hash;
|
const hash = rows[0].hash;
|
||||||
const bookFileDesc = `${this.config.filesDir}/${hash}.json`;
|
const bookFile = `${this.config.filesDir}/${hash}`;
|
||||||
|
const bookFileDesc = `${bookFile}.json`;
|
||||||
|
|
||||||
if (await fs.pathExists(bookFileDesc)) {
|
if (await fs.pathExists(bookFile) && await fs.pathExists(bookFileDesc)) {
|
||||||
link = `${this.config.filesPathStatic}/${hash}`;
|
link = `${this.config.filesPathStatic}/${hash}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,7 +105,10 @@ function gzipFile(inputFile, outputFile, level = 1) {
|
|||||||
const input = fs.createReadStream(inputFile);
|
const input = fs.createReadStream(inputFile);
|
||||||
const output = fs.createWriteStream(outputFile);
|
const output = fs.createWriteStream(outputFile);
|
||||||
|
|
||||||
input.pipe(gzip).pipe(output).on('finish', (err) => {
|
input.on('error', reject)
|
||||||
|
.pipe(gzip).on('error', reject)
|
||||||
|
.pipe(output).on('error', reject)
|
||||||
|
.on('finish', (err) => {
|
||||||
if (err) reject(err);
|
if (err) reject(err);
|
||||||
else resolve();
|
else resolve();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user