From 9e9f25ff800b50586a6e733f9efab8e011c02ba7 Mon Sep 17 00:00:00 2001 From: Xmader Date: Tue, 24 Nov 2020 02:59:19 -0500 Subject: [PATCH] feat: abstract storage for scoreinfo instance --- src/mscz.ts | 5 ++++- src/scoreinfo.ts | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mscz.ts b/src/mscz.ts index 999cba2..2733b00 100644 --- a/src/mscz.ts +++ b/src/mscz.ts @@ -2,9 +2,11 @@ import { saveAs, assertRes } from './utils' import { ScoreInfo } from './scoreinfo' -let msczBufferP: Promise | undefined +const MSCZ_BUF_SYM = Symbol('msczBufferP') export const fetchMscz = async (scoreinfo: ScoreInfo): Promise => { + let msczBufferP = scoreinfo.store.get(MSCZ_BUF_SYM) as Promise | undefined + if (!msczBufferP) { const url = scoreinfo.msczCidUrl msczBufferP = (async (): Promise => { @@ -16,6 +18,7 @@ export const fetchMscz = async (scoreinfo: ScoreInfo): Promise => { const data = await r.arrayBuffer() return data })() + scoreinfo.store.set(MSCZ_BUF_SYM, msczBufferP) } return msczBufferP diff --git a/src/scoreinfo.ts b/src/scoreinfo.ts index 81a1c65..8b105a2 100644 --- a/src/scoreinfo.ts +++ b/src/scoreinfo.ts @@ -10,6 +10,8 @@ export abstract class ScoreInfo { abstract pageCount: number; abstract thumbnailUrl: string; + public store = new Map(); + get idLastDigit (): number { return (+this.id) % RADIX }