From b56f45694eee9481026759713f0d281d7971cf17 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 15 Jul 2022 00:45:56 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20coversStorage=20=D0=B4=D0=BB=D1=8F=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20coverpage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Reader/share/coversStorage.js | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 client/components/Reader/share/coversStorage.js diff --git a/client/components/Reader/share/coversStorage.js b/client/components/Reader/share/coversStorage.js new file mode 100644 index 00000000..6908d94b --- /dev/null +++ b/client/components/Reader/share/coversStorage.js @@ -0,0 +1,61 @@ +import localForage from 'localforage'; +//import _ from 'lodash'; +import * as utils from '../../../share/utils'; + +const maxDataSize = 100*1024*1024; + +const coversStore = localForage.createInstance({ + name: 'coversStorage' +}); + +class CoversStorage { + constructor() { + } + + async init() { + this.cleanCovers(); //no await + } + + async setData(key, data) { + await coversStore.setItem(key, {addTime: Date.now(), data}); + } + + async getData(key) { + const item = await coversStore.getItem(key); + return (item ? item.data : undefined); + } + + async removeData(key) { + await coversStore.removeItem(key); + } + + async cleanCovers() { + await utils.sleep(10000); + + while (1) {// eslint-disable-line no-constant-condition + let size = 0; + let min = Date.now(); + let toDel = null; + for (const key of (await coversStore.keys())) { + const item = await coversStore.getItem(key); + + size += item.data.length; + + if (item.addTime < min) { + toDel = key; + min = item.addTime; + } + } + + + if (size > maxDataSize && toDel) { + await this.removeData(toDel); + } else { + break; + } + } + } + +} + +export default new CoversStorage(); \ No newline at end of file