From c51bcc8ff08bfd714ee801bc1ec0ee2cb375b76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Sat, 2 Dec 2023 21:16:22 +0100 Subject: [PATCH] feat: legacy backup import, resolves #31 --- src/lib/backup/backup.ts | 3 +++ src/lib/backup/compat/legacy-chords.ts | 21 ++++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/lib/backup/backup.ts b/src/lib/backup/backup.ts index 4ba98eee..57663776 100644 --- a/src/lib/backup/backup.ts +++ b/src/lib/backup/backup.ts @@ -10,6 +10,7 @@ import {changes, ChangeType, chords, layout, settings} from "$lib/undo-redo.js" import {get} from "svelte/store" import {serialPort} from "../serial/connection" import {csvLayoutToJson, isCsvLayout} from "$lib/backup/compat/legacy-layout" +import {isCsvChords, csvChordsToJson} from "./compat/legacy-chords" export function downloadFile>(contents: T) { const downloadUrl = URL.createObjectURL(new Blob([JSON.stringify(contents)], {type: "application/json"})) @@ -57,6 +58,8 @@ export async function restoreBackup(event: Event) { restoreFromFile(JSON.parse(text)) } else if (isCsvLayout(text)) { restoreFromFile(csvLayoutToJson(text)) + } else if (isCsvChords(text)) { + restoreFromFile(csvChordsToJson(text)) } } diff --git a/src/lib/backup/compat/legacy-chords.ts b/src/lib/backup/compat/legacy-chords.ts index 653e3396..c95586ac 100644 --- a/src/lib/backup/compat/legacy-chords.ts +++ b/src/lib/backup/compat/legacy-chords.ts @@ -1,21 +1,20 @@ -import { KEYMAP_IDS } from "$lib/serial/keymap-codes" -import type { CharaChordFile } from "$lib/share/chara-file" - +import {KEYMAP_IDS} from "$lib/serial/keymap-codes" +import type {CharaChordFile} from "$lib/share/chara-file" export function csvChordsToJson(csv: string): CharaChordFile { return { charaVersion: 1, - type: 'chords', - chords: csv.split('\n').map(line => { - const [input, output] = line.split(',', 2) + type: "chords", + chords: csv.split("\n").map(line => { + const [input, output] = line.split(",", 2) return [ - input.split('+').map(it => KEYMAP_IDS.get(it.trim())?.code ?? 0), - output.split('').map(it => KEYMAP_IDS.get(it.trim())?.code ?? 0), + input.split("+").map(it => KEYMAP_IDS.get(it.trim())?.code ?? 0), + output.split("").map(it => KEYMAP_IDS.get(it.trim())?.code ?? 0), ] - }) + }), } } -export function isCsvLayout(csv: string): boolean { - return /^((\s*\w+\s*+?),\s*\w+\n?)+$/.test(csv) +export function isCsvChords(csv: string): boolean { + return /^([^+,\s]( *\+ *[^+,\s]+)* *, *[^+,\s]+ *(\n|(?=$)))+$/.test(csv) }