diff options
author | Zero~Informatique | 2020-09-12 06:26:39 +0200 |
---|---|---|
committer | G.Fouet | 2020-09-12 23:19:44 +0200 |
commit | 7a8eba922ad34182628f80cf2496d8654abe91e6 (patch) | |
tree | 2428f0d7b10896557ddcdfdd6e00f787d9ad1c58 /viewer/src/store/galleryStore.ts | |
parent | 836a67bf6455612af4e6e46450caf5f3b88b8edb (diff) | |
download | ldgallery-7a8eba922ad34182628f80cf2496d8654abe91e6.tar.gz |
viewer: improved network errors handling
Diffstat (limited to 'viewer/src/store/galleryStore.ts')
-rw-r--r-- | viewer/src/store/galleryStore.ts | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/viewer/src/store/galleryStore.ts b/viewer/src/store/galleryStore.ts index b672551..5d599aa 100644 --- a/viewer/src/store/galleryStore.ts +++ b/viewer/src/store/galleryStore.ts | |||
@@ -85,20 +85,22 @@ export default class GalleryStore extends VuexModule { | |||
85 | 85 | ||
86 | // Fetches the gallery's JSON config | 86 | // Fetches the gallery's JSON config |
87 | @action async fetchConfig() { | 87 | @action async fetchConfig() { |
88 | return fetch(`${process.env.VUE_APP_DATA_URL}${GalleryStore.getUrlConfig()}`, { cache: "no-cache" }) | 88 | await fetch(`${process.env.VUE_APP_DATA_URL}${GalleryStore.getUrlConfig()}`, { cache: "no-cache" }) |
89 | .then(response => response.json()) | 89 | .then(GalleryStore.responseToJson) |
90 | .then(this.setConfig); | 90 | .then(this.setConfig); |
91 | return this.config!; | ||
91 | } | 92 | } |
92 | 93 | ||
93 | // Fetches the gallery's JSON metadata | 94 | // Fetches the gallery's JSON metadata |
94 | @action async fetchGalleryItems() { | 95 | @action async fetchGalleryItems() { |
95 | const root = this.config?.galleryRoot ?? ""; | 96 | const root = this.config?.galleryRoot ?? ""; |
96 | const index = this.config?.galleryIndex ?? "index.json"; | 97 | const index = this.config?.galleryIndex ?? "index.json"; |
97 | return fetch(`${process.env.VUE_APP_DATA_URL}${root}${index}`, { cache: "no-cache" }) | 98 | await fetch(`${process.env.VUE_APP_DATA_URL}${root}${index}`, { cache: "no-cache" }) |
98 | .then(response => response.json()) | 99 | .then(GalleryStore.responseToJson) |
99 | .then(this.setGalleryIndex) | 100 | .then(this.setGalleryIndex) |
100 | .then(this.indexTags) | 101 | .then(this.indexTags) |
101 | .then(this.indexTagCategories); | 102 | .then(this.indexTagCategories); |
103 | return this.galleryIndex!; | ||
102 | } | 104 | } |
103 | 105 | ||
104 | // Indexes the gallery | 106 | // Indexes the gallery |
@@ -128,4 +130,9 @@ export default class GalleryStore extends VuexModule { | |||
128 | if (search.length > 1) return search.substr(1) + ".json"; | 130 | if (search.length > 1) return search.substr(1) + ".json"; |
129 | return "config.json"; | 131 | return "config.json"; |
130 | } | 132 | } |
133 | |||
134 | private static responseToJson(response: Response) { | ||
135 | if (!response.ok) throw new Error(`${response.status}: ${response.statusText}`); | ||
136 | return response.json(); | ||
137 | } | ||
131 | } | 138 | } |