mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-06 19:57:26 -08:00
Jellyfin and Subsync Fixes (#13)
This commit is contained in:
@@ -42,6 +42,30 @@ test('parseArgs ignores missing value after --log-level', () => {
|
||||
assert.equal(args.start, true);
|
||||
});
|
||||
|
||||
test('parseArgs handles jellyfin item listing controls', () => {
|
||||
const args = parseArgs([
|
||||
'--jellyfin-items',
|
||||
'--jellyfin-recursive=false',
|
||||
'--jellyfin-include-item-types',
|
||||
'Series,Movie,Folder',
|
||||
]);
|
||||
|
||||
assert.equal(args.jellyfinItems, true);
|
||||
assert.equal(args.jellyfinRecursive, false);
|
||||
assert.equal(args.jellyfinIncludeItemTypes, 'Series,Movie,Folder');
|
||||
});
|
||||
|
||||
test('parseArgs handles space-separated jellyfin recursive control', () => {
|
||||
const args = parseArgs(['--jellyfin-items', '--jellyfin-recursive', 'false']);
|
||||
assert.equal(args.jellyfinRecursive, false);
|
||||
});
|
||||
|
||||
test('parseArgs ignores unrecognized space-separated jellyfin recursive values', () => {
|
||||
const args = parseArgs(['--jellyfin-items', '--jellyfin-recursive', '--start']);
|
||||
assert.equal(args.jellyfinRecursive, undefined);
|
||||
assert.equal(args.start, true);
|
||||
});
|
||||
|
||||
test('hasExplicitCommand and shouldStartApp preserve command intent', () => {
|
||||
const stopOnly = parseArgs(['--stop']);
|
||||
assert.equal(hasExplicitCommand(stopOnly), true);
|
||||
@@ -118,6 +142,19 @@ test('hasExplicitCommand and shouldStartApp preserve command intent', () => {
|
||||
assert.equal(hasExplicitCommand(jellyfinRemoteAnnounce), true);
|
||||
assert.equal(shouldStartApp(jellyfinRemoteAnnounce), false);
|
||||
|
||||
const jellyfinPreviewAuth = parseArgs([
|
||||
'--jellyfin-preview-auth',
|
||||
'--jellyfin-response-path',
|
||||
'/tmp/subminer-jf-response.json',
|
||||
]);
|
||||
assert.equal(jellyfinPreviewAuth.jellyfinPreviewAuth, true);
|
||||
assert.equal(
|
||||
jellyfinPreviewAuth.jellyfinResponsePath,
|
||||
'/tmp/subminer-jf-response.json',
|
||||
);
|
||||
assert.equal(hasExplicitCommand(jellyfinPreviewAuth), true);
|
||||
assert.equal(shouldStartApp(jellyfinPreviewAuth), false);
|
||||
|
||||
const background = parseArgs(['--background']);
|
||||
assert.equal(background.background, true);
|
||||
assert.equal(hasExplicitCommand(background), true);
|
||||
|
||||
@@ -33,6 +33,7 @@ export interface CliArgs {
|
||||
jellyfinSubtitleUrlsOnly: boolean;
|
||||
jellyfinPlay: boolean;
|
||||
jellyfinRemoteAnnounce: boolean;
|
||||
jellyfinPreviewAuth: boolean;
|
||||
texthooker: boolean;
|
||||
help: boolean;
|
||||
autoStartOverlay: boolean;
|
||||
@@ -49,8 +50,11 @@ export interface CliArgs {
|
||||
jellyfinItemId?: string;
|
||||
jellyfinSearch?: string;
|
||||
jellyfinLimit?: number;
|
||||
jellyfinRecursive?: boolean;
|
||||
jellyfinIncludeItemTypes?: string;
|
||||
jellyfinAudioStreamIndex?: number;
|
||||
jellyfinSubtitleStreamIndex?: number;
|
||||
jellyfinResponsePath?: string;
|
||||
debug: boolean;
|
||||
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
||||
}
|
||||
@@ -93,6 +97,7 @@ export function parseArgs(argv: string[]): CliArgs {
|
||||
jellyfinSubtitleUrlsOnly: false,
|
||||
jellyfinPlay: false,
|
||||
jellyfinRemoteAnnounce: false,
|
||||
jellyfinPreviewAuth: false,
|
||||
texthooker: false,
|
||||
help: false,
|
||||
autoStartOverlay: false,
|
||||
@@ -147,6 +152,7 @@ export function parseArgs(argv: string[]): CliArgs {
|
||||
args.jellyfinSubtitleUrlsOnly = true;
|
||||
} else if (arg === '--jellyfin-play') args.jellyfinPlay = true;
|
||||
else if (arg === '--jellyfin-remote-announce') args.jellyfinRemoteAnnounce = true;
|
||||
else if (arg === '--jellyfin-preview-auth') args.jellyfinPreviewAuth = true;
|
||||
else if (arg === '--texthooker') args.texthooker = true;
|
||||
else if (arg === '--auto-start-overlay') args.autoStartOverlay = true;
|
||||
else if (arg === '--generate-config') args.generateConfig = true;
|
||||
@@ -229,6 +235,25 @@ export function parseArgs(argv: string[]): CliArgs {
|
||||
} else if (arg === '--jellyfin-limit') {
|
||||
const value = Number(readValue(argv[i + 1]));
|
||||
if (Number.isFinite(value) && value > 0) args.jellyfinLimit = Math.floor(value);
|
||||
} else if (arg.startsWith('--jellyfin-recursive=')) {
|
||||
const value = arg.split('=', 2)[1]?.trim().toLowerCase();
|
||||
if (value === 'true' || value === '1' || value === 'yes') args.jellyfinRecursive = true;
|
||||
if (value === 'false' || value === '0' || value === 'no') args.jellyfinRecursive = false;
|
||||
} else if (arg === '--jellyfin-recursive') {
|
||||
const value = readValue(argv[i + 1])?.trim().toLowerCase();
|
||||
if (value === 'false' || value === '0' || value === 'no') {
|
||||
args.jellyfinRecursive = false;
|
||||
} else if (value === 'true' || value === '1' || value === 'yes') {
|
||||
args.jellyfinRecursive = true;
|
||||
}
|
||||
} else if (arg === '--jellyfin-non-recursive') {
|
||||
args.jellyfinRecursive = false;
|
||||
} else if (arg.startsWith('--jellyfin-include-item-types=')) {
|
||||
const value = arg.split('=', 2)[1];
|
||||
if (value) args.jellyfinIncludeItemTypes = value;
|
||||
} else if (arg === '--jellyfin-include-item-types') {
|
||||
const value = readValue(argv[i + 1]);
|
||||
if (value) args.jellyfinIncludeItemTypes = value;
|
||||
} else if (arg.startsWith('--jellyfin-audio-stream-index=')) {
|
||||
const value = Number(arg.split('=', 2)[1]);
|
||||
if (Number.isInteger(value) && value >= 0) args.jellyfinAudioStreamIndex = value;
|
||||
@@ -241,6 +266,12 @@ export function parseArgs(argv: string[]): CliArgs {
|
||||
} else if (arg === '--jellyfin-subtitle-stream-index') {
|
||||
const value = Number(readValue(argv[i + 1]));
|
||||
if (Number.isInteger(value) && value >= 0) args.jellyfinSubtitleStreamIndex = value;
|
||||
} else if (arg.startsWith('--jellyfin-response-path=')) {
|
||||
const value = arg.split('=', 2)[1];
|
||||
if (value) args.jellyfinResponsePath = value;
|
||||
} else if (arg === '--jellyfin-response-path') {
|
||||
const value = readValue(argv[i + 1]);
|
||||
if (value) args.jellyfinResponsePath = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,6 +313,7 @@ export function hasExplicitCommand(args: CliArgs): boolean {
|
||||
args.jellyfinSubtitles ||
|
||||
args.jellyfinPlay ||
|
||||
args.jellyfinRemoteAnnounce ||
|
||||
args.jellyfinPreviewAuth ||
|
||||
args.texthooker ||
|
||||
args.generateConfig ||
|
||||
args.help
|
||||
@@ -350,6 +382,7 @@ export function shouldRunSettingsOnlyStartup(args: CliArgs): boolean {
|
||||
!args.jellyfinSubtitles &&
|
||||
!args.jellyfinPlay &&
|
||||
!args.jellyfinRemoteAnnounce &&
|
||||
!args.jellyfinPreviewAuth &&
|
||||
!args.texthooker &&
|
||||
!args.help &&
|
||||
!args.autoStartOverlay &&
|
||||
|
||||
Reference in New Issue
Block a user