2018-10-31 19:34:40 +00:00
|
|
|
# coding=utf-8
|
2018-08-16 02:01:49 +00:00
|
|
|
|
2019-08-22 18:58:08 +00:00
|
|
|
from get_episodes import sync_episodes, update_all_episodes
|
|
|
|
from get_movies import update_movies, update_all_movies
|
2018-12-15 00:36:28 +00:00
|
|
|
from get_series import update_series
|
|
|
|
from config import settings
|
2019-03-17 14:29:38 +00:00
|
|
|
from get_subtitle import wanted_search_missing_subtitles, upgrade_subtitles
|
2019-07-14 22:14:45 +00:00
|
|
|
from utils import cache_maintenance
|
2018-10-31 19:34:40 +00:00
|
|
|
from get_args import args
|
2019-01-02 19:19:31 +00:00
|
|
|
if not args.no_update:
|
2018-11-02 19:08:07 +00:00
|
|
|
from check_update import check_and_apply_update, check_releases
|
|
|
|
else:
|
|
|
|
from check_update import check_releases
|
2017-10-23 03:00:11 +00:00
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
2018-09-17 00:27:00 +00:00
|
|
|
from apscheduler.triggers.interval import IntervalTrigger
|
|
|
|
from apscheduler.triggers.cron import CronTrigger
|
2019-02-23 20:41:42 +00:00
|
|
|
from apscheduler.triggers.date import DateTrigger
|
2019-02-24 16:42:33 +00:00
|
|
|
from apscheduler.events import EVENT_JOB_SUBMITTED, EVENT_JOB_EXECUTED
|
2017-11-16 02:07:21 +00:00
|
|
|
from datetime import datetime
|
2018-03-13 23:30:29 +00:00
|
|
|
import pytz
|
2018-03-10 04:17:51 +00:00
|
|
|
from tzlocal import get_localzone
|
|
|
|
|
2018-04-09 03:45:53 +00:00
|
|
|
|
|
|
|
def sonarr_full_update():
|
2018-12-27 19:19:59 +00:00
|
|
|
if settings.general.getboolean('use_sonarr'):
|
2018-12-15 00:36:28 +00:00
|
|
|
full_update = settings.sonarr.full_update
|
2018-09-25 11:58:23 +00:00
|
|
|
if full_update == "Daily":
|
2019-09-11 10:50:33 +00:00
|
|
|
scheduler.add_job(update_all_episodes, CronTrigger(hour=settings.sonarr.full_update_hour), max_instances=1, coalesce=True,
|
2018-10-31 19:34:40 +00:00
|
|
|
misfire_grace_time=15, id='update_all_episodes',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update all Episode Subtitles from disk', replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
elif full_update == "Weekly":
|
2019-09-11 10:50:33 +00:00
|
|
|
scheduler.add_job(update_all_episodes, CronTrigger(day_of_week=settings.sonarr.full_update_day, hour=settings.sonarr.full_update_hour), max_instances=1,
|
2018-10-31 19:34:40 +00:00
|
|
|
coalesce=True,
|
|
|
|
misfire_grace_time=15, id='update_all_episodes',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update all Episode Subtitles from disk', replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
elif full_update == "Manually":
|
2019-03-26 21:34:29 +00:00
|
|
|
scheduler.add_job(update_all_episodes, CronTrigger(year='2100'), max_instances=1, coalesce=True,
|
2018-10-31 19:34:40 +00:00
|
|
|
misfire_grace_time=15, id='update_all_episodes',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update all Episode Subtitles from disk', replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
|
2018-05-27 03:01:57 +00:00
|
|
|
|
|
|
|
def radarr_full_update():
|
2018-12-27 19:19:59 +00:00
|
|
|
if settings.general.getboolean('use_radarr'):
|
2018-12-15 00:36:28 +00:00
|
|
|
full_update = settings.radarr.full_update
|
2018-09-25 11:58:23 +00:00
|
|
|
if full_update == "Daily":
|
2019-09-11 10:50:33 +00:00
|
|
|
scheduler.add_job(update_all_movies, CronTrigger(hour=settings.radarr.full_update_hour), max_instances=1, coalesce=True,
|
2018-10-31 19:34:40 +00:00
|
|
|
misfire_grace_time=15,
|
2019-09-17 13:36:50 +00:00
|
|
|
id='update_all_movies', name='Update all Movie Subtitles from disk',
|
2018-10-31 19:34:40 +00:00
|
|
|
replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
elif full_update == "Weekly":
|
2019-09-11 10:50:33 +00:00
|
|
|
scheduler.add_job(update_all_movies, CronTrigger(day_of_week=settings.radarr.full_update_day, hour=settings.radarr.full_update_hour), max_instances=1, coalesce=True,
|
2018-10-31 19:34:40 +00:00
|
|
|
misfire_grace_time=15, id='update_all_movies',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update all Movie Subtitles from disk',
|
2018-10-31 19:34:40 +00:00
|
|
|
replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
elif full_update == "Manually":
|
2019-09-11 10:50:33 +00:00
|
|
|
scheduler.add_job(update_all_movies, CronTrigger(year='2100'), max_instances=1, coalesce=True,
|
2018-10-31 19:34:40 +00:00
|
|
|
misfire_grace_time=15, id='update_all_movies',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update all Movie Subtitles from disk',
|
2018-10-31 19:34:40 +00:00
|
|
|
replace_existing=True)
|
2018-09-25 11:58:23 +00:00
|
|
|
|
2018-04-09 03:45:53 +00:00
|
|
|
|
|
|
|
def execute_now(taskid):
|
2018-05-27 03:01:57 +00:00
|
|
|
scheduler.modify_job(taskid, next_run_time=datetime.now())
|
2018-04-09 03:45:53 +00:00
|
|
|
|
|
|
|
|
2018-03-10 04:17:51 +00:00
|
|
|
if str(get_localzone()) == "local":
|
2018-03-13 23:30:29 +00:00
|
|
|
scheduler = BackgroundScheduler(timezone=pytz.timezone('UTC'))
|
2018-03-10 04:17:51 +00:00
|
|
|
else:
|
|
|
|
scheduler = BackgroundScheduler()
|
2017-10-16 23:27:19 +00:00
|
|
|
|
2019-02-24 16:42:33 +00:00
|
|
|
global running_tasks
|
|
|
|
running_tasks = []
|
|
|
|
|
|
|
|
|
|
|
|
def task_listener(event):
|
|
|
|
if event.job_id in running_tasks:
|
|
|
|
running_tasks.remove(event.job_id)
|
|
|
|
else:
|
|
|
|
running_tasks.append(event.job_id)
|
|
|
|
|
|
|
|
|
|
|
|
scheduler.add_listener(task_listener, EVENT_JOB_SUBMITTED | EVENT_JOB_EXECUTED)
|
|
|
|
|
2019-06-11 18:45:48 +00:00
|
|
|
|
2019-03-20 23:50:26 +00:00
|
|
|
def schedule_update_job():
|
|
|
|
if not args.no_update:
|
|
|
|
if settings.general.getboolean('auto_update'):
|
2019-04-03 17:08:43 +00:00
|
|
|
scheduler.add_job(check_and_apply_update, IntervalTrigger(hours=6), max_instances=1, coalesce=True,
|
2019-06-11 18:45:48 +00:00
|
|
|
misfire_grace_time=15, id='update_bazarr',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update Bazarr from source on Github' if not args.release_update else 'Update Bazarr from release on Github',
|
2019-06-11 18:45:48 +00:00
|
|
|
replace_existing=True)
|
2019-03-20 23:50:26 +00:00
|
|
|
else:
|
2019-04-03 17:08:43 +00:00
|
|
|
scheduler.add_job(check_and_apply_update, CronTrigger(year='2100'), hour=4, id='update_bazarr',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Update Bazarr from source on Github' if not args.release_update else 'Update Bazarr from release on Github',
|
2019-06-11 18:45:48 +00:00
|
|
|
replace_existing=True)
|
2019-03-20 23:50:26 +00:00
|
|
|
scheduler.add_job(check_releases, IntervalTrigger(hours=6), max_instances=1, coalesce=True,
|
2019-09-17 13:36:50 +00:00
|
|
|
misfire_grace_time=15, id='update_release', name='Update Release Info',
|
2019-06-11 18:45:48 +00:00
|
|
|
replace_existing=True)
|
|
|
|
|
2018-08-16 02:01:49 +00:00
|
|
|
else:
|
2019-06-11 18:45:48 +00:00
|
|
|
scheduler.add_job(check_releases, IntervalTrigger(hours=6), max_instances=1, coalesce=True,
|
|
|
|
misfire_grace_time=15,
|
2019-09-17 13:36:50 +00:00
|
|
|
id='update_release', name='Update Release Info', replace_existing=True)
|
2019-03-13 22:02:37 +00:00
|
|
|
|
2018-05-27 03:01:57 +00:00
|
|
|
|
2018-12-27 19:19:59 +00:00
|
|
|
if settings.general.getboolean('use_sonarr'):
|
2018-10-31 19:34:40 +00:00
|
|
|
scheduler.add_job(update_series, IntervalTrigger(minutes=1), max_instances=1, coalesce=True, misfire_grace_time=15,
|
2019-09-17 13:36:50 +00:00
|
|
|
id='update_series', name='Update Series list from Sonarr')
|
2018-10-31 19:34:40 +00:00
|
|
|
scheduler.add_job(sync_episodes, IntervalTrigger(minutes=5), max_instances=1, coalesce=True, misfire_grace_time=15,
|
|
|
|
id='sync_episodes', name='Sync episodes with Sonarr')
|
2018-05-27 03:01:57 +00:00
|
|
|
|
2018-12-27 19:19:59 +00:00
|
|
|
if settings.general.getboolean('use_radarr'):
|
2018-10-31 19:34:40 +00:00
|
|
|
scheduler.add_job(update_movies, IntervalTrigger(minutes=5), max_instances=1, coalesce=True, misfire_grace_time=15,
|
2019-09-17 13:36:50 +00:00
|
|
|
id='update_movies', name='Update Movie list from Radarr')
|
2018-05-27 03:01:57 +00:00
|
|
|
|
2019-09-11 10:50:33 +00:00
|
|
|
def schedule_wanted_search():
|
|
|
|
if settings.general.getboolean('use_sonarr') or settings.general.getboolean('use_radarr'):
|
|
|
|
scheduler.add_job(wanted_search_missing_subtitles,
|
|
|
|
IntervalTrigger(hours=int(settings.general.wanted_search_frequency)), max_instances=1,
|
|
|
|
coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Search for wanted Subtitles', replace_existing=True)
|
2018-05-27 03:01:57 +00:00
|
|
|
|
2019-09-11 10:50:33 +00:00
|
|
|
|
|
|
|
def schedule_upgrade_subs():
|
|
|
|
if settings.general.getboolean('upgrade_subs') and (settings.general.getboolean('use_sonarr') or
|
|
|
|
settings.general.getboolean('use_radarr')):
|
|
|
|
scheduler.add_job(upgrade_subtitles, IntervalTrigger(hours=int(settings.general.upgrade_frequency)),
|
|
|
|
max_instances=1, coalesce=True, misfire_grace_time=15, id='upgrade_subtitles',
|
2019-09-17 13:36:50 +00:00
|
|
|
name='Upgrade previously downloaded Subtitles', replace_existing=True)
|
2019-03-17 14:29:38 +00:00
|
|
|
|
2019-07-14 22:14:45 +00:00
|
|
|
scheduler.add_job(cache_maintenance, IntervalTrigger(hours=24), max_instances=1, coalesce=True,
|
|
|
|
misfire_grace_time=15, id='cache_cleanup', name='Cache maintenance')
|
|
|
|
|
2019-03-20 23:50:26 +00:00
|
|
|
schedule_update_job()
|
2018-05-30 00:38:52 +00:00
|
|
|
sonarr_full_update()
|
|
|
|
radarr_full_update()
|
2019-09-11 10:50:33 +00:00
|
|
|
schedule_wanted_search()
|
|
|
|
schedule_upgrade_subs()
|
2018-09-17 17:56:00 +00:00
|
|
|
scheduler.start()
|
2018-10-16 20:00:55 +00:00
|
|
|
|
2018-10-31 19:34:40 +00:00
|
|
|
|
2019-02-23 20:41:42 +00:00
|
|
|
def add_job(job, name=None, max_instances=1, coalesce=True, args=None):
|
|
|
|
scheduler.add_job(job, DateTrigger(run_date=datetime.now()), name=name, id=name, max_instances=max_instances,
|
|
|
|
coalesce=coalesce, args=args)
|
|
|
|
|
|
|
|
|
2018-10-16 20:00:55 +00:00
|
|
|
def shutdown_scheduler():
|
2018-10-31 19:34:40 +00:00
|
|
|
scheduler.shutdown(wait=True)
|