import localforage from "localforage"; class Storage { constructor() { this.session = new Session(); this.local = new Local(); } } class Session { setObject(key, value) { sessionStorage.setItem(key, JSON.stringify(value)); } getObject(key) { return JSON.parse(sessionStorage.getItem(key)); } delete(key) { sessionStorage.removeItem(key); } setText(key, value) { sessionStorage.setItem(key, value); } getText(key) { return sessionStorage.getItem(key); } } class Local { setObject(key, value) { return localforage.setItem(key, JSON.stringify(value)); } getObject(key) { return JSON.parse(localforage.getItem(key)); } delete(key) { return localforage.removeItem(key); } setText(key, value) { return localforage.setItem(key, value); } getText(key) { return localforage.getItem(key); } getUseSize() { var size = 0; for (let i = 0, len = localStorage.length; i < len; i++) { let key = localStorage.key(i); if (null == key) { continue; } let value = localStorage.getItem(key); if (null != value) { size += value.length; } } return size; } getAvailableSize() { return 5 * 1024 * 1024 - storage.local.getUseSize(); } dynamicClear() { if (storage.local.getAvailableSize() < 1 * 1024 * 1024) { //remove commited for (let i = 0, len = localStorage.length; i < len; i++) { let key = localStorage.key(i); if (null == key) { continue; } let value = localStorage.getItem(key); if (key.length == 37 && key.endsWith(".text") && value.length > 50) { let fl = value.substring(35, 36); if (fl == "1") { localStorage.removeItem(key); } } } } } dynamicDeepClear(ctt, excludeKey) { if (!ctt) { return; } //remove expired let availableSize = storage.local.getAvailableSize(); for ( let i = 0, len = localStorage.length; i < len && availableSize < 2 * 1024 * 1024; i++ ) { let key = localStorage.key(i); if (null == key) { continue; } if (key.indexOf(excludeKey) >= 0) { continue; } let value = localStorage.getItem(key); if (key.length == 37 && key.endsWith(".text") && value.length > 50) { let starray = value.split("|"); let fl = starray[2]; let ts = starray[3]; if (fl == "0") { if (ctt - ts > 3 * 24 * 3600 * 1000) { localStorage.removeItem(key); availableSize = availableSize + value.length; } } } } } } const storage = new Storage(); export default storage;