@@ -64,6 +64,7 @@ import { saveAs } from 'file-saver'
6464import PlanetData from ' @/core/models/planet-data.model'
6565import JSZip from ' jszip'
6666import NewCardElement from ' @/components/elements/NewCardElement.vue'
67+ import { readFileData } from ' @/core/import.helper'
6768
6869const i18n = useI18n ()
6970const fileInput: Ref <HTMLInputElement | null > = ref (null )
@@ -125,17 +126,10 @@ async function importPlanetFile(event: Event) {
125126 const reader = new FileReader ()
126127 return new Promise <IDBPlanet >((resolve , reject ) => {
127128 reader .onload = async (e ) => {
128- try {
129- const data = JSON .parse (pako .inflate (e .target ?.result as ArrayBuffer , { to: ' string' })) as IDBPlanet
130- const newIdb: IDBPlanet = {
131- id: data .id ,
132- data: PlanetData .createFrom (data .data ),
133- preview: data .preview ,
134- }
135- console .info (` Imported planet (ID=${newIdb .id }): [${newIdb .data .planetName }] ` )
136- resolve (newIdb )
137- } catch (err ) {
138- console .error (err )
129+ const data = readFileData (e .target ?.result as ArrayBuffer )
130+ if (data ) {
131+ resolve (data )
132+ } else {
139133 reject ()
140134 }
141135 }
@@ -145,21 +139,28 @@ async function importPlanetFile(event: Event) {
145139
146140 try {
147141 const newPlanets: PromiseSettledResult <IDBPlanet >[] = await Promise .allSettled (readPromises )
148- if (newPlanets .every ((p ) => p .status === ' rejected' )) {
142+ const rejectedFiles = newPlanets .filter ((p ) => p .status === ' rejected' )
143+ if (rejectedFiles .length === newPlanets .length ) {
149144 EventBus .sendToastEvent (' warn' , ' toast.import_failure' , 3000 )
150145 return
151146 }
152- await idb .planets .bulkAdd (
147+
148+ const allAdded = await idb .planets .bulkPut (
153149 newPlanets
154150 .filter ((np ) => np .status === ' fulfilled' )
155- .map ((np : PromiseSettledResult <IDBPlanet >) => (np as PromiseFulfilledResult <IDBPlanet >).value ),
151+ .map ((np : PromiseSettledResult <IDBPlanet >) => (np as PromiseFulfilledResult <IDBPlanet >).value )
152+ .map ((np ) => ({ ... np , version: np .version ?? ' 1' })),
156153 )
154+ if (allAdded && rejectedFiles .length === 0 ) {
155+ EventBus .sendToastEvent (' success' , ' toast.import_success' , 3000 )
156+ } else {
157+ EventBus .sendToastEvent (' warn' , ' toast.import_partial' , 3000 )
158+ }
157159 } catch (_ ) {
158160 EventBus .sendToastEvent (' warn' , ' toast.import_partial' , 3000 )
159161 } finally {
160162 await loadPlanets ()
161163 fileInput .value ! .value = ' '
162- EventBus .sendToastEvent (' success' , ' toast.import_success' , 3000 )
163164 }
164165}
165166
0 commit comments