From c82f31d68b24654f24a7dd56fc494c5c82d82eb0 Mon Sep 17 00:00:00 2001 From: varo6 Date: Fri, 6 Mar 2026 11:49:45 +0100 Subject: [PATCH] Add XTCH 2-bit conversion support --- src/components/ConverterPage.tsx | 3 +- src/components/MergePage.tsx | 14 +- src/components/Options.tsx | 12 ++ src/lib/conversion/types.ts | 1 + src/lib/converter.ts | 84 +++++++----- src/lib/merge.ts | 84 ++---------- src/lib/processing/dithering.ts | 179 +++++++++++++++---------- src/lib/processing/xtg.ts | 79 +++++++++-- src/lib/split.ts | 105 +-------------- src/lib/workers/convert-page.worker.ts | 38 ++++-- src/lib/xtc-format.ts | 7 +- src/routes/about.tsx | 13 +- src/routes/image.tsx | 2 +- src/routes/index.tsx | 2 +- src/routes/video.tsx | 2 +- 15 files changed, 307 insertions(+), 318 deletions(-) diff --git a/src/components/ConverterPage.tsx b/src/components/ConverterPage.tsx index c13fc3d..900daff 100644 --- a/src/components/ConverterPage.tsx +++ b/src/components/ConverterPage.tsx @@ -125,6 +125,7 @@ export function ConverterPage({ fileType, notice }: ConverterPageProps) { device: 'X4', splitMode: (fileType === 'image' || fileType === 'video') ? 'nosplit' : 'overlap', dithering: fileType === 'pdf' ? 'atkinson' : 'floyd', + is2bit: false, contrast: fileType === 'pdf' ? 8 : 4, horizontalMargin: 0, verticalMargin: 0, @@ -241,7 +242,7 @@ export function ConverterPage({ fileType, notice }: ConverterPageProps) { console.error(`Error converting ${file.name}:`, err) // Store error result await addResult({ - name: file.name.replace(/\.[^/.]+$/i, '.xtc'), + name: file.name.replace(/\.[^/.]+$/i, options.is2bit ? '.xtch' : '.xtc'), error: normalizeUserErrorMessage(err instanceof Error ? err.message : 'Unknown error'), }) } diff --git a/src/components/MergePage.tsx b/src/components/MergePage.tsx index 9e0b197..da3c7ab 100644 --- a/src/components/MergePage.tsx +++ b/src/components/MergePage.tsx @@ -89,7 +89,7 @@ export function MergePage() { const type = detectFileType(file) if (type === 'unknown') { - setTypeError('Unsupported file type. Use CBZ, PDF, or XTC files.') + setTypeError('Unsupported file type. Use CBZ, PDF, XTC, or XTCH files.') return } @@ -318,14 +318,14 @@ export function MergePage() { {mode === 'merge' ? 'Drop files to merge' : 'Drop a file to split'} - CBZ, PDF, or XTC {mode === 'merge' ? '(same type only)' : ''} + CBZ, PDF, or XTC/XTCH {mode === 'merge' ? '(same type only)' : ''} setXtcOutputFormat(e.target.value as OutputFormat)} > - + @@ -404,7 +404,7 @@ export function MergePage() {
CBZ - Move to converter to create XTC + Move to converter to create XTC/XTCH
@@ -417,7 +417,7 @@ export function MergePage() {
PDF - Move to converter to create XTC + Move to converter to create XTC/XTCH
@@ -599,7 +599,7 @@ export function MergePage() { className="btn-move-converter" onClick={handleMoveToConverter} > - Convert {selectedResults.length > 1 ? `${selectedResults.length} files` : ''} to XTC + Convert {selectedResults.length > 1 ? `${selectedResults.length} files` : ''} to XTC/XTCH diff --git a/src/components/Options.tsx b/src/components/Options.tsx index 2a48690..0579b4c 100644 --- a/src/components/Options.tsx +++ b/src/components/Options.tsx @@ -142,6 +142,18 @@ export function Options({ options, onChange, fileType = 'cbz' }: OptionsProps) { +
+ +
+