feat: add booklet download button, remove pdfjs-dist dependency

- Add save/download button to booklet toolbar with native file dialog
- Add v2_booklet_save command to copy PDF to user-chosen location
- Remove pdfjs-dist npm package (replaced by MuPDF backend)
- Delete static/pdfjs/ files (~1.9MB: worker, WASM decoders, fallbacks)
- Add bookletDownload i18n keys to all 4 locales
This commit is contained in:
vicrodh committed 2026-02-28 07:48:03 -06:00
1 parent 53fc99446b
commit 6c8354f825
14 files changed
+55 -322

No files matched your search

+26 -1
View File
@@ -2,7 +2,8 @@
import { tick } from 'svelte';
import { t } from 'svelte-i18n';
import { invoke } from '@tauri-apps/api/core';
import { X, ChevronLeft, ChevronRight, ZoomIn, ZoomOut, Maximize, RotateCw } from 'lucide-svelte';
import { X, ChevronLeft, ChevronRight, ZoomIn, ZoomOut, Maximize, RotateCw, Download } from 'lucide-svelte';
import { save } from '@tauri-apps/plugin-dialog';
interface PageSize {
width: number;
@@ -174,6 +175,26 @@
renderPage();
}
async function downloadBooklet() {
if (!bookletLoaded) return;
const defaultName = title
? `${title}.pdf`
: 'Booklet.pdf';
const dest = await save({
filters: [{ name: 'PDF', extensions: ['pdf'] }],
defaultPath: defaultName,
});
if (!dest) return;
try {
await invoke('v2_booklet_save', { dest });
} catch (err: any) {
console.error('[BookletViewer] Save error:', err);
}
}
function handleKeydown(e: KeyboardEvent) {
if (!isOpen) return;
@@ -270,6 +291,10 @@
<button class="toolbar-btn" onclick={rotate} title={$t('album.bookletRotate')}>
<RotateCw size={16} />
</button>
<div class="toolbar-divider"></div>
<button class="toolbar-btn" onclick={downloadBooklet} title={$t('album.bookletDownload')} disabled={!bookletLoaded}>
<Download size={16} />
</button>
</div>
<div class="toolbar-right">
<button class="toolbar-btn close-btn" onclick={onClose}>
+2 -1
View File
@@ -233,7 +233,8 @@
"bookletLoading": "Booklet wird geladen...",
"bookletError": "Booklet konnte nicht geladen werden",
"bookletFitWidth": "An Breite anpassen",
"bookletRotate": "Drehen"
"bookletRotate": "Drehen",
"bookletDownload": "Booklet speichern"
},
"artist": {
"albums": "Alben",
+2 -1
View File
@@ -245,7 +245,8 @@
"bookletLoading": "Loading booklet...",
"bookletError": "Could not load booklet",
"bookletFitWidth": "Fit to width",
"bookletRotate": "Rotate"
"bookletRotate": "Rotate",
"bookletDownload": "Save booklet"
},
"artist": {
"albums": "Albums",
+2 -1
View File
@@ -245,7 +245,8 @@
"bookletLoading": "Cargando libreto...",
"bookletError": "No se pudo cargar el libreto",
"bookletFitWidth": "Ajustar al ancho",
"bookletRotate": "Rotar"
"bookletRotate": "Rotar",
"bookletDownload": "Guardar booklet"
},
"artist": {
"albums": "Álbumes",
+2 -1
View File
@@ -233,7 +233,8 @@
"bookletLoading": "Chargement du livret...",
"bookletError": "Impossible de charger le livret",
"bookletFitWidth": "Ajuster à la largeur",
"bookletRotate": "Pivoter"
"bookletRotate": "Pivoter",
"bookletDownload": "Enregistrer le livret"
},
"artist": {
"albums": "Albums",