mirror of
https://github.com/FakeTV/pseudo-channel.git
synced 2025-12-18 09:13:25 +00:00
Fixed the resource hogging issue. Also added custom daily update var to config.
This commit is contained in:
109
PseudoChannel.py
109
PseudoChannel.py
@@ -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"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,3 +61,5 @@ plexLibraries = {
|
|||||||
useGoogleCalendar = True
|
useGoogleCalendar = True
|
||||||
|
|
||||||
useCommercialInjection = True
|
useCommercialInjection = True
|
||||||
|
|
||||||
|
dailyUpdateTime = "12:00 AM"
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user