Files
rippy/rippy-windows/test/disctyp-570.test.ts
HitonabiandClaude Opus 5 fc2d16ca38 feat(v5): Disc-Typ aus dem Dateisystem — INDX0300 ist UHD, VIDEO_TS ist DVD
WAS: laufwerke.typVerfeinern liest je Disc einmal BDMV/index.bdmv (Kopf
„INDX" + Fassung: 0300 = UHD-Format, 0100/0200 = Blu-ray) bzw. sieht
VIDEO_TS (DVD) und überschreibt damit, was Steuercode und Größe sagten;
das Ergebnis wird je Laufwerk und Disc-Größe gemerkt (die Wache fragt
alle 3 s). Gemessen am Akira-UHD-Abbild unter F:\Video\backup\UHD_AKIRA
(12.09.2026): INDX0300.
WARUM: Durchsicht 12.09.2026, Fund F10 — bei manchen USB-Brücken
antwortet IOCTL_CDROM_DISK_TYPE nicht („unbekannt" → ISO), und die Größe
allein machte aus einer 4K-Disc mit 48 GB Daten eine „bluray" (falsches
Preset). Am echten Laufwerk mit einer gewöhnlichen Blu-ray noch zu
messen, dass dort 0200 steht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 21:49:49 +02:00

45 lines
2.1 KiB
TypeScript

// 5.7.0 (Durchsicht F10): Der Disc-Typ aus dem Dateisystem — BDMV/index.bdmv
// mit „INDX0300" ist UHD (am Akira-UHD-Abbild gemessen), „0200"/„0100" eine
// Blu-ray, VIDEO_TS eine DVD. Der Windows-Steuercode antwortet bei manchen
// USB-Brücken nicht, und die Größe allein machte aus einer 4K-Disc mit
// 48 GB Daten „bluray".
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import { typAusIndexKopf } from '../src/kern/metadaten/discmerkmale'
let wegwerf: string[] = []
afterEach(() => {
for (const o of wegwerf.splice(0)) rmSync(o, { recursive: true, force: true })
})
describe('typAusIndexKopf', () => {
it('INDX0300 ist UHD, INDX0200/0100 Blu-ray, alles andere nichts', () => {
expect(typAusIndexKopf(Buffer.from('INDX0300\0\0\0N', 'latin1'))).toBe('uhd')
expect(typAusIndexKopf(Buffer.from('INDX0200xxxx', 'latin1'))).toBe('bluray')
expect(typAusIndexKopf(Buffer.from('INDX0100xxxx', 'latin1'))).toBe('bluray')
expect(typAusIndexKopf(Buffer.from('MOBJ0200', 'latin1'))).toBe(null)
expect(typAusIndexKopf(Buffer.from('IND', 'latin1'))).toBe(null)
})
})
describe('typAusDateisystem an einem nachgebauten Laufzeit-Ordner', () => {
// discWurzel() rechnet aus \\.\G: den Buchstaben — das geht nur unter
// Windows an einem echten Laufwerk. Hier wird deshalb die Kopf-Funktion
// über eine echte Datei geprüft, so wie typAusDateisystem sie liest.
it('liest die ersten acht Bytes einer echten index.bdmv', () => {
const wurzel = mkdtempSync(join(tmpdir(), 'rippy-bdmv-'))
wegwerf.push(wurzel)
mkdirSync(join(wurzel, 'BDMV'), { recursive: true })
const index = join(wurzel, 'BDMV', 'index.bdmv')
writeFileSync(index, Buffer.concat([Buffer.from('INDX0300', 'latin1'), Buffer.alloc(64)]))
const { openSync, readSync, closeSync } = require('node:fs') as typeof import('node:fs')
const fd = openSync(index, 'r')
const kopf = Buffer.alloc(8)
readSync(fd, kopf, 0, 8, 0)
closeSync(fd)
expect(typAusIndexKopf(kopf)).toBe('uhd')
})
})