From 54f7f6535ff914d54157cb2e63cf24eb9e659070 Mon Sep 17 00:00:00 2001 From: Justin Emter Date: Sat, 22 Jul 2017 12:54:37 -0700 Subject: [PATCH] Fixed the daily_schedule loop bug & added support for 24h time entries. --- PseudoChannel.py | 145 ++++++++++++++++++++++++++------------------ pseudo_schedule.xml | 8 +-- 2 files changed, 89 insertions(+), 64 deletions(-) diff --git a/PseudoChannel.py b/PseudoChannel.py index f169da4..eb362fa 100644 --- a/PseudoChannel.py +++ b/PseudoChannel.py @@ -210,7 +210,7 @@ class PseudoChannel(): title = time.attrib['title'] - natural_start_time = time.text + natural_start_time = self.translate_time(time.text) natural_end_time = 0 @@ -224,7 +224,7 @@ class PseudoChannel(): overlap_max = time.attrib['overlap-max'] - start_time_unix = datetime.datetime.strptime(time.text, '%I:%M %p') + start_time_unix = self.translate_time(time.text) print "Adding: ", time.tag, section, time.text, time.attrib['title'] @@ -274,6 +274,25 @@ class PseudoChannel(): * Returns time difference in minutes * ''' + + def translate_time(self, timestr): + + try: + + return datetime.datetime.strptime(timestr, "%I:%M %p").strftime("%-I:%M %p") + + except ValueError as e: + + pass + + try: + + return datetime.datetime.strptime(timestr, "%H:%M").strftime("%-I:%M %p") + + except ValueError as e: + + pass + def time_diff(self, time1,time2): ''' * @@ -361,7 +380,8 @@ class PseudoChannel(): ''' * - * If there this value is configured, then the timeGap var in config will determine the next increment. If it is set to "15", then the show will will bump up to the next 15 minute interval past the hour. + * If there this value is configured, then the timeGap var in config will determine the next increment. + * If it is set to "15", then the show will will bump up to the next 15 minute interval past the hour. * ''' timeset=[datetime.time(h,m).strftime("%H:%M") for h,m in itertools.product(xrange(0,24),xrange(0,60,int(self.TIME_GAP)))] @@ -555,65 +575,70 @@ class PseudoChannel(): pass - """If we reached the end of the schedule we are ready to kick off the daily_schedule - - """ - if schedule_advance_watcher >= len(schedule): - - previous_episode = None - - self.db.remove_all_daily_scheduled_items() - - for entry in self.MEDIA: - - #print entry.natural_end_time - - if previous_episode != None: - - natural_start_time = datetime.datetime.strptime(entry.natural_start_time, '%I:%M %p') - - natural_end_time = entry.natural_end_time - - if entry.is_strict_time.lower() == "true": - - print "++++ Strict-time: {}".format(entry.title) - - entry.end_time = self.get_end_time_from_duration(entry.start_time, entry.duration) - - self.db.add_media_to_daily_schedule(entry) - - previous_episode = entry - - else: - - print "++++ NOT strict-time: {}".format(entry.title) - - new_starttime = self.calculate_start_time( - previous_episode.end_time, - entry.natural_start_time, - previous_episode.time_shift, - previous_episode.overlap_max - ) - - print "++++ New start time:", new_starttime - - entry.start_time = datetime.datetime.strptime(new_starttime, '%I:%M %p').strftime('%-I:%M %p') - - entry.end_time = self.get_end_time_from_duration(entry.start_time, entry.duration) - - self.db.add_media_to_daily_schedule(entry) - - previous_episode = entry - - else: - - self.db.add_media_to_daily_schedule(entry) - - previous_episode = entry - except TypeError as e: - pass + raise TypeError('Not sure why but got a TypeError') + + """If we reached the end of the scheduled items for today, add them to the daily schedule + + """ + if schedule_advance_watcher >= len(schedule): + + print "+++++ Finished processing time entries, recreating daily_schedule" + + previous_episode = None + + self.db.remove_all_daily_scheduled_items() + + for entry in self.MEDIA: + + #print entry.natural_end_time + + if previous_episode != None: + + natural_start_time = datetime.datetime.strptime(entry.natural_start_time, '%I:%M %p') + + natural_end_time = entry.natural_end_time + + if entry.is_strict_time.lower() == "true": + + print "++++ Strict-time: {}".format(entry.title) + + entry.end_time = self.get_end_time_from_duration( + self.translate_time(entry.start_time), + entry.duration + ) + + self.db.add_media_to_daily_schedule(entry) + + previous_episode = entry + + else: + + print "++++ NOT strict-time: {}".format(str(entry.title).encode(sys.stdout.encoding, errors='replace')) + + new_starttime = self.calculate_start_time( + previous_episode.end_time, + entry.natural_start_time, + previous_episode.time_shift, + previous_episode.overlap_max + ) + + print "++++ New start time:", new_starttime + + entry.start_time = datetime.datetime.strptime(new_starttime, '%I:%M %p').strftime('%-I:%M %p') + + entry.end_time = self.get_end_time_from_duration(entry.start_time, entry.duration) + + self.db.add_media_to_daily_schedule(entry) + + previous_episode = entry + + else: + + self.db.add_media_to_daily_schedule(entry) + + previous_episode = entry if __name__ == '__main__': diff --git a/pseudo_schedule.xml b/pseudo_schedule.xml index 6c16830..567bc50 100644 --- a/pseudo_schedule.xml +++ b/pseudo_schedule.xml @@ -26,11 +26,11 @@ - - - + + + - +