Handle shows with more than one season correctly
This commit is contained in:
parent
6887c3ef89
commit
b5df984589
@ -24,6 +24,9 @@ class Show:
|
||||
# The release year of the show.
|
||||
year: int
|
||||
|
||||
# The season number, if specified
|
||||
season: int | None
|
||||
|
||||
# The base URL of the show.
|
||||
url: str
|
||||
|
||||
@ -33,8 +36,21 @@ def build_show_dir_name(name: str, year: int) -> str:
|
||||
return f"{name} ({year})"
|
||||
|
||||
|
||||
def build_episodes_path(
|
||||
name: str, year: int, season: int | None, storage_path: Path
|
||||
) -> Path:
|
||||
show_path = storage_path / build_show_dir_name(name, year)
|
||||
|
||||
if season is not None:
|
||||
return show_path / f"Season {season}"
|
||||
return show_path
|
||||
|
||||
|
||||
def get_episode_numbers(
|
||||
show_name: str, show_year: int, storage_path: Path
|
||||
show_name: str,
|
||||
show_year: int,
|
||||
show_season: int | None,
|
||||
storage_path: Path,
|
||||
) -> list[int]:
|
||||
"""Computes the episode numbers that are locally available.
|
||||
|
||||
@ -42,7 +58,7 @@ def get_episode_numbers(
|
||||
@show_year: The release year of the show.
|
||||
@storage_path: Path to where the show directories are.
|
||||
"""
|
||||
episodes_path = storage_path / build_show_dir_name(show_name, show_year)
|
||||
episodes_path = build_episodes_path(show_name, show_year, show_season, storage_path)
|
||||
if not episodes_path.exists():
|
||||
return []
|
||||
|
||||
@ -79,10 +95,15 @@ def main():
|
||||
storage_path = Path(config["general"]["path"])
|
||||
shows: list[Show] = []
|
||||
for show in config["shows"]:
|
||||
logging.info(f"Processing {show['name']}...")
|
||||
logging.info("Processing %s", show["name"])
|
||||
max_episodes = show["max_episodes"]
|
||||
local_episodes = get_episode_numbers(show["name"], show["year"], storage_path)
|
||||
logging.debug(f"=> {max(local_episodes)}/{max_episodes}")
|
||||
local_episodes = get_episode_numbers(
|
||||
show["name"],
|
||||
show["year"],
|
||||
show.get("season", None),
|
||||
storage_path,
|
||||
)
|
||||
logging.debug("=> %d/%d", max(local_episodes), max_episodes)
|
||||
if len(set(local_episodes)) != max_episodes:
|
||||
shows.append(
|
||||
Show(
|
||||
@ -90,6 +111,7 @@ def main():
|
||||
name=show["name"],
|
||||
year=show["year"],
|
||||
url=show["url"],
|
||||
season=show.get("season", None),
|
||||
),
|
||||
)
|
||||
|
||||
@ -102,7 +124,7 @@ def main():
|
||||
cookies = {}
|
||||
cookies_path = Path(config["general"]["cookie_path"])
|
||||
if cookies_path.exists():
|
||||
with open(cookies_path, "r") as f:
|
||||
with open(cookies_path, "r", encoding="utf8") as f:
|
||||
cookies = json.load(f)
|
||||
|
||||
# Request a new session, if required
|
||||
@ -112,14 +134,19 @@ def main():
|
||||
config["user"]["email"],
|
||||
config["user"]["password"],
|
||||
)
|
||||
with open(cookies_path, "w") as f:
|
||||
with open(cookies_path, "w", encoding="utf8") as f:
|
||||
f.write(json.dumps(cookies))
|
||||
logging.info("Done")
|
||||
|
||||
# Iterate over the shows to process and download the new episodes
|
||||
for show in shows:
|
||||
logging.debug("Processing %s", show.name)
|
||||
episodes_path = storage_path / build_show_dir_name(show.name, show.year)
|
||||
episodes_path = build_episodes_path(
|
||||
show.name,
|
||||
show.year,
|
||||
show.season,
|
||||
storage_path,
|
||||
)
|
||||
if not episodes_path.exists():
|
||||
logging.info(
|
||||
"Episodes directory of %s does not exist. Creating...", show.name
|
||||
@ -135,7 +162,7 @@ def main():
|
||||
|
||||
for episode in episodes_remote:
|
||||
if episode.episode_nr in episodes_to_download:
|
||||
logging.info(f"Downloading {episode.name} ({episode.episode_nr})...")
|
||||
logging.info("Downloading %s (%d)", episode.name, episode.episode_nr)
|
||||
downloads = episode.get_downloads(
|
||||
cookies=cookies,
|
||||
filter_quality=akibapass_downloader.episode.Quality.UHD_1440P,
|
||||
|
@ -17,8 +17,5 @@ async def send_notification(
|
||||
to=aioxmpp.JID.fromstr(to),
|
||||
type_=aioxmpp.MessageType.CHAT,
|
||||
)
|
||||
msg.body[None] = "Episode {} of {} is now downloaded and available!".format(
|
||||
episode,
|
||||
show_name,
|
||||
)
|
||||
msg.body[None] = f"Episode {episode} of {show_name} is now downloaded and available!"
|
||||
await stream.send(msg)
|
||||
|
Loading…
Reference in New Issue
Block a user