#!/usr/bin/env python3 from beacon_snatch import BeaconAuthentication from pyvirtualdisplay import Display import sys from autosnatch.logger import getLogger, getLogLevel from autosnatch import tools from autosnatch.config import Config logger = getLogger(__name__) logger.setLevel(Config.LOG_LEVEL) def main(log_level, args): logger.debug(f"Passed args: {', '.join(args)}") if len(args)>2: logger.info(f"Ignoring extra args: {', '.join(args[1:])}") if len(args)<=0: logger.error("Missing series.") return series_id = args[0] series_title = tools.seriesTitle(series_id) if series_id not in Config.SUPPORTED_SERIES: logger.error(f"Series type '{series_id}' not supported. Must be one of: {', '.join(Config.SUPPORTED_SERIES)}") return if len(args)<2: logger.error("Missing episode number (either a number or 'latest').") return if args[1] != "latest" and not args[1].isdigit(): logger.error("Invalid episode number. Must either be a number or 'latest'.") return desired_episode = args[1] if desired_episode == "latest": logger.info(f"Target: Latest episode of {series_title}") if desired_episode.isdigit(): logger.info(f"Target: Episode #{desired_episode} of {series_title}") logger.info("Authenticating to Beacon via beacon-snatch...") auth = BeaconAuthentication(email=Config.BEACON_EMAIL, password=Config.BEACON_PASSWORD) auth.authenticate() episode = tools.grabEpisodeInfo(auth, series_id, desired_episode) if not episode: logger.error(f"Cannot find episode #{desired_episode} of {series_title}.") return tools.downloadEpisode(auth, episode) logger.info(f"Successfully downloaded video, subs, and thumb for episode #{episode['number']} of {series_title}: \"{episode['title']}\"") logger.info("All done. Stopping virtual display...") if __name__=="__main__": display = Display(visible=0, size=(1024, 768)) display.start() try: main(getLogLevel(), sys.argv[1:]) finally: display.stop() logger.info("Virtual display stopped. Mission success o7")