Skip to content

Commit

Permalink
Merge branch 'release/0.2.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
EepyBerry committed Aug 7, 2024
2 parents e6cb86b + 576f41b commit a2d0cbf
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 16 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "lagrange",
"version": "0.2.1",
"version": "0.2.2",
"private": true,
"type": "module",
"scripts": {
Expand Down
42 changes: 42 additions & 0 deletions src/core/import.helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { IDBPlanet } from '@/dexie.config'
import PlanetData from './models/planet-data.model'
import pako from 'pako'
import { nanoid } from 'nanoid'

export function readFileData(buf: ArrayBuffer): IDBPlanet | undefined {
const rawData = JSON.parse(pako.inflate(buf, { to: 'string' }))
if (rawData.version || rawData.data) {
return readFileV2(rawData)
} else {
return readFileV1(rawData) // Only v1 files have no version attached
}
}

function readFileV2(rawData: IDBPlanet): IDBPlanet | undefined {
try {
const newIdb: IDBPlanet = {
id: rawData.id,
data: PlanetData.createFrom(rawData.data),
preview: rawData.preview,
}
console.debug('[import] Read file data as version 2')
return newIdb
} catch (err) {
console.error(err)
return undefined
}
}

function readFileV1(rawData: PlanetData): IDBPlanet | undefined {
try {
const newIdb: IDBPlanet = {
id: nanoid(),
data: PlanetData.createFrom(rawData),
}
console.debug('[import] Read file data as version 1')
return newIdb
} catch (err) {
console.error(err)
return undefined
}
}
1 change: 1 addition & 0 deletions src/dexie.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ interface IDBSettings {

interface IDBPlanet {
id: string
version?: string
preview?: string
data: PlanetData
}
Expand Down
31 changes: 16 additions & 15 deletions src/views/CodexView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ import { saveAs } from 'file-saver'
import PlanetData from '@/core/models/planet-data.model'
import JSZip from 'jszip'
import NewCardElement from '@/components/elements/NewCardElement.vue'
import { readFileData } from '@/core/import.helper'
const i18n = useI18n()
const fileInput: Ref<HTMLInputElement | null> = ref(null)
Expand Down Expand Up @@ -125,17 +126,10 @@ async function importPlanetFile(event: Event) {
const reader = new FileReader()
return new Promise<IDBPlanet>((resolve, reject) => {
reader.onload = async (e) => {
try {
const data = JSON.parse(pako.inflate(e.target?.result as ArrayBuffer, { to: 'string' })) as IDBPlanet
const newIdb: IDBPlanet = {
id: data.id,
data: PlanetData.createFrom(data.data),
preview: data.preview,
}
console.info(`Imported planet (ID=${newIdb.id}): [${newIdb.data.planetName}]`)
resolve(newIdb)
} catch (err) {
console.error(err)
const data = readFileData(e.target?.result as ArrayBuffer)
if (data) {
resolve(data)
} else {
reject()
}
}
Expand All @@ -145,21 +139,28 @@ async function importPlanetFile(event: Event) {
try {
const newPlanets: PromiseSettledResult<IDBPlanet>[] = await Promise.allSettled(readPromises)
if (newPlanets.every((p) => p.status === 'rejected')) {
const rejectedFiles = newPlanets.filter((p) => p.status === 'rejected')
if (rejectedFiles.length === newPlanets.length) {
EventBus.sendToastEvent('warn', 'toast.import_failure', 3000)
return
}
await idb.planets.bulkAdd(
const allAdded = await idb.planets.bulkPut(
newPlanets
.filter((np) => np.status === 'fulfilled')
.map((np: PromiseSettledResult<IDBPlanet>) => (np as PromiseFulfilledResult<IDBPlanet>).value),
.map((np: PromiseSettledResult<IDBPlanet>) => (np as PromiseFulfilledResult<IDBPlanet>).value)
.map((np) => ({ ...np, version: np.version ?? '1' })),
)
if (allAdded && rejectedFiles.length === 0) {
EventBus.sendToastEvent('success', 'toast.import_success', 3000)
} else {
EventBus.sendToastEvent('warn', 'toast.import_partial', 3000)
}
} catch (_) {
EventBus.sendToastEvent('warn', 'toast.import_partial', 3000)
} finally {
await loadPlanets()
fileInput.value!.value = ''
EventBus.sendToastEvent('success', 'toast.import_success', 3000)
}
}
Expand Down
1 change: 1 addition & 0 deletions src/views/PlanetEditorView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ async function savePlanet() {
const localData = toRaw(JSON.stringify(LG_PLANET_DATA.value))
const idbData: IDBPlanet = {
id: $planetEntityId.value.length > 0 ? $planetEntityId.value : nanoid(),
version: '2',
data: JSON.parse(localData),
preview: previewDataString,
}
Expand Down

0 comments on commit a2d0cbf

Please sign in to comment.