CC-4321: NowPlaying: Cancelling Webstream has no effect and results in OnAir being grayed out
-fixed
This commit is contained in:
parent
79b6d13c16
commit
c043053407
3 changed files with 43 additions and 32 deletions
|
@ -81,27 +81,29 @@ class PypoPush(Thread):
|
|||
chains.remove(original_chain)
|
||||
except ValueError, e:
|
||||
self.logger.error(str(e))
|
||||
if len(liquidsoap_queue_approx) == 0 and current_event_chain[0]['type'] == 'file':
|
||||
#Something is scheduled but Liquidsoap is not playing anything!
|
||||
#Need to schedule it immediately..this might happen if Liquidsoap crashed.
|
||||
self.modify_cue_point(current_event_chain[0])
|
||||
next_media_item_chain = current_event_chain
|
||||
time_until_next_play = 0
|
||||
#sleep for 0.2 seconds to give pypo-file time to copy.
|
||||
time.sleep(0.2)
|
||||
continue
|
||||
if not self.current_stream_info and current_event_chain[0]['type'] == 'stream':
|
||||
#a stream is schedule but Liquidsoap is not playing it. Need to start it.
|
||||
next_media_item_chain = current_event_chain
|
||||
time_until_next_play = 0
|
||||
continue
|
||||
|
||||
if len(liquidsoap_queue_approx) == 0 and not self.current_stream_info:
|
||||
#Nothing is currently being playing by Liquidsoap
|
||||
if current_event_chain[0]['type'] == 'file':
|
||||
#Something is scheduled but Liquidsoap is not playing anything!
|
||||
#Need to schedule it immediately..this might happen if Liquidsoap crashed.
|
||||
self.modify_cue_point(current_event_chain[0])
|
||||
next_media_item_chain = current_event_chain
|
||||
time_until_next_play = 0
|
||||
#sleep for 0.2 seconds to give pypo-file time to copy.
|
||||
time.sleep(0.2)
|
||||
continue
|
||||
if current_event_chain[0]['type'] == 'stream':
|
||||
#a stream is schedule but Liquidsoap is not playing it. Need to start it.
|
||||
next_media_item_chain = current_event_chain
|
||||
time_until_next_play = 0
|
||||
continue
|
||||
|
||||
#At this point we know that Liquidsoap is playing something, and that something
|
||||
#is scheduled. We need to verify whether the schedule we just received matches
|
||||
#what Liquidsoap is playing, and if not, correct it.
|
||||
media_chain = filter(lambda item: (item["type"] == "file"), current_event_chain)
|
||||
stream_chain = filter(lambda item: (item["type"] == "stream"), current_event_chain)
|
||||
self.handle_new_schedule(media_schedule, liquidsoap_queue_approx, media_chain, stream_chain)
|
||||
|
||||
self.handle_new_schedule(media_schedule, liquidsoap_queue_approx, current_event_chain)
|
||||
|
||||
|
||||
#At this point everything in the present has been taken care of and Liquidsoap
|
||||
|
@ -184,7 +186,7 @@ class PypoPush(Thread):
|
|||
|
||||
return liquidsoap_queue_approx
|
||||
|
||||
def handle_new_schedule(self, media_schedule, liquidsoap_queue_approx, media_chain, stream_chain):
|
||||
def handle_new_schedule(self, media_schedule, liquidsoap_queue_approx, current_event_chain):
|
||||
"""
|
||||
This function's purpose is to gracefully handle situations where
|
||||
Liquidsoap already has a track in its queue, but the schedule
|
||||
|
@ -192,18 +194,24 @@ class PypoPush(Thread):
|
|||
call other functions that will connect to Liquidsoap and alter its
|
||||
queue.
|
||||
"""
|
||||
media_chain = filter(lambda item: (item["type"] == "file"), current_event_chain)
|
||||
stream_chain = filter(lambda item: (item["type"] == "stream"), current_event_chain)
|
||||
|
||||
self.logger.debug(self.current_stream_info)
|
||||
self.logger.debug(current_event_chain)
|
||||
|
||||
|
||||
if self.current_stream_info:
|
||||
if len(stream_chain) == 0:
|
||||
if current_event_chain[0]['type'] == "stream":
|
||||
if self.current_stream_info['uri'] != stream_chain[0]['uri']:
|
||||
#Liquidsoap is rebroadcasting a webstream and a webstream is scheduled
|
||||
#to play, but they are not the same!
|
||||
self.stop_web_stream(self.current_stream_info)
|
||||
self.start_web_stream(stream_chain[0])
|
||||
else:
|
||||
#Liquidsoap is rebroadcasting a webstream, but there is no stream
|
||||
#in the schedule. Let's stop streaming.
|
||||
self.stop_web_stream(self.current_stream_info)
|
||||
elif self.current_stream_info['uri'] != stream_chain[0]['uri']:
|
||||
#Liquidsoap is rebroadcasting a webstream and a webstream is scheduled
|
||||
#to play, but they are not the same!
|
||||
self.stop_web_stream(self.current_stream_info)
|
||||
self.start_web_stream(stream_chain[0])
|
||||
|
||||
|
||||
problem_at_iteration = self.find_removed_items(media_schedule, liquidsoap_queue_approx)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue