coversStorage.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import localForage from 'localforage';
  2. //import _ from 'lodash';
  3. import * as utils from '../../../share/utils';
  4. const maxDataSize = 100*1024*1024;
  5. const coversStore = localForage.createInstance({
  6. name: 'coversStorage'
  7. });
  8. class CoversStorage {
  9. constructor() {
  10. }
  11. async init() {
  12. this.cleanCovers(); //no await
  13. }
  14. async setData(key, data) {
  15. await coversStore.setItem(key, {addTime: Date.now(), data});
  16. }
  17. async getData(key) {
  18. const item = await coversStore.getItem(key);
  19. return (item ? item.data : undefined);
  20. }
  21. async removeData(key) {
  22. await coversStore.removeItem(key);
  23. }
  24. async cleanCovers() {
  25. await utils.sleep(10000);
  26. while (1) {// eslint-disable-line no-constant-condition
  27. let size = 0;
  28. let min = Date.now();
  29. let toDel = null;
  30. for (const key of (await coversStore.keys())) {
  31. const item = await coversStore.getItem(key);
  32. size += item.data.length;
  33. if (item.addTime < min) {
  34. toDel = key;
  35. min = item.addTime;
  36. }
  37. }
  38. if (size > maxDataSize && toDel) {
  39. await this.removeData(toDel);
  40. } else {
  41. break;
  42. }
  43. }
  44. }
  45. }
  46. export default new CoversStorage();