diff --git a/packages/frontend/src/custom-emojis.ts b/packages/frontend/src/custom-emojis.ts index 771f21c5b4..d08b8814e8 100644 --- a/packages/frontend/src/custom-emojis.ts +++ b/packages/frontend/src/custom-emojis.ts @@ -7,7 +7,7 @@ import { shallowRef, computed, markRaw, watch } from 'vue'; import * as Misskey from 'misskey-js'; import { api, apiGet } from './os'; import { useStream } from '@/stream'; -import { get, set } from '@/scripts/idb-proxy'; +import { get, set, exist } from '@/scripts/idb-proxy'; const storageCache = await get('emojis'); export const customEmojis = shallowRef(Array.isArray(storageCache) ? storageCache : []); @@ -54,8 +54,9 @@ export async function fetchCustomEmojis(force = false) { if (force) { res = await api('emojis', {}); } else { + const emojiCacheExist = await exist('emojis'); const lastFetchedAt = await get('lastEmojisFetchedAt'); - if (lastFetchedAt && (now - lastFetchedAt) < 1000 * 60 * 60) return; + if (lastFetchedAt && (now - lastFetchedAt) < 1000 * 60 * 60 && emojiCacheExist) return; res = await apiGet('emojis', {}); } diff --git a/packages/frontend/src/scripts/idb-proxy.ts b/packages/frontend/src/scripts/idb-proxy.ts index a20cfcb1d0..b1410e4d68 100644 --- a/packages/frontend/src/scripts/idb-proxy.ts +++ b/packages/frontend/src/scripts/idb-proxy.ts @@ -9,6 +9,7 @@ import { get as iget, set as iset, del as idel, + keys as ikeys, } from 'idb-keyval'; const fallbackName = (key: string) => `idbfallback::${key}`; @@ -40,3 +41,11 @@ export async function del(key: string) { if (idbAvailable) return idel(key); return window.localStorage.removeItem(fallbackName(key)); } + +export async function exist(key: string) { + if (idbAvailable) { + const keys = await ikeys(); + return keys.includes(key); + } + return window.localStorage.getItem(fallbackName(key)) !== null; +}