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>
45 lines
2.1 KiB
TypeScript
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')
|
|
})
|
|
})
|