0.12.0 Begin neu Architecture

This commit is contained in:
michael committed 2026-03-18 15:35:10 +00:00
1 parent d00191324b
commit 0a9cf6969f
30 files changed
+4570 -183

No files matched your search

+66
View File
@@ -0,0 +1,66 @@
'use strict';
const { VideoDiscPlugin } = require('./VideoDiscPlugin');
/**
* Source-Plugin für DVD-Discs.
*
* Erbt die gesamte Rip/Encode-Logik von VideoDiscPlugin.
* Überschreibt nur die Identifikations-Properties und detect().
*
* Erkennungsmerkmale:
* - mediaProfile === 'dvd'
* - Dateisystem: UDF (1.02) oder ISO9660
* - Laufwerksmodell enthält 'dvd', aber KEIN Blu-ray-Marker
*/
class DVDPlugin extends VideoDiscPlugin {
get id() {
return 'dvd';
}
get name() {
return 'DVD';
}
get mediaProfile() {
return 'dvd';
}
/**
* Niedrigere Priorität als Blu-ray (5 < 10), da Blu-ray-Laufwerke
* auch DVDs lesen können — BluRayPlugin soll für BD-Discs bevorzugt werden.
*/
get priority() {
return 5;
}
/**
* Erkennt DVD-Discs.
* Prüft das vom DiskDetectionService gesetzte mediaProfile-Feld.
*
* @param {object} discInfo
* @param {string} [discInfo.mediaProfile] - 'dvd'
* @param {string} [discInfo.fstype] - 'udf' | 'iso9660'
* @param {string} [discInfo.driveModel]
* @returns {boolean}
*/
detect(discInfo) {
const profile = String(discInfo?.mediaProfile || '').trim().toLowerCase();
if (profile === 'dvd') {
return true;
}
// Fallback: ISO9660 oder UDF ohne Blu-ray-Modell-Marker
const fstype = String(discInfo?.fstype || '').trim().toLowerCase();
const model = String(discInfo?.driveModel || discInfo?.model || '').trim().toLowerCase();
const hasBlurayMarker = /(blu[\s-]?ray|bd[\s_-]?rom|bd-r\b|bd-re\b)/i.test(model);
if (hasBlurayMarker) {
return false; // Blu-ray-Laufwerk → BluRayPlugin übernimmt
}
if (fstype === 'iso9660' || (fstype === 'udf' && /dvd/i.test(model))) {
return true;
}
return false;
}
}
module.exports = { DVDPlugin };