64 lines
2.1 KiB
Python
Executable File
64 lines
2.1 KiB
Python
Executable File
#!/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")
|
|
|