Добавил сжатие данных книги в кеше

This commit is contained in:
Book Pauk
2019-03-13 17:41:32 +07:00
parent c430e2c8f4
commit 6904cfd224

View File

@@ -3,7 +3,7 @@ import localForage from 'localforage';
import * as utils from '../../../share/utils';
import BookParser from './BookParser';
const maxDataSize = 500*1024*1024;//chars, not bytes
const maxDataSize = 300*1024*1024;//compressed bytes
const bmMetaStore = localForage.createInstance({
name: 'bmMetaStore'
@@ -97,7 +97,8 @@ class BookManager {
let toDel = null;
for (let key in this.books) {
let book = this.books[key];
size += (book.length ? book.length : 0);
const bookLength = (book.length ? book.length : 0);
size += (book.dataCompressedLength ? book.dataCompressedLength : bookLength);
if (book.addTime < min) {
toDel = book;
@@ -120,15 +121,29 @@ class BookManager {
meta.key = this.keyFromUrl(meta.url);
meta.addTime = Date.now();
const result = await this.parseBook(meta, newBook.data, callback);
const cb = (perc) => {
const p = Math.round(80*perc/100);
callback(p);
};
const result = await this.parseBook(meta, newBook.data, cb);
result.dataCompressed = true;
let data = newBook.data;
if (result.dataCompressed) {
data = utils.pako.deflate(data, {level: 9});
result.dataCompressedLength = data.byteLength;
}
callback(90);
this.books[meta.key] = result;
this.booksCached[meta.key] = this.metaOnly(result);
await bmMetaStore.setItem(`bmMeta-${meta.key}`, this.metaOnly(result));
await bmDataStore.setItem(`bmData-${meta.key}`, newBook.data);
await bmDataStore.setItem(`bmData-${meta.key}`, data);
await bmCacheStore.setItem('books', this.booksCached);
callback(100);
return result;
}
@@ -149,11 +164,25 @@ class BookManager {
let result = undefined;
if (!meta.key)
meta.key = this.keyFromUrl(meta.url);
result = this.books[meta.key];
if (result && !result.parsed) {
const data = await bmDataStore.getItem(`bmData-${meta.key}`);
result = await this.parseBook(result, data, callback);
let data = await bmDataStore.getItem(`bmData-${meta.key}`);
callback(10);
await utils.sleep(10);
if (result.dataCompressed) {
data = utils.pako.inflate(data, {to: 'string'});
}
callback(20);
const cb = (perc) => {
const p = 20 + Math.round(80*perc/100);
callback(p);
};
result = await this.parseBook(result, data, cb);
this.books[meta.key] = result;
}