Ampel / ampel (push) Successful in 1m25s
FUND 1 — 'Key korrekt, aber als ungueltig angezeigt': Stimmt beides. Live gemessen: Der aktuelle Forum-Key ist in Ordnung, aber MakeMKV 1.18.4 ist ZU ALT fuer ihn — makemkvcon meldet 5020 UND 5021 zusammen, und die alte Pruefung brach beim ersten Code ab und beschuldigte den Schluessel. urteilAusAusgabe sammelt jetzt ALLE Codes (5021 schlaegt 5020, MakeMKV-Version aus MSG 1005 wird mitgelesen) und die Kachel sagt den wahren Satz: 'Der Key ist in Ordnung — MakeMKV 1.18.4 ist zu alt. Rippy hat ihn entfernt, damit der Beta-Modus weiterlaeuft (Rips klappen trotzdem). Abhilfe: MakeMKV aktualisieren.' Neues Feld weiterBetrieb: Beta-Modus ist GELB (Warnung), nicht rot. Test mit der echten Ausgabe als Fixture. FUND 2 — 'Komprimieren auf CPU statt GPU': Der Default 'H.265 MKV 1080p30' ist ein CPU-Preset. Neue GEMESSENE Empfehlung (gemeinsam/preset-empfehlung.ts): aus den echten Backends und der echten Preset-Liste des eigenen HandBrake — VCN vor NVENC vor QSV vor CPU, nur Namen die WIRKLICH in der Liste stehen, HandBrake-Presets deckeln die Aufloesung nur (DVD bleibt SD). Kette: eigene Wahl > allgemeines Preset > Empfehlung > CPU-Default. Auf dem Commander-PC: bluray/dvd -> 'H.265 VCN 1080p', uhd -> 'H.265 VCN 2160p 4K'. Die Preset-Auswahl zeigt 'automatisch: <Empfehlung>' als Leer-Option. FUND 3 — 'keine Alternative waehlbar': 'Aendern …'-Dialog an der Laufwerks-Kachel (§ 5 Schritt 4): TMDb-Suche (Film + Serie, mit Postern), Klick uebernimmt — Nutzer-Wahl gilt als 100 % und steuert Ablage-Ordner, NFO und Poster. Neue Nachrichten metadaten-suchen / zuordnung-setzen / metadaten-vorschlaege. Dazu: Poster in der Laufwerks-Kachel (CSP um image.tmdb.org erweitert), Restzeit-Schaetzung am Fortschritt. 192 Tests gruen, Smoke gruen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
68 lines
2.3 KiB
TypeScript
68 lines
2.3 KiB
TypeScript
// Bau-Konfiguration für die drei Prozesse (KONZEPT-WINDOWS.md § 4.1):
|
|
// haupt → out/haupt/index.js (Electron Main)
|
|
// kern → out/haupt/kern.js (utilityProcess — als zweiter Eintrag im
|
|
// selben Node-Bau, weil er dieselbe Umgebung hat wie haupt)
|
|
// bruecke → out/bruecke/index.js (Preload des Fensters)
|
|
// fenster → out/fenster/ (React)
|
|
// externalizeDepsPlugin hält "dependencies" (koffi — natives Modul) aus dem
|
|
// Bündel heraus; sie werden zur Laufzeit aus node_modules geladen.
|
|
import { resolve } from 'node:path'
|
|
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
|
|
import react from '@vitejs/plugin-react'
|
|
import tailwindcss from '@tailwindcss/vite'
|
|
import type { Plugin } from 'vite'
|
|
|
|
// Strikte CSP fürs GEBAUTE Fenster (lädt nur eigene Dateien). Nur im Bau:
|
|
// Der Dev-Server braucht Inline-Skripte (react-refresh) und WebSocket (HMR),
|
|
// eine Dev-CSP bräche also genau das Werkzeug, das sie schützen soll.
|
|
// Ob die Seite unter der CSP vollständig läuft, misst der Smoke-Lauf —
|
|
// blockte sie das Skript, käme kein Pong und der Lauf würde rot.
|
|
function cspNurImBau(): Plugin {
|
|
return {
|
|
name: 'csp-nur-im-bau',
|
|
apply: 'build',
|
|
transformIndexHtml(html) {
|
|
return html.replace(
|
|
'<head>',
|
|
// img-src erlaubt TMDb-Poster (Kachel + Ändern-Dialog) — sonst
|
|
// bleibt alles bei 'self'.
|
|
`<head>\n <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data: https://image.tmdb.org" />`,
|
|
)
|
|
},
|
|
}
|
|
}
|
|
|
|
export default defineConfig({
|
|
main: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
build: {
|
|
outDir: 'out/haupt',
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'src/haupt/index.ts'),
|
|
kern: resolve(__dirname, 'src/kern/index.ts'),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
preload: {
|
|
plugins: [externalizeDepsPlugin()],
|
|
build: {
|
|
outDir: 'out/bruecke',
|
|
rollupOptions: {
|
|
input: { index: resolve(__dirname, 'src/bruecke/index.ts') },
|
|
},
|
|
},
|
|
},
|
|
renderer: {
|
|
root: 'src/fenster',
|
|
plugins: [react(), tailwindcss(), cspNurImBau()],
|
|
build: {
|
|
outDir: 'out/fenster',
|
|
rollupOptions: {
|
|
input: { index: resolve(__dirname, 'src/fenster/index.html') },
|
|
},
|
|
},
|
|
},
|
|
})
|