Added logic to sleep / wake-up according to the 'schedule' lib memory schedule. TODO: clean up code / test.

This commit is contained in:
Justin Emter
2017-08-05 14:16:18 -07:00
parent f3fee882df
commit 52e7aeda42
3 changed files with 107 additions and 8 deletions

View File

@@ -26,9 +26,6 @@ import xml.etree.ElementTree as ET
import schedule import schedule
from threading import Timer
import signal
from time import sleep from time import sleep
import pseudo_config as config import pseudo_config as config
@@ -1063,8 +1060,6 @@ if __name__ == '__main__':
""" """
the_daily_schedule = pseudo_channel.db.get_daily_schedule()
daily_update_time = datetime.datetime.strptime( daily_update_time = datetime.datetime.strptime(
pseudo_channel.translate_time( pseudo_channel.translate_time(
pseudo_channel.DAILY_UPDATE_TIME pseudo_channel.DAILY_UPDATE_TIME
@@ -1072,6 +1067,70 @@ if __name__ == '__main__':
pseudo_channel.APP_TIME_FORMAT_STR 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(): def run_task():
global the_daily_schedule global the_daily_schedule
@@ -1109,7 +1168,9 @@ if __name__ == '__main__':
print '{}'.format(datetime.datetime.now(), end="\r") 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: try:

View File

@@ -11,7 +11,6 @@
<wednesdays></wednesdays> <wednesdays></wednesdays>
<thursdays></thursdays> <thursdays></thursdays>
<fridays> <fridays>
<time title="Looney Tunes" type="series" strict-time="true" time-shift="1" overlap-max="">12:30 AM</time>
</fridays> </fridays>
<saturdays></saturdays> <saturdays></saturdays>
<sundays></sundays> <sundays></sundays>

View File

@@ -570,6 +570,45 @@ class PseudoDailyScheduleController():
self.write_refresh_bool_to_file() self.write_refresh_bool_to_file()
break 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 * Check DB / current time. If that matches a scheduled shows startTime then trigger play via Plex API