diff --git a/svelte-app/src/lib/serialization.ts b/svelte-app/src/lib/serialization.ts index c887c08..43e2559 100644 --- a/svelte-app/src/lib/serialization.ts +++ b/svelte-app/src/lib/serialization.ts @@ -1,4 +1,14 @@ import type { PlacedSymbol, EpcWaypoint } from './types.js'; +import { SYMBOLS } from './symbols.js'; + +/** Map of symbolId → current default {w, h} for migration */ +const DEFAULT_SIZES = new Map(SYMBOLS.map(s => [s.id, { w: s.w, h: s.h }])); + +/** Known outdated defaults: symbolId → [{oldW, oldH}] */ +const OUTDATED_SIZES: Record = { + photoeye: [{ w: 56, h: 20 }], + photoeye_v: [{ w: 56, h: 20 }], +}; /** JSON shape stored in localStorage / exported JSON files */ export interface SerializedSymbol { @@ -38,6 +48,18 @@ export function serializeSymbol(sym: PlacedSymbol): SerializedSymbol { } export function deserializeSymbol(data: SerializedSymbol, id: number): PlacedSymbol { + let { w, h } = data; + + // Migrate outdated default sizes to current defaults + const outdated = OUTDATED_SIZES[data.symbolId]; + if (outdated) { + const current = DEFAULT_SIZES.get(data.symbolId); + if (current && outdated.some(o => o.w === w && o.h === h)) { + w = current.w; + h = current.h; + } + } + return { id, symbolId: data.symbolId, @@ -46,8 +68,8 @@ export function deserializeSymbol(data: SerializedSymbol, id: number): PlacedSym file: data.file?.replace('_no_comm.svg', '.svg') || data.file, x: data.x, y: data.y, - w: data.w, - h: data.h, + w, + h, w2: data.w2, rotation: data.rotation || 0, mirrored: data.mirrored || false,