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:
14 files changed
+55
-322
No files matched your search
@@ -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}>
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user