- add season_overwrite and episode_overwrite for Schedule work

- print File path at the end of file for Schedule work
- add discord downloader
This commit is contained in:
2026-03-30 11:05:08 +07:00
parent fe1ccd085c
commit c2fafcd406
7 changed files with 928 additions and 10 deletions

View File

@@ -519,6 +519,11 @@ class dl:
default=False,
help="Continue with best available quality if requested resolutions are not available.",
)
@click.option("-so", "--season-overwrite",type=int, default=None,
help="Overwrite season number")
@click.option("-eo", "--episode-overwrite",type=int, default=None,
help="Overwrite episode number")
@click.pass_context
def cli(ctx: click.Context, **kwargs: Any) -> dl:
return dl(ctx, **kwargs)
@@ -1000,6 +1005,10 @@ class dl:
worst: bool,
best_available: bool,
split_audio: Optional[bool] = None,
season_overwrite: Optional[int] = None,
episode_overwrite: Optional[int] = None,
*_: Any,
**__: Any,
) -> None:
@@ -2464,12 +2473,11 @@ class dl:
for muxed_path in muxed_paths:
media_info = MediaInfo.parse(muxed_path)
final_dir = self.output_dir or config.directories.downloads
final_filename = title.get_filename(media_info, show_service=not no_source)
final_filename = title.get_filename(media_info, show_service=not no_source,season_overwrite=int(season_overwrite) if season_overwrite else None,episode_overwrite=int(episode_overwrite) if episode_overwrite else None)
audio_codec_suffix = muxed_audio_codecs.get(muxed_path)
if not no_folder and isinstance(title, (Episode, Song)):
final_dir /= title.get_filename(media_info, show_service=not no_source, folder=True)
final_dir /= title.get_filename(media_info, show_service=not no_source, folder=True,season_overwrite=int(season_overwrite) if season_overwrite else None)
final_dir.mkdir(parents=True, exist_ok=True)
final_path = final_dir / f"{final_filename}{muxed_path.suffix}"
template_type = (
@@ -2500,6 +2508,9 @@ class dl:
console.print(
Padding(f":tada: Title downloaded in [progress.elapsed]{title_dl_time}[/]!", (0, 5, 1, 5))
)
console.print(
Padding(f"File path - {final_path}", (0, 5, 1, 5))
)
# update cookies
cookie_file = self.get_cookie_path(self.service, self.profile)
@@ -2510,6 +2521,7 @@ class dl:
console.print(Padding(f"Processed all titles in [progress.elapsed]{dl_time}", (0, 5, 1, 5)))
def prepare_drm(
self,
drm: DRM_T,

View File

@@ -78,14 +78,25 @@ class Episode(Title):
self.year = year
self.description = description
def _build_template_context(self, media_info: MediaInfo, show_service: bool = True) -> dict:
def _build_template_context(self, media_info: MediaInfo, show_service: bool = True,season_overwrite=None,episode_overwrite=None) -> dict:
"""Build template context dictionary from MediaInfo."""
context = self._build_base_template_context(media_info, show_service)
context["title"] = self.title.replace("$", "S")
context["year"] = self.year or ""
context["season"] = f"S{self.season:02}"
context["episode"] = f"E{self.number:02}"
context["season_episode"] = f"S{self.season:02}E{self.number:02}"
if season_overwrite is not None:
season = season_overwrite
else:
season = self.season
if episode_overwrite is not None:
episode = episode_overwrite
else:
episode = self.number
context["season"] = f"S{season:02}"
context["episode"] = f"E{episode:02}"
context["season_episode"] = f"S{season:02}E{episode:02}"
context["episode_name"] = self.name or ""
return context
@@ -98,7 +109,7 @@ class Episode(Title):
name=self.name or "",
).strip()
def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str:
def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True,season_overwrite=None,episode_overwrite=None) -> str:
if folder:
series_template = config.output_template.get("series")
if series_template:
@@ -114,7 +125,7 @@ class Episode(Title):
formatter = TemplateFormatter(folder_template)
context = self._build_template_context(media_info, show_service)
context['season'] = f"S{self.season:02}"
context['season'] = f"S{self.season:02}" if not season_overwrite else f"S{season_overwrite:02}"
folder_name = formatter.format(context)
@@ -130,7 +141,7 @@ class Episode(Title):
return sanitize_filename(name, " ")
formatter = TemplateFormatter(config.output_template["series"])
context = self._build_template_context(media_info, show_service)
context = self._build_template_context(media_info, show_service,season_overwrite,episode_overwrite)
return formatter.format(context)