change disposition order for sidecar files
This commit is contained in:
@@ -1276,7 +1276,8 @@ def convert(ctx,
|
|||||||
targetMediaDescriptor.importSubtitles(context['subtitle_directory'],
|
targetMediaDescriptor.importSubtitles(context['subtitle_directory'],
|
||||||
context['subtitle_prefix'],
|
context['subtitle_prefix'],
|
||||||
showSeason,
|
showSeason,
|
||||||
showEpisode)
|
showEpisode,
|
||||||
|
preserve_dispositions=True)
|
||||||
|
|
||||||
# ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getAllTrackDescriptors()]}")
|
# ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getAllTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getAllTrackDescriptors()]}")
|
||||||
ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getTrackDescriptors()]}")
|
ctx.obj['logger'].debug(f"tmd subindices: {[t.getIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getSubIndex() for t in targetMediaDescriptor.getTrackDescriptors()]} {[t.getDispositionFlag(TrackDisposition.DEFAULT) for t in targetMediaDescriptor.getTrackDescriptors()]}")
|
||||||
|
|||||||
@@ -500,7 +500,14 @@ class MediaDescriptor:
|
|||||||
return subtitleFileDescriptors
|
return subtitleFileDescriptors
|
||||||
|
|
||||||
|
|
||||||
def importSubtitles(self, searchDirectory, prefix, season: int = -1, episode: int = -1):
|
def importSubtitles(
|
||||||
|
self,
|
||||||
|
searchDirectory,
|
||||||
|
prefix,
|
||||||
|
season: int = -1,
|
||||||
|
episode: int = -1,
|
||||||
|
preserve_dispositions: bool = False,
|
||||||
|
):
|
||||||
|
|
||||||
# click.echo(f"Season: {season} Episode: {episode}")
|
# click.echo(f"Season: {season} Episode: {episode}")
|
||||||
self.__logger.debug(f"importSubtitles(): Season: {season} Episode: {episode}")
|
self.__logger.debug(f"importSubtitles(): Season: {season} Episode: {episode}")
|
||||||
@@ -543,7 +550,7 @@ class MediaDescriptor:
|
|||||||
# Prefer metadata coming from the external single-track source when
|
# Prefer metadata coming from the external single-track source when
|
||||||
# it is provided explicitly by the filename contract.
|
# it is provided explicitly by the filename contract.
|
||||||
matchingTrack.getTags()["language"] = msfd["language"]
|
matchingTrack.getTags()["language"] = msfd["language"]
|
||||||
if msfd["disposition_set"]:
|
if msfd["disposition_set"] and not preserve_dispositions:
|
||||||
matchingTrack.setDispositionSet(msfd["disposition_set"])
|
matchingTrack.setDispositionSet(msfd["disposition_set"])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
79
tests/unit/test_media_descriptor_import_subtitles.py
Normal file
79
tests/unit/test_media_descriptor_import_subtitles.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
|
||||||
|
|
||||||
|
if str(SRC_ROOT) not in sys.path:
|
||||||
|
sys.path.insert(0, str(SRC_ROOT))
|
||||||
|
|
||||||
|
|
||||||
|
from ffx.logging_utils import get_ffx_logger # noqa: E402
|
||||||
|
from ffx.media_descriptor import MediaDescriptor # noqa: E402
|
||||||
|
from ffx.track_descriptor import TrackDescriptor # noqa: E402
|
||||||
|
from ffx.track_disposition import TrackDisposition # noqa: E402
|
||||||
|
from ffx.track_type import TrackType # noqa: E402
|
||||||
|
|
||||||
|
|
||||||
|
class MediaDescriptorImportSubtitlesTests(unittest.TestCase):
|
||||||
|
def make_descriptor(self) -> MediaDescriptor:
|
||||||
|
return MediaDescriptor(
|
||||||
|
context={"logger": get_ffx_logger()},
|
||||||
|
track_descriptors=[
|
||||||
|
TrackDescriptor(
|
||||||
|
index=3,
|
||||||
|
source_index=3,
|
||||||
|
sub_index=0,
|
||||||
|
track_type=TrackType.SUBTITLE,
|
||||||
|
tags={"language": "eng", "title": "DB Subtitle"},
|
||||||
|
disposition_set={TrackDisposition.DEFAULT},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_import_subtitles_preserves_target_dispositions_when_requested(self):
|
||||||
|
descriptor = self.make_descriptor()
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
sidecar_path = Path(tmpdir) / "dball_S01E01_3_deu_FOR.vtt"
|
||||||
|
sidecar_path.write_text("WEBVTT\n\n", encoding="utf-8")
|
||||||
|
|
||||||
|
descriptor.importSubtitles(
|
||||||
|
tmpdir,
|
||||||
|
"dball",
|
||||||
|
season=1,
|
||||||
|
episode=1,
|
||||||
|
preserve_dispositions=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
track = descriptor.getSubtitleTracks()[0]
|
||||||
|
self.assertEqual(str(sidecar_path), track.getExternalSourceFilePath())
|
||||||
|
self.assertEqual("deu", track.getTags()["language"])
|
||||||
|
self.assertEqual({TrackDisposition.DEFAULT}, track.getDispositionSet())
|
||||||
|
|
||||||
|
def test_import_subtitles_uses_sidecar_dispositions_by_default(self):
|
||||||
|
descriptor = self.make_descriptor()
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
sidecar_path = Path(tmpdir) / "dball_S01E01_3_deu_FOR.vtt"
|
||||||
|
sidecar_path.write_text("WEBVTT\n\n", encoding="utf-8")
|
||||||
|
|
||||||
|
descriptor.importSubtitles(
|
||||||
|
tmpdir,
|
||||||
|
"dball",
|
||||||
|
season=1,
|
||||||
|
episode=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
track = descriptor.getSubtitleTracks()[0]
|
||||||
|
self.assertEqual(str(sidecar_path), track.getExternalSourceFilePath())
|
||||||
|
self.assertEqual("deu", track.getTags()["language"])
|
||||||
|
self.assertEqual({TrackDisposition.FORCED}, track.getDispositionSet())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user