CC-2175: Overbooking: Cut off shows when they are done

-fixed
This commit is contained in:
martin 2011-04-14 00:20:19 -04:00
parent 7e6ce1514f
commit 33b24b581c
3 changed files with 37 additions and 31 deletions

View File

@ -314,7 +314,9 @@ class Schedule {
." MIN(st.playlist_id) AS playlist_id," ." MIN(st.playlist_id) AS playlist_id,"
." MIN(st.starts) AS starts," ." MIN(st.starts) AS starts,"
." MAX(st.ends) AS ends," ." MAX(st.ends) AS ends,"
." MIN(sh.name) AS show_name" ." MIN(sh.name) AS show_name,"
." MIN(si.starts) AS show_start,"
." MAX(si.ends) AS show_end"
." FROM $CC_CONFIG[scheduleTable] as st" ." FROM $CC_CONFIG[scheduleTable] as st"
." LEFT JOIN $CC_CONFIG[playListTable] as pt" ." LEFT JOIN $CC_CONFIG[playListTable] as pt"
." ON st.playlist_id = pt.id" ." ON st.playlist_id = pt.id"
@ -608,10 +610,8 @@ class Schedule {
$data = Schedule::GetItems($range_start, $range_end, true); $data = Schedule::GetItems($range_start, $range_end, true);
$playlists = array(); $playlists = array();
if (is_array($data)) if (is_array($data)){
{ foreach ($data as $dx){
foreach ($data as $dx)
{
$start = $dx['start']; $start = $dx['start'];
//chop off subseconds //chop off subseconds
@ -628,6 +628,8 @@ class Schedule {
$playlists[$pkey]['played'] = '0'; $playlists[$pkey]['played'] = '0';
$playlists[$pkey]['schedule_id'] = $dx['group_id']; $playlists[$pkey]['schedule_id'] = $dx['group_id'];
$playlists[$pkey]['show_name'] = $dx['show_name']; $playlists[$pkey]['show_name'] = $dx['show_name'];
$playlists[$pkey]['show_start'] = Schedule::AirtimeTimeToPypoTime($dx['show_start']);
$playlists[$pkey]['show_end'] = Schedule::AirtimeTimeToPypoTime($dx['show_end']);
$playlists[$pkey]['user_id'] = 0; $playlists[$pkey]['user_id'] = 0;
$playlists[$pkey]['id'] = $dx['group_id']; $playlists[$pkey]['id'] = $dx['group_id'];
$playlists[$pkey]['start'] = Schedule::AirtimeTimeToPypoTime($dx["start"]); $playlists[$pkey]['start'] = Schedule::AirtimeTimeToPypoTime($dx["start"]);

View File

@ -101,7 +101,7 @@ class PypoFetch(Thread):
""" """
def process_schedule(self, schedule_data, export_source): def process_schedule(self, schedule_data, export_source):
logger = logging.getLogger('fetch') logger = logging.getLogger('fetch')
self.schedule = schedule_data["playlists"] playlists = schedule_data["playlists"]
self.check_matching_timezones(schedule_data["server_timezone"]) self.check_matching_timezones(schedule_data["server_timezone"])
@ -121,13 +121,13 @@ class PypoFetch(Thread):
# Download all the media and put playlists in liquidsoap format # Download all the media and put playlists in liquidsoap format
try: try:
playlists = self.prepare_playlists() liquidsoap_playlists = self.prepare_playlists(playlists)
except Exception, e: logger.error("%s", e) except Exception, e: logger.error("%s", e)
# Send the data to pypo-push # Send the data to pypo-push
scheduled_data = dict() scheduled_data = dict()
scheduled_data['playlists'] = playlists scheduled_data['liquidsoap_playlists'] = liquidsoap_playlists
scheduled_data['schedule'] = self.schedule scheduled_data['schedule'] = playlists
scheduled_data['stream_metadata'] = schedule_data["stream_metadata"] scheduled_data['stream_metadata'] = schedule_data["stream_metadata"]
self.queue.put(scheduled_data) self.queue.put(scheduled_data)
@ -141,23 +141,22 @@ class PypoFetch(Thread):
and stored in a playlist folder. and stored in a playlist folder.
file is e.g. 2010-06-23-15-00-00/17_cue_10.132-123.321.mp3 file is e.g. 2010-06-23-15-00-00/17_cue_10.132-123.321.mp3
""" """
def prepare_playlists(self): def prepare_playlists(self, playlists):
logger = logging.getLogger('fetch') logger = logging.getLogger('fetch')
schedule = self.schedule liquidsoap_playlists = dict()
playlists = dict()
# Dont do anything if schedule is empty # Dont do anything if playlists is empty
if not schedule: if not playlists:
logger.debug("Schedule is empty.") logger.debug("Schedule is empty.")
return playlists return liquidsoap_playlists
scheduleKeys = sorted(schedule.iterkeys()) scheduleKeys = sorted(playlists.iterkeys())
try: try:
for pkey in scheduleKeys: for pkey in scheduleKeys:
logger.info("Playlist starting at %s", pkey) logger.info("Playlist starting at %s", pkey)
playlist = schedule[pkey] playlist = playlists[pkey]
# create playlist directory # create playlist directory
try: try:
@ -181,10 +180,10 @@ class PypoFetch(Thread):
elif int(playlist['subtype']) > 0 and int(playlist['subtype']) < 5: elif int(playlist['subtype']) > 0 and int(playlist['subtype']) < 5:
ls_playlist = self.handle_media_file(playlist, pkey) ls_playlist = self.handle_media_file(playlist, pkey)
playlists[pkey] = ls_playlist liquidsoap_playlists[pkey] = ls_playlist
except Exception, e: except Exception, e:
logger.info("%s", e) logger.info("%s", e)
return playlists return liquidsoap_playlists
""" """

View File

@ -48,6 +48,10 @@ class PypoPush(Thread):
self.push_ahead = 10 self.push_ahead = 10
self.push_ahead2 = self.push_ahead -5 self.push_ahead2 = self.push_ahead -5
#toggle between "stop" and "play". Keeps track of the state of
#liquidsoap
self.liquidsoap_state_play = True
def set_export_source(self, export_source): def set_export_source(self, export_source):
self.export_source = export_source self.export_source = export_source
self.cache_dir = config["cache_dir"] + self.export_source + '/' self.cache_dir = config["cache_dir"] + self.export_source + '/'
@ -67,14 +71,13 @@ class PypoPush(Thread):
scheduled_data = self.queue.get() scheduled_data = self.queue.get()
logger.debug("Received data from pypo-fetch") logger.debug("Received data from pypo-fetch")
self.schedule = scheduled_data['schedule'] self.schedule = scheduled_data['schedule']
self.playlists = scheduled_data['playlists'] self.playlists = scheduled_data['liquidsoap_playlists']
self.stream_metadata = scheduled_data['stream_metadata'] self.stream_metadata = scheduled_data['stream_metadata']
logger.debug('schedule %s' % json.dumps(self.schedule))
logger.debug('playlists %s' % json.dumps(self.playlists))
schedule = self.schedule schedule = self.schedule
playlists = self.playlists playlists = self.playlists
logger.debug('schedule %s' % json.dumps(schedule))
logger.debug('playlists %s' % json.dumps(playlists))
currently_on_air = False currently_on_air = False
if schedule: if schedule:
@ -92,9 +95,7 @@ class PypoPush(Thread):
for pkey in schedule: for pkey in schedule:
plstart = pkey[0:19] plstart = pkey[0:19]
start = schedule[pkey]['start']
end = schedule[pkey]['end']
playedFlag = (pkey in playedItems) and playedItems[pkey].get("played", 0) playedFlag = (pkey in playedItems) and playedItems[pkey].get("played", 0)
if plstart == str_tcoming_s or (plstart < str_tcoming_s and plstart > str_tcoming2_s and not playedFlag): if plstart == str_tcoming_s or (plstart < str_tcoming_s and plstart > str_tcoming2_s and not playedFlag):
@ -120,21 +121,23 @@ class PypoPush(Thread):
# Call API to update schedule states # Call API to update schedule states
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)
start = schedule[pkey]['start']
end = schedule[pkey]['end']
if start <= str_tnow_s and str_tnow_s < end: show_start = schedule[pkey]['show_start']
show_end = schedule[pkey]['show_end']
if show_start <= str_tnow_s and str_tnow_s < show_end:
currently_on_air = True currently_on_air = True
else: else:
pass pass
#logger.debug('Empty schedule') #logger.debug('Empty schedule')
if not currently_on_air: if not currently_on_air and self.liquidsoap_state_play:
logger.debug('Notifying Liquidsoap to stop playback.')
tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn = telnetlib.Telnet(LS_HOST, LS_PORT)
tn.write('source.skip\n') tn.write('source.skip\n')
tn.write('exit\n') tn.write('exit\n')
tn.read_all() tn.read_all()
self.liquidsoap_state_play = False
def push_liquidsoap(self, pkey, schedule, playlists): def push_liquidsoap(self, pkey, schedule, playlists):
logger = logging.getLogger('push') logger = logging.getLogger('push')
@ -185,6 +188,8 @@ class PypoPush(Thread):
tn.write("exit\n") tn.write("exit\n")
logger.debug(tn.read_all()) logger.debug(tn.read_all())
self.liquidsoap_state_play = True
status = 1 status = 1
except Exception, e: except Exception, e:
logger.error('%s', e) logger.error('%s', e)