mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 03:55:05 +00:00
A service that sets title.language in get_tracks replaced the metadata language, so 'orig' picked the wrong audio. Video tags and original flags move to the enrich language with the title.
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from types import SimpleNamespace
|
|
|
|
from langcodes import Language
|
|
|
|
from unshackle.core.utilities import apply_original_language
|
|
|
|
|
|
class FakeTracks(SimpleNamespace):
|
|
def __iter__(self):
|
|
return iter([*self.videos, *self.audio])
|
|
|
|
|
|
def track(lang, original=False):
|
|
return SimpleNamespace(language=Language.get(lang) if lang else None, is_original_lang=original)
|
|
|
|
|
|
def title(language, videos=(), audio=()):
|
|
return SimpleNamespace(
|
|
language=Language.get(language) if language else None,
|
|
tracks=FakeTracks(videos=list(videos), audio=list(audio)),
|
|
)
|
|
|
|
|
|
def test_overrides_the_service_guess_and_its_videos():
|
|
t = title("es", videos=[track("es"), track("es")])
|
|
apply_original_language(t, Language.get("it"))
|
|
assert str(t.language) == "it"
|
|
assert [str(v.language) for v in t.tracks.videos] == ["it", "it"]
|
|
|
|
|
|
def test_videos_in_another_language_keep_it():
|
|
t = title("es", videos=[track("es"), track("ja"), track(None)])
|
|
apply_original_language(t, Language.get("it"))
|
|
assert [v.language and str(v.language) for v in t.tracks.videos] == ["it", "ja", None]
|
|
|
|
|
|
def test_no_service_language_keeps_video_tags():
|
|
t = title(None, videos=[track("en")])
|
|
apply_original_language(t, Language.get("it"))
|
|
assert str(t.language) == "it"
|
|
assert str(t.tracks.videos[0].language) == "en"
|
|
|
|
|
|
def test_original_flag_moves_to_the_enrich_language():
|
|
t = title("es", audio=[track("es-419", original=True), track("it-IT")])
|
|
apply_original_language(t, Language.get("it"))
|
|
assert [a.is_original_lang for a in t.tracks.audio] == [False, True]
|
|
|
|
|
|
def test_same_language_leaves_flags_alone():
|
|
t = title("it", videos=[track(None, original=True)])
|
|
apply_original_language(t, Language.get("it"))
|
|
assert t.tracks.videos[0].is_original_lang is True
|