Fixed the resource hogging issue. Also added custom daily update var to config.

This commit is contained in:
Justin Emter
2017-07-27 10:50:03 -07:00
parent 7d3028e6fa
commit 99e4b9838f
4 changed files with 97 additions and 22 deletions

View File

@@ -23,6 +23,11 @@ import textwrap
from xml.dom import minidom from xml.dom import minidom
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import sched
from threading import Timer
import signal
from time import sleep from time import sleep
import pseudo_config as config import pseudo_config as config
@@ -39,6 +44,10 @@ class PseudoChannel():
USING_COMMERCIAL_INJECTION = config.useCommercialInjection USING_COMMERCIAL_INJECTION = config.useCommercialInjection
DAILY_UPDATE_TIME = config.dailyUpdateTime
APP_TIME_FORMAT_STR = '%I:%M:%S %p'
def __init__(self): def __init__(self):
self.db = PseudoChannelDatabase("pseudo-channel.db") self.db = PseudoChannelDatabase("pseudo-channel.db")
@@ -246,7 +255,7 @@ class PseudoChannel():
title = titlelist[1] title = titlelist[1]
# s.strftime('%I:%M'), event["summary"] # s.strftime('%I:%M'), event["summary"]
natural_start_time = self.translate_time(s.strftime('%I:%M:%S %p')) natural_start_time = self.translate_time(s.strftime(self.APP_TIME_FORMAT_STR))
natural_end_time = 0 natural_end_time = 0
@@ -401,7 +410,7 @@ class PseudoChannel():
try: try:
return datetime.datetime.strptime(timestr, '%I:%M %p').strftime('%I:%M:%S %p') return datetime.datetime.strptime(timestr, '%I:%M %p').strftime(self.APP_TIME_FORMAT_STR)
except ValueError as e: except ValueError as e:
@@ -409,7 +418,7 @@ class PseudoChannel():
try: try:
return datetime.datetime.strptime(timestr, '%I:%M:%S %p').strftime('%I:%M:%S %p') return datetime.datetime.strptime(timestr, '%I:%M:%S %p').strftime(self.APP_TIME_FORMAT_STR)
except ValueError as e: except ValueError as e:
@@ -417,7 +426,7 @@ class PseudoChannel():
try: try:
return datetime.datetime.strptime(timestr, '%H:%M').strftime('%I:%M:%S %p') return datetime.datetime.strptime(timestr, '%H:%M').strftime(self.APP_TIME_FORMAT_STR)
except ValueError as e: except ValueError as e:
@@ -459,7 +468,7 @@ class PseudoChannel():
time1 = prevEndTime.strftime('%I:%M:%S %p') time1 = prevEndTime.strftime('%I:%M:%S %p')
timeB = datetime.datetime.strptime(intendedStartTime, '%I:%M:%S %p').strftime('%I:%M:%S %p') timeB = datetime.datetime.strptime(intendedStartTime, '%I:%M:%S %p').strftime(self.APP_TIME_FORMAT_STR)
print "++++ Previous End Time: ", time1, "Intended start time: ", timeB print "++++ Previous End Time: ", time1, "Intended start time: ", timeB
@@ -524,7 +533,7 @@ class PseudoChannel():
theTimeSetInterval = datetime.datetime.strptime(time, '%H:%M') theTimeSetInterval = datetime.datetime.strptime(time, '%H:%M')
tempTimeTwoStr = datetime.datetime.strptime(time1, '%I:%M:%S %p').strftime('%H:%M') tempTimeTwoStr = datetime.datetime.strptime(time1, self.APP_TIME_FORMAT_STR).strftime('%H:%M')
formatted_time_two = datetime.datetime.strptime(tempTimeTwoStr, '%H:%M') formatted_time_two = datetime.datetime.strptime(tempTimeTwoStr, '%H:%M')
@@ -731,7 +740,7 @@ class PseudoChannel():
if previous_episode != None: if previous_episode != None:
natural_start_time = datetime.datetime.strptime(entry.natural_start_time, '%I:%M:%S %p') natural_start_time = datetime.datetime.strptime(entry.natural_start_time, self.APP_TIME_FORMAT_STR)
natural_end_time = entry.natural_end_time natural_end_time = entry.natural_end_time
@@ -774,7 +783,7 @@ class PseudoChannel():
print "++++ New start time:", new_starttime print "++++ New start time:", new_starttime
entry.start_time = datetime.datetime.strptime(new_starttime, '%I:%M:%S %p').strftime('%I:%M:%S %p') entry.start_time = datetime.datetime.strptime(new_starttime, self.APP_TIME_FORMAT_STR).strftime('%I:%M:%S %p')
entry.end_time = self.get_end_time_from_duration(entry.start_time, entry.duration) entry.end_time = self.get_end_time_from_duration(entry.start_time, entry.duration)
@@ -812,6 +821,12 @@ class PseudoChannel():
print commercials_to_inject print commercials_to_inject
def run(self):
"""print datetime.datetime.now()
threading.Timer(1, self.run()).start()"""
pass
def make_xml_schedule(self): def make_xml_schedule(self):
self.controller.make_xml_schedule(self.db.get_daily_schedule()) self.controller.make_xml_schedule(self.db.get_daily_schedule())
@@ -1010,17 +1025,73 @@ if __name__ == '__main__':
if args.run: if args.run:
try: print banner
print "+++++ To run this in the background:"
print banner print "+++++", "screen -d -m bash -c 'python PseudoChannel.py -r; exec sh'"
print "+++++ To run this in the background:"
print "+++++", "screen -d -m bash -c 'python PseudoChannel.py -r; exec sh'" """Every minute on the minute check the DB startTimes of all media to
determine whether or not to play. Also, check the now_time to
see if it's midnight (or 23.59), if so then generate a new daily_schedule
"""
s = sched.scheduler(time, sleep)
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)
try:
def run_task():
now = datetime.datetime.now()
now_time = now.time().replace(microsecond=0)
#print time(11,59,00), now_time
if now_time == 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()
else:
pass
pseudo_channel.generate_daily_schedule()
pseudo_channel.make_xml_schedule()
pseudo_channel.controller.tv_controller(the_daily_schedule)
t = Timer(1, run_task, ())
t.start()
print '{}'.format(datetime.datetime.now(), end="\r")
except KeyboardInterrupt:
print('Manual break by user')
run_task()
"""try:
"""Every minute on the minute check the DB startTimes of all media to
determine whether or not to play. Also, check the now_time to
see if it's midnight (or 23.59), if so then generate a new daily_schedule
"""
while True: while True:
now = datetime.datetime.now() now = datetime.datetime.now()
@@ -1057,7 +1128,7 @@ if __name__ == '__main__':
pseudo_channel.exit_app() pseudo_channel.exit_app()
del pseudo_channel del pseudo_channel"""

View File

@@ -61,3 +61,5 @@ plexLibraries = {
useGoogleCalendar = True useGoogleCalendar = True
useCommercialInjection = True useCommercialInjection = True
dailyUpdateTime = "12:00 AM"

View File

@@ -88,7 +88,7 @@ class PseudoChannelCommercial():
def get_commercials_to_place_between_media(self, last_ep, now_ep): def get_commercials_to_place_between_media(self, last_ep, now_ep):
print last_ep.end_time, now_ep.start_time #print last_ep.end_time, now_ep.start_time
prev_item_end_time = datetime.strptime(last_ep.end_time.strftime('%Y-%m-%d %H:%M:%S.%f'), '%Y-%m-%d %H:%M:%S.%f') prev_item_end_time = datetime.strptime(last_ep.end_time.strftime('%Y-%m-%d %H:%M:%S.%f'), '%Y-%m-%d %H:%M:%S.%f')
@@ -110,7 +110,7 @@ class PseudoChannelCommercial():
new_commercial_start_time = prev_item_end_time new_commercial_start_time = prev_item_end_time
print "here", time_diff.seconds #print "here", time_diff.seconds
while curr_item_start_time > new_commercial_start_time and (count) < len(self.commercials)*100: while curr_item_start_time > new_commercial_start_time and (count) < len(self.commercials)*100:

View File

@@ -10,7 +10,7 @@ class PseudoChannelDatabase():
self.db = db self.db = db
self.conn = sqlite3.connect(self.db) self.conn = sqlite3.connect(self.db, check_same_thread=False)
self.cursor = self.conn.cursor() self.cursor = self.conn.cursor()
@@ -299,6 +299,8 @@ class PseudoChannelDatabase():
datalist = list(self.cursor.fetchall()) datalist = list(self.cursor.fetchall())
print "##### Getting Daily Schedule from DB."
return datalist return datalist
def get_movie(self, title): def get_movie(self, title):