mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-25 00:11:26 -07:00
feat(subtitle-sidebar): add sidebar config surface (#28)
This commit is contained in:
@@ -1,5 +1,16 @@
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
function parseTrackId(value: unknown): number | null {
|
||||
if (typeof value === 'number' && Number.isInteger(value)) {
|
||||
return value;
|
||||
}
|
||||
if (typeof value === 'string') {
|
||||
const parsed = Number(value.trim());
|
||||
return Number.isInteger(parsed) ? parsed : null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getActiveExternalSubtitleSource(
|
||||
trackListRaw: unknown,
|
||||
sidRaw: unknown,
|
||||
@@ -8,9 +19,8 @@ export function getActiveExternalSubtitleSource(
|
||||
return null;
|
||||
}
|
||||
|
||||
const sid =
|
||||
typeof sidRaw === 'number' ? sidRaw : typeof sidRaw === 'string' ? Number(sidRaw) : null;
|
||||
if (sid == null || !Number.isFinite(sid)) {
|
||||
const sid = parseTrackId(sidRaw);
|
||||
if (sid === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -19,7 +29,7 @@ export function getActiveExternalSubtitleSource(
|
||||
return false;
|
||||
}
|
||||
const track = entry as Record<string, unknown>;
|
||||
return track.type === 'sub' && track.id === sid && track.external === true;
|
||||
return track.type === 'sub' && parseTrackId(track.id) === sid && track.external === true;
|
||||
}) as Record<string, unknown> | undefined;
|
||||
|
||||
const externalFilename =
|
||||
@@ -40,3 +50,21 @@ export function resolveSubtitleSourcePath(source: string): string {
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
export function buildSubtitleSidebarSourceKey(
|
||||
videoPath: string,
|
||||
track: unknown,
|
||||
fallbackSourcePath?: string,
|
||||
): string {
|
||||
const normalizedVideoPath = videoPath.trim();
|
||||
if (track && typeof track === 'object' && normalizedVideoPath) {
|
||||
const subtitleTrack = track as Record<string, unknown>;
|
||||
const trackId = parseTrackId(subtitleTrack.id);
|
||||
const ffIndex = parseTrackId(subtitleTrack['ff-index']);
|
||||
if (trackId !== null || ffIndex !== null) {
|
||||
return `internal:${normalizedVideoPath}:track:${trackId ?? 'unknown'}:ff:${ffIndex ?? 'unknown'}`;
|
||||
}
|
||||
}
|
||||
|
||||
return fallbackSourcePath ?? normalizedVideoPath;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user