CC-3336: Refactor schedule API used by pypo

-refactored pypo-push
This commit is contained in:
Martin Konecny 2012-02-28 11:06:31 -05:00
parent e8f329aef1
commit 39fac2f88a
1 changed files with 55 additions and 74 deletions
python_apps/pypo

View File

@ -88,38 +88,35 @@ class PypoPush(Thread):
logger.debug("Doing callback to server to update 'played' status.") logger.debug("Doing callback to server to update 'played' status.")
self.api_client.notify_scheduled_item_start_playing(pkey, schedule) self.api_client.notify_scheduled_item_start_playing(pkey, schedule)
def push_to_liquidsoap(self, media_item): def push_to_liquidsoap(self, media_item):
try:
if media_item["starts"] == self.last_end_time: if media_item["starts"] == self.last_end_time:
""" """
this media item is attached to the end of the last this media item is attached to the end of the last
track, so let's push it now so that Liquidsoap can start playing track, so let's push it now so that Liquidsoap can start playing
it immediately after (and prepare crossfades if need be). it immediately after (and prepare crossfades if need be).
""" """
tn = telnetlib.Telnet(LS_HOST, LS_PORT) telnet_to_liquidsoap(media_item)
tn.write(str('queue.push %s\n' % media_item["annotation"].encode('utf-8')))
#TODO: vars.pypo_data
#TODO: vars.show_name
tn.write("exit\n")
self.last_end_time = media_item["end"] self.last_end_time = media_item["end"]
else: else:
""" """
this media item does not start right after a current playing track. this media item does not start right after a current playing track.
We need to sleep, and then wake up when this track starts. We need to sleep, and then wake up when this track starts.
""" """
sleep_until_start(media_item)
telnet_to_liquidsoap(media_item)
self.last_end_time = media_item["end"]
except Exception, e:
return False return False
def push_liquidsoap_old(self, pkey, schedule, playlists): return True
logger = logging.getLogger('push')
try: def sleep_until_start(media_item):
playlist = playlists[pkey] mi_start = media_item['start'][0:19]
plstart = schedule[pkey]['start'][0:19]
#strptime returns struct_time in local time #strptime returns struct_time in local time
epoch_start = calendar.timegm(time.strptime(plstart, '%Y-%m-%d-%H-%M-%S')) epoch_start = calendar.timegm(time.strptime(mi_start, '%Y-%m-%d-%H-%M-%S'))
#Return the time as a floating point number expressed in seconds since the epoch, in UTC. #Return the time as a floating point number expressed in seconds since the epoch, in UTC.
epoch_now = time.time() epoch_now = time.time()
@ -127,7 +124,7 @@ class PypoPush(Thread):
logger.debug("Epoch start: %s" % epoch_start) logger.debug("Epoch start: %s" % epoch_start)
logger.debug("Epoch now: %s" % epoch_now) logger.debug("Epoch now: %s" % epoch_now)
sleep_time = epoch_start - epoch_now; sleep_time = epoch_start - epoch_now
if sleep_time < 0: if sleep_time < 0:
sleep_time = 0 sleep_time = 0
@ -135,36 +132,20 @@ class PypoPush(Thread):
logger.debug('sleeping for %s s' % (sleep_time)) logger.debug('sleeping for %s s' % (sleep_time))
time.sleep(sleep_time) time.sleep(sleep_time)
def telnet_to_liquidsoap(media_item):
tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn = telnetlib.Telnet(LS_HOST, LS_PORT)
#skip the currently playing song if any. #tn.write(("vars.pypo_data %s\n"%liquidsoap_data["schedule_id"]).encode('utf-8'))
logger.debug("source.skip\n")
tn.write("source.skip\n")
# Get any extra information for liquidsoap (which will be sent back to us) annotation = media_item['annotation']
liquidsoap_data = self.api_client.get_liquidsoap_data(pkey, schedule) tn.write('queue.push %s\n' % annotation.encode('utf-8'))
#Sending schedule table row id string. show_name = media_item['show_name']
logger.debug("vars.pypo_data %s\n"%(liquidsoap_data["schedule_id"])) tn.write('vars.show_name %s\n' % show_name.encode('utf-8'))
tn.write(("vars.pypo_data %s\n"%liquidsoap_data["schedule_id"]).encode('utf-8'))
logger.debug('Preparing to push playlist %s' % pkey)
for item in playlist:
annotate = item['annotate']
tn.write(str('queue.push %s\n' % annotate.encode('utf-8')))
show_name = item['show_name']
tn.write(str('vars.show_name %s\n' % show_name.encode('utf-8')))
tn.write("exit\n") tn.write("exit\n")
logger.debug(tn.read_all()) logger.debug(tn.read_all())
status = 1
except Exception, e:
logger.error('%s', e)
status = 0
return status
def run(self): def run(self):
loops = 0 loops = 0
heartbeat_period = math.floor(30/PUSH_INTERVAL) heartbeat_period = math.floor(30/PUSH_INTERVAL)