From 52e7aeda4248c92cdeaed0fa86b4b15a64cdabf4 Mon Sep 17 00:00:00 2001 From: Justin Emter Date: Sat, 5 Aug 2017 14:16:18 -0700 Subject: [PATCH] Added logic to sleep / wake-up according to the 'schedule' lib memory schedule. TODO: clean up code / test. --- PseudoChannel.py | 75 +++++++++++++++++++++++++--- pseudo_schedule.xml | 1 - src/PseudoDailyScheduleController.py | 39 +++++++++++++++ 3 files changed, 107 insertions(+), 8 deletions(-) diff --git a/PseudoChannel.py b/PseudoChannel.py index 117d01a..dd8dfc1 100644 --- a/PseudoChannel.py +++ b/PseudoChannel.py @@ -26,9 +26,6 @@ import xml.etree.ElementTree as ET import schedule -from threading import Timer -import signal - from time import sleep import pseudo_config as config @@ -1063,14 +1060,76 @@ if __name__ == '__main__': """ - the_daily_schedule = pseudo_channel.db.get_daily_schedule() - daily_update_time = datetime.datetime.strptime( pseudo_channel.translate_time( pseudo_channel.DAILY_UPDATE_TIME ), pseudo_channel.APP_TIME_FORMAT_STR - ) + ) + + def job_that_executes_once(item, schedulelist): + + print "##### Readying media: '{}'".format(item[3]) + + next_start_time = datetime.datetime.strptime(item[8], "%I:%M:%S %p") + + now = datetime.datetime.now() + + now = now.replace(year=1900, month=1, day=1) + + now_for_update = now.replace(microsecond=0) + + + if now_for_update == time( + daily_update_time.hour, + daily_update_time.minute, + daily_update_time.second + ): + + if pseudo_channel.USING_GOOGLE_CALENDAR: + + pseudo_channel.update_schedule_from_google_calendar() + + the_daily_schedule = pseudo_channel.db.get_daily_schedule() + + else: + + pass + + pseudo_channel.generate_daily_schedule() + + the_daily_schedule = pseudo_channel.db.get_daily_schedule() + + """------------------""" + + time_diff = next_start_time - now + + if time_diff.total_seconds() > 0: + + + print "+++++ Sleeping for {} seconds before playing: '{}'".format(time_diff.total_seconds(), item[3]) + sleep(time_diff.total_seconds()) + + print "Woke up!" + + pseudo_channel.controller.play(item, schedulelist) + + return schedule.CancelJob + + def generate_memory_schedule(schedulelist): + + print "##### Generating Memory Schedule." + + for item in schedulelist: + + trans_time = datetime.datetime.strptime(item[8], "%I:%M:%S %p").strftime("%H:%M") + + schedule.every().day.at(trans_time).do(job_that_executes_once, item, schedulelist).tag() + + print "+++++ Done." + + + #the_daily_schedule = pseudo_channel.db.get_daily_schedule() def run_task(): @@ -1109,7 +1168,9 @@ if __name__ == '__main__': print '{}'.format(datetime.datetime.now(), end="\r") - schedule.every(1).seconds.do(run_task) + #schedule.every(1).seconds.do(run_task) + + generate_memory_schedule(pseudo_channel.db.get_daily_schedule()) try: diff --git a/pseudo_schedule.xml b/pseudo_schedule.xml index 9c0e60f..86f9fa3 100644 --- a/pseudo_schedule.xml +++ b/pseudo_schedule.xml @@ -11,7 +11,6 @@ - diff --git a/src/PseudoDailyScheduleController.py b/src/PseudoDailyScheduleController.py index e35890a..baa1154 100644 --- a/src/PseudoDailyScheduleController.py +++ b/src/PseudoDailyScheduleController.py @@ -570,6 +570,45 @@ class PseudoDailyScheduleController(): self.write_refresh_bool_to_file() break + + def play(self, row, datalist): + + print("Starting Media: " + row[3]) + print(row) + + timeB = datetime.strptime(row[8], '%I:%M:%S %p') + + self.play_media(row[11], row[6], row[3]) + + self.write_schedule_to_file( + self.get_html_from_daily_schedule( + timeB, + self.get_show_photo( + row[11], + row[6] if row[11] == "TV Shows" else row[3] + ), + datalist + ) + ) + + self.write_refresh_bool_to_file() + + """Generate / write XML to file + """ + self.write_xml_to_file( + self.get_xml_from_daily_schedule( + timeB, + self.get_show_photo( + row[11], + row[6] if row[11] == "TV Shows" else row[3] + ), + datalist + ) + ) + + self.my_logger.debug('Trying to play: ' + row[3]) + + ''' * * Check DB / current time. If that matches a scheduled shows startTime then trigger play via Plex API