0.13.0 DVD Series

This commit is contained in:
2026-04-10 18:44:41 +00:00
parent 43702b0138
commit 974b7bfad3
36 changed files with 9666 additions and 739 deletions
+32 -3
View File
@@ -16,6 +16,7 @@ const { setLogRootDir } = require('./logPathService');
const {
defaultRawDir: DEFAULT_RAW_DIR,
defaultMovieDir: DEFAULT_MOVIE_DIR,
defaultSeriesDir: DEFAULT_SERIES_DIR,
defaultCdDir: DEFAULT_CD_DIR,
defaultAudiobookRawDir: DEFAULT_AUDIOBOOK_RAW_DIR,
defaultAudiobookDir: DEFAULT_AUDIOBOOK_DIR,
@@ -38,6 +39,7 @@ const HANDBRAKE_PRESET_RELEVANT_SETTING_KEYS = new Set([
const SENSITIVE_SETTING_KEYS = new Set([
'makemkv_registration_key',
'omdb_api_key',
'tmdb_api_read_access_token',
'pushover_token',
'pushover_user'
]);
@@ -62,18 +64,30 @@ const PROFILED_SETTINGS = {
cd: 'raw_dir_cd_owner',
audiobook: 'raw_dir_audiobook_owner'
},
series_raw_dir: {
dvd: 'raw_dir_dvd_series'
},
series_raw_dir_owner: {
dvd: 'raw_dir_dvd_series_owner'
},
movie_dir: {
bluray: 'movie_dir_bluray',
dvd: 'movie_dir_dvd',
cd: 'movie_dir_cd',
audiobook: 'movie_dir_audiobook'
},
series_dir: {
dvd: 'series_dir_dvd'
},
movie_dir_owner: {
bluray: 'movie_dir_bluray_owner',
dvd: 'movie_dir_dvd_owner',
cd: 'movie_dir_cd_owner',
audiobook: 'movie_dir_audiobook_owner'
},
series_dir_owner: {
dvd: 'series_dir_dvd_owner'
},
mediainfo_extra_args: {
bluray: 'mediainfo_extra_args_bluray',
dvd: 'mediainfo_extra_args_dvd'
@@ -111,8 +125,12 @@ const PROFILED_SETTINGS = {
const STRICT_PROFILE_ONLY_SETTING_KEYS = new Set([
'raw_dir',
'raw_dir_owner',
'series_raw_dir',
'series_raw_dir_owner',
'movie_dir',
'movie_dir_owner'
'movie_dir_owner',
'series_dir',
'series_dir_owner'
]);
function applyRuntimeLogDirSetting(rawValue) {
@@ -813,6 +831,8 @@ class SettingsService {
} else {
resolvedValue = DEFAULT_RAW_DIR;
}
} else if (legacyKey === 'series_dir') {
resolvedValue = DEFAULT_SERIES_DIR;
} else if (legacyKey === 'movie_dir') {
if (normalizedRequestedProfile === 'cd') {
resolvedValue = DEFAULT_CD_DIR;
@@ -858,7 +878,7 @@ class SettingsService {
const audiobook = this.resolveEffectiveToolSettings(map, 'audiobook');
return {
bluray: { raw: bluray.raw_dir, movies: bluray.movie_dir },
dvd: { raw: dvd.raw_dir, movies: dvd.movie_dir },
dvd: { raw: dvd.raw_dir, seriesRaw: dvd.series_raw_dir || dvd.raw_dir, movies: dvd.movie_dir, series: dvd.series_dir },
cd: { raw: cd.raw_dir, movies: cd.movie_dir },
audiobook: { raw: audiobook.raw_dir, movies: audiobook.movie_dir },
downloads: { path: bluray.download_dir },
@@ -870,6 +890,7 @@ class SettingsService {
defaults: {
raw: DEFAULT_RAW_DIR,
movies: DEFAULT_MOVIE_DIR,
series: DEFAULT_SERIES_DIR,
cd: DEFAULT_CD_DIR,
audiobookRaw: DEFAULT_AUDIOBOOK_RAW_DIR,
audiobookMovies: DEFAULT_AUDIOBOOK_DIR,
@@ -1116,6 +1137,7 @@ class SettingsService {
: 'mkv';
const sourceArg = this.resolveSourceArg(map, deviceInfo);
const rawSelectedTitleId = normalizeNonNegativeInteger(options?.selectedTitleId);
const disableMinLengthFilter = Boolean(options?.disableMinLengthFilter);
const parsedExtra = splitArgs(map.makemkv_rip_extra_args);
let extra = [];
let baseArgs = [];
@@ -1141,6 +1163,9 @@ class SettingsService {
const minLength = Number(map.makemkv_min_length_minutes || 60);
const hasExplicitTitle = rawSelectedTitleId !== null;
const targetTitle = hasExplicitTitle ? String(Math.trunc(rawSelectedTitleId)) : 'all';
const minLengthSeconds = Number.isFinite(minLength) && minLength > 0
? Math.round(minLength * 60)
: 0;
if (hasExplicitTitle) {
baseArgs = [
'-r', '--progress=-same',
@@ -1150,9 +1175,12 @@ class SettingsService {
rawJobDir
];
} else {
const minLengthArgs = (!disableMinLengthFilter && minLengthSeconds > 0)
? [`--minlength=${minLengthSeconds}`]
: [];
baseArgs = [
'-r', '--progress=-same',
'--minlength=' + Math.round(minLength * 60),
...minLengthArgs,
'mkv',
sourceArg,
targetTitle,
@@ -1166,6 +1194,7 @@ class SettingsService {
ripMode,
rawJobDir,
deviceInfo,
disableMinLengthFilter: ripMode === 'mkv' ? disableMinLengthFilter : false,
selectedTitleId: ripMode === 'mkv' && Number.isFinite(rawSelectedTitleId) && rawSelectedTitleId >= 0
? Math.trunc(rawSelectedTitleId)
: null