diff --git a/src/application/utilities.ts b/src/application/utilities.ts index f2484f9..5f4f9fc 100644 --- a/src/application/utilities.ts +++ b/src/application/utilities.ts @@ -28,7 +28,7 @@ export function getDomain() { return window.location.hostname.split('.').slice(-2).join('.') } -export async function downloadCache<T extends { id: string }>(endpoint: string, storage: BaseStorage<T>) { +export async function downloadCache<T extends { id: string; updatedAt: Date }>(endpoint: string, storage: BaseStorage<T>) { const request = await fetch(`${config.server_endpoint}/cache/${endpoint}`) const response = (await request.json()) as HttpResponse<T[]> @@ -38,7 +38,15 @@ export async function downloadCache<T extends { id: string }>(endpoint: string, } const items = response.data ?? [] + for (const item of items) { - await storage.add(item) + let overwrite = false + const existingItem = await storage.get(item.id) + + if (!existingItem || item.updatedAt > existingItem.updatedAt) { + overwrite = true + } + + await storage.add(item, overwrite) } } \ No newline at end of file diff --git a/src/components/screens/Loading.vue b/src/components/screens/Loading.vue index 91a82bb..e943041 100644 --- a/src/components/screens/Loading.vue +++ b/src/components/screens/Loading.vue @@ -15,11 +15,7 @@ </template> <script setup lang="ts" async> -import config from '@/application/config' -import type { HttpResponse, MapObject } from '@/application/types' -import type { BaseStorage } from '@/storage/baseStorage' import { CharacterHairStorage, CharacterTypeStorage, MapObjectStorage, MapStorage, SpriteStorage, TileStorage } from '@/storage/storages' -// import type { Map } from '@/application/types' import { useGameStore } from '@/stores/gameStore' import { ref } from 'vue' import { downloadCache } from '@/application/utilities' @@ -29,14 +25,10 @@ const gameStore = useGameStore() const totalItems = ref(0) const currentItem = ref(0) -const tileStorage = new TileStorage() -const mapStorage = new MapStorage() -const mapObjectStorage = new MapObjectStorage() - Promise.all([ - downloadCache('tiles', tileStorage), - downloadCache('maps', mapStorage), - downloadCache('map_objects', mapObjectStorage), + downloadCache('tiles', new TileStorage()), + downloadCache('maps', new MapStorage()), + downloadCache('map_objects', new MapObjectStorage()), downloadCache('sprites', new SpriteStorage()), downloadCache('character_types', new CharacterTypeStorage()), downloadCache('character_hair', new CharacterHairStorage())