ff
This commit is contained in:
@@ -585,6 +585,7 @@ def unmux(ctx,
|
|||||||
cpu):
|
cpu):
|
||||||
from ffx.file_properties import FileProperties
|
from ffx.file_properties import FileProperties
|
||||||
from ffx.process import executeProcess
|
from ffx.process import executeProcess
|
||||||
|
from ffx.shifted_season_controller import ShiftedSeasonController
|
||||||
from ffx.track_disposition import TrackDisposition
|
from ffx.track_disposition import TrackDisposition
|
||||||
from ffx.track_type import TrackType
|
from ffx.track_type import TrackType
|
||||||
|
|
||||||
@@ -605,6 +606,8 @@ def unmux(ctx,
|
|||||||
if create_output_directory and existingSourcePaths and not ctx.obj.get('dry_run', False):
|
if create_output_directory and existingSourcePaths and not ctx.obj.get('dry_run', False):
|
||||||
os.makedirs(output_directory, exist_ok=True)
|
os.makedirs(output_directory, exist_ok=True)
|
||||||
|
|
||||||
|
shiftedSeasonController = ShiftedSeasonController(ctx.obj)
|
||||||
|
|
||||||
for sourcePath in existingSourcePaths:
|
for sourcePath in existingSourcePaths:
|
||||||
|
|
||||||
fp = FileProperties(ctx.obj, sourcePath)
|
fp = FileProperties(ctx.obj, sourcePath)
|
||||||
@@ -621,8 +624,12 @@ def unmux(ctx,
|
|||||||
currentShowDescriptor,
|
currentShowDescriptor,
|
||||||
)
|
)
|
||||||
|
|
||||||
season = fp.getSeason()
|
season, episode = shiftedSeasonController.shiftSeason(
|
||||||
episode = fp.getEpisode()
|
fp.getShowId(),
|
||||||
|
season=fp.getSeason(),
|
||||||
|
episode=fp.getEpisode(),
|
||||||
|
patternId=currentPattern.getId() if currentPattern is not None else None,
|
||||||
|
)
|
||||||
|
|
||||||
#TODO: Recognition für alle Formate anpassen
|
#TODO: Recognition für alle Formate anpassen
|
||||||
targetLabel = label if label else fp.getFileBasename()
|
targetLabel = label if label else fp.getFileBasename()
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ from tests.support.ffx_bundle import (
|
|||||||
from ffx.pattern_controller import PatternController
|
from ffx.pattern_controller import PatternController
|
||||||
from ffx.show_controller import ShowController
|
from ffx.show_controller import ShowController
|
||||||
from ffx.show_descriptor import ShowDescriptor
|
from ffx.show_descriptor import ShowDescriptor
|
||||||
|
from ffx.shifted_season_controller import ShiftedSeasonController
|
||||||
from ffx.track_codec import TrackCodec
|
from ffx.track_codec import TrackCodec
|
||||||
from ffx.track_descriptor import TrackDescriptor
|
from ffx.track_descriptor import TrackDescriptor
|
||||||
from ffx.track_type import TrackType
|
from ffx.track_type import TrackType
|
||||||
@@ -109,6 +110,31 @@ class UnmuxCliTests(unittest.TestCase):
|
|||||||
finally:
|
finally:
|
||||||
dispose_controller_context(context)
|
dispose_controller_context(context)
|
||||||
|
|
||||||
|
def add_show_shift(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
show_id: int,
|
||||||
|
original_season: int,
|
||||||
|
first_episode: int,
|
||||||
|
last_episode: int,
|
||||||
|
season_offset: int,
|
||||||
|
episode_offset: int,
|
||||||
|
) -> None:
|
||||||
|
context = build_controller_context(self.database_path)
|
||||||
|
try:
|
||||||
|
ShiftedSeasonController(context).addShiftedSeason(
|
||||||
|
showId=show_id,
|
||||||
|
shiftedSeasonObj={
|
||||||
|
"original_season": original_season,
|
||||||
|
"first_episode": first_episode,
|
||||||
|
"last_episode": last_episode,
|
||||||
|
"season_offset": season_offset,
|
||||||
|
"episode_offset": episode_offset,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
dispose_controller_context(context)
|
||||||
|
|
||||||
def test_subtitles_only_without_output_directory_uses_configured_base_plus_label(self):
|
def test_subtitles_only_without_output_directory_uses_configured_base_plus_label(self):
|
||||||
self.write_config(
|
self.write_config(
|
||||||
{
|
{
|
||||||
@@ -223,6 +249,55 @@ class UnmuxCliTests(unittest.TestCase):
|
|||||||
output_filenames,
|
output_filenames,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_unmux_applies_shifted_season_mapping_to_output_filenames(self):
|
||||||
|
self.seed_matching_show(
|
||||||
|
r"^unmux_([sS][0-9]+[eE][0-9]+)\.mkv$",
|
||||||
|
indicator_season_digits=2,
|
||||||
|
indicator_episode_digits=2,
|
||||||
|
)
|
||||||
|
self.add_show_shift(
|
||||||
|
show_id=1,
|
||||||
|
original_season=1,
|
||||||
|
first_episode=1,
|
||||||
|
last_episode=99,
|
||||||
|
season_offset=1,
|
||||||
|
episode_offset=-88,
|
||||||
|
)
|
||||||
|
source_filename = "unmux_s01e89.mkv"
|
||||||
|
output_directory = self.workdir / "unmux-output"
|
||||||
|
output_directory.mkdir()
|
||||||
|
source_path = create_source_fixture(
|
||||||
|
self.workdir,
|
||||||
|
source_filename,
|
||||||
|
[
|
||||||
|
SourceTrackSpec(TrackType.VIDEO, identity="video-0"),
|
||||||
|
SourceTrackSpec(
|
||||||
|
TrackType.SUBTITLE,
|
||||||
|
identity="subtitle-1",
|
||||||
|
language="eng",
|
||||||
|
subtitle_lines=("subtitle payload",),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
completed = run_ffx_unmux(
|
||||||
|
self.workdir,
|
||||||
|
self.home_dir,
|
||||||
|
self.database_path,
|
||||||
|
"--label",
|
||||||
|
"dball",
|
||||||
|
"--output-directory",
|
||||||
|
str(output_directory),
|
||||||
|
"--subtitles-only",
|
||||||
|
str(source_path),
|
||||||
|
)
|
||||||
|
self.assertCompleted(completed)
|
||||||
|
|
||||||
|
self.assertIn(
|
||||||
|
"Unmuxing stream 1 into file dball_S02E01_1_eng",
|
||||||
|
completed.stderr,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user