示例#1
0
    def wait_for_trigger(self):
        
        # wait for trigger sets the state to waiting so that trigger events can do a start_list.
        self.state='waiting'

        self.mon.log(self,self.show_params['show-ref']+ ' '+ str(self.show_id)+ ": Waiting for trigger: "+ self.show_params['trigger-start-type'])

  
        if self.show_params['trigger-start-type'] == "input":
            
            #close the previous track to display admin message
            Show.base_shuffle(self)
            Show.base_track_ready_callback(self,False)
            Show.display_admin_message(self,self.show_params['trigger-wait-text'])

        elif self.show_params['trigger-start-type'] == "input-persist":
            if self.first_list ==True:
                #first time through track list so play the track without waiting to get to end.
                self.start_list()
            else:
                #wait for trigger while displaying previous track
                pass

        elif self.show_params['trigger-start-type'] == "start":
            # don't close the previous track to give seamless repeat of the show
            self.start_list()
            
        else:
            self.mon.err(self,"Unknown trigger: "+ self.show_params['trigger-start-type'])
            self.end('error',"Unknown trigger: "+ self.show_params['trigger-start-type'])
示例#2
0
 def load_first_track(self):
     self.mon.trace(self,'')
     if self.medialist.start() is False:
         # list is empty - display a message for 5 secs and then retry
         Show.display_admin_message(self,self.show_params['empty-text'])
         self.canvas.after(5000,self.remove_list_empty_message)
     else:
         # otherwise load the first track
         # print "!!!!! artshow init first"
         self.next_player=Show.base_init_selected_player(self,self.medialist.selected_track())
         if self.next_player is None:
             self.mon.err(self,"Track Type cannot be played by this show: "+self.medialist.selected_track()['type'])
             self.req_next='error'
             self.what_next()
         else:
             # messageplayer passes the text not a file name
             if self.medialist.selected_track()['type'] == 'message':
                 track_file=self.medialist.selected_track()['text']
             else:
                 track_file=Show.base_complete_path(self,self.medialist.selected_track()['location'])
             # print "!!!!! artshow load first ",track_file
             self.next_player.load(track_file,
                                   self.loaded_callback,
                                   enable_menu=False)
             self.wait_for_load() 
 def load_first_track(self):
     self.mon.trace(self, '')
     self.medialist.create_new_livelist()
     self.medialist.use_new_livelist()
     if self.medialist.start() is False:
         # print 'FIRST EMPTY'
         # list is empty - display a message for 5 secs and then retry
         Show.display_admin_message(self, self.show_params['empty-text'])
         self.canvas.after(5000, self.remove_list_empty_message)
     else:
         # otherwise load the first track
         # print "!!!!! artshow init first"
         # print 'after wait EMPTY'
         self.next_player = Show.base_init_selected_player(
             self, self.medialist.selected_track())
         if self.next_player is None:
             self.mon.err(
                 self, "Track Type cannot be played by this show: " +
                 self.medialist.selected_track()['type'])
             self.req_next = 'error'
             self.what_next()
         else:
             # messageplayer passes the text not a file name
             if self.medialist.selected_track()['type'] == 'message':
                 track_file = self.medialist.selected_track()['text']
             else:
                 track_file = Show.base_complete_path(
                     self,
                     self.medialist.selected_track()['location'])
             # print "!!!!! artshow load first ",track_file
             self.next_player.load(track_file,
                                   self.loaded_callback,
                                   enable_menu=False)
             self.wait_for_load()
示例#4
0
    def wait_for_trigger(self):
        
        # wait for trigger sets the state to waiting so that trigger events can do a start_list.
        self.state='waiting'

        self.mon.log(self,self.show_params['show-ref']+ ' '+ str(self.show_id)+ ": Waiting for trigger: "+ self.show_params['trigger-start-type'])

  
        if self.show_params['trigger-start-type'] == "input":
            
            #close the previous track to display admin message
            Show.base_shuffle(self)
            Show.base_track_ready_callback(self,False)
            Show.display_admin_message(self,self.show_params['trigger-wait-text'])

        elif self.show_params['trigger-start-type'] == "input-persist":
            if self.first_list ==True:
                #first time through track list so play the track without waiting to get to end.
                self.start_list()
            else:
                #wait for trigger while displaying previous track
                pass

        elif self.show_params['trigger-start-type'] == "start":
            # don't close the previous track to give seamless repeat of the show
            self.start_list()
            
        else:
            self.mon.err(self,"Unknown trigger: "+ self.show_params['trigger-start-type'])
            self.end('error',"Unknown trigger: "+ self.show_params['trigger-start-type'])
    def start_list(self):
        # starts the list or any repeat having waited for trigger first.
        self.state='playing'

        # initialise track counter for the list
        self.track_count=0
       
        # start interval timer
        self.interval_timer_signal = False
        if self.interval != 0:
            self.interval_timer=self.canvas.after(self.interval*1000,self.end_interval_timer)

        #get rid of previous track in order to display the empty message
        if self.medialist.display_length() == 0:
            if self.show_params['empty-text']:
                Show.base_shuffle(self)
                Show.base_track_ready_callback(self,False)
                Show.display_admin_message(self,self.show_params['empty-text'])
                self.wait_for_not_empty()
            else:
                self.stop_timers()
                self.ending_reason='exit'
                Show.base_close_or_unload(self)                
        else:
            self.not_empty()
示例#6
0
    def start_list(self):
        # starts the list or any repeat having waited for trigger first.
        self.state = 'playing'

        # initialise track counter for the list
        self.track_count = 0

        # start interval timer
        self.interval_timer_signal = False
        if self.interval != 0:
            self.interval_timer = self.canvas.after(self.interval * 1000,
                                                    self.end_interval_timer)

        #get rid of previous track in order to display the empty message
        if self.medialist.display_length() == 0:
            if self.show_params['empty-text']:
                Show.base_shuffle(self)
                Show.base_track_ready_callback(self, False)
                Show.display_admin_message(self,
                                           self.show_params['empty-text'])
                self.wait_for_not_empty()
            else:
                self.stop_timers()
                self.ending_reason = 'exit'
                Show.base_close_or_unload(self)
        else:
            self.not_empty()
示例#7
0
    def start_list(self):
        # starts the list or any repeat having waited for trigger first.
        self.state='playing'

        # initialise track counter for the list
        self.track_count=0

        # start interval timer
        self.interval_timer_signal = False
        if self.interval != 0:
            self.interval_timer=self.canvas.after(self.interval*1000,self.end_interval_timer)

        #get rid of previous track in order to display the empty message
        if self.medialist.display_length() == 0:

            #Get current mac address
            str     = open('/sys/class/net/eth0/address').read()
            #Remove : from the mac address for ease of reading
            address = re.sub(':', '', str[0:17])
            #Get system ip address
            ipAddr = check_output(["hostname", "-I"]).rstrip()
            #Check for ip
            if ipAddr:
                iptext = "Monitor IP Address: " + ipAddr + "\n"
            else:
                iptext = ""
            #Check for internet connection
            if self.internet_on():
                addtext = "Monitor is connected to the internet"
            else:
                addtext = "Monitor not connected to a network with a internet connection\nPlease connect the monitor to a network with an internet connection\nUse a network cabel or wifi dongle to do so"

            Show.base_shuffle(self)
            Show.base_track_ready_callback(self,False)
            #Show.display_admin_message(self,self.show_params['empty-text'])
            Show.display_admin_message(self,'Monitor has nothing to play\nMonitor Code: ' + address + '\nAdd this monitor to your account to get started\n' + iptext + addtext)
            self.wait_for_not_empty()
        else:
            self.not_empty()
    def what_next_after_showing(self):
        #inhibit for trigger next
        self.playing_track = False
        # print 'WHAT NEXT'
        self.mon.trace(self, self.pretty_what_next_after_showing_state())

        self.track_count += 1
        # set false when child rack is to be played
        self.enable_hint = True

        # first of all deal with conditions that do not require the next track to be shown
        # some of the conditions can happen at any time, others only when a track is closed or at pause_at_end

        # need to terminate
        if self.terminate_signal is True:
            self.terminate_signal = False
            self.stop_timers()
            # set what to do after closed or unloaded
            self.ending_reason = 'killed'
            Show.base_close_or_unload(self)

        elif self.error_signal == True or self.req_next == 'error':
            self.error_signal = False
            self.req_next = ''
            self.stop_timers()
            # set what to do after closed or unloaded
            self.ending_reason = 'error'
            Show.base_close_or_unload(self)

        # used for exiting show from other shows, time of day, external etc.
        elif self.exit_signal is True:
            self.exit_signal = False
            self.stop_timers()
            self.ending_reason = 'exit'
            Show.base_close_or_unload(self)

        #  show timeout
        elif self.show_timeout_signal is True:
            self.show_timeout_signal = False
            self.stop_timers()
            self.ending_reason = 'user-stop'
            Show.base_close_or_unload(self)

        # user wants to stop the show
        elif self.user_stop_signal is True:
            self.user_stop_signal = False
            # print 'user stop'
            self.stop_timers()
            self.ending_reason = 'user-stop'
            Show.base_close_or_unload(self)

    # interval > 0. If last track has finished we are waiting for interval timer before ending the list
    # note: if medialist finishes after interval is up then this route is used to start trigger.
        elif self.waiting_for_interval is True:
            # interval_timer_signal set by alarm clock started in start_list
            if self.interval_timer_signal is True:
                self.interval_timer_signal = False
                self.waiting_for_interval = False
                # print 'RECEIVED INTERVAL TIMER SIGNAL'
                if self.show_params['repeat'] == 'repeat':
                    self.wait_for_trigger()
                else:
                    self.stop_timers()
                    self.ending_reason = 'user-stop'
                    Show.base_close_or_unload(self)
            else:
                self.poll_for_interval_timer = self.canvas.after(
                    1000, self.what_next_after_showing)

        else:
            self.medialist.create_new_livelist()
            escapetrack_required = self.escapetrack_required
            self.escapetrack_required = False
            # print escapetrack_required,self.medialist.new_length()
            if escapetrack_required is True and self.medialist.new_length(
            ) == 0:
                # print 'use escape track'
                index = self.medialist.index_of_track(
                    self.show_params['escape-track-ref'])
                self.mon.log(
                    self, 'Starting Escape Track: ' +
                    self.show_params['escape-track-ref'])
                if index >= 0:
                    # don't use select the track as need to preserve mediashow sequence for returning from esacpe track
                    escape_track = self.medialist.track(index)
                    Show.write_stats(self, 'play escape track',
                                     self.show_params, escape_track)
                    self.display_eggtimer()
                    # use new empty livelist so if changed works OK when return from empty track
                    self.medialist.use_new_livelist()
                    self.start_load_show_loop(escape_track)
                else:
                    self.mon.err(self, "Escape Track empty")
                    self.end('error', "Escape Track empty")

            # print 'FOR IF CHANGED',self.first_list,self.medialist.length(),self.medialist.new_length(),self.medialist.livelist_changed()
            elif self.first_list is True or self.medialist.livelist_changed(
            ) is True or (self.medialist.length() == 0
                          and self.medialist.new_length() == 0):

                if self.first_list is False:
                    # do show control
                    if self.medialist.length(
                    ) == 0 and self.medialist.new_length() != 0:
                        # print 'show control empty to not empty'
                        # do show control when goes from not empty to empty only
                        self.show_control(
                            self.show_params['show-control-not-empty'])

                    elif self.medialist.length(
                    ) != 0 and self.medialist.new_length() == 0:
                        # print 'show control not empty to empty'
                        # do show control when goes from empty to not empty only
                        self.show_control(
                            self.show_params['show-control-empty'])

                self.first_list = False

                if self.medialist.new_length(
                ) == 0 and self.show_params['repeat'] == 'repeat':
                    # start empty track/show
                    index = self.medialist.index_of_track(
                        self.show_params['empty-track-ref'])
                    self.mon.log(
                        self, 'Starting Empty Track: ' +
                        self.show_params['empty-track-ref'])
                    if index >= 0:
                        # don't use select the track as need to preserve mediashow sequence for returning from empty track/show
                        empty_track = self.medialist.track(index)
                        # print 'play empty track', empty_track['title'],empty_track['type']
                        Show.write_stats(self, 'play empty track',
                                         self.show_params, empty_track)
                        if empty_track['type'] == 'show':
                            self.escapetrack_required = True

                        self.display_eggtimer()
                        # use new empty livelist so if changed works OK when return from empty track
                        self.medialist.use_new_livelist()
                        self.start_load_show_loop(empty_track)
                    else:
                        self.mon.err(self, "List Empty Track not specified")
                        self.end('error', "List Empty Track not specified")

                elif self.medialist.new_length(
                ) == 0 and self.show_params['repeat'] == 'single-run':
                    if self.level != 0:
                        self.kickback_for_next_track = False
                        self.subshow_kickback_signal = False
                        self.end('normal',
                                 "End of single run - Return from Sub Show")
                    else:
                        # end of single run and at top - exit the show
                        self.stop_timers()
                        self.ending_reason = 'user-stop'
                        Show.base_close_or_unload(self)

                else:
                    #changed but new is not zero
                    self.medialist.use_new_livelist()
                    # print 'livelist changed and not empty'
                    self.start_list()

            # otherwise consider operation that might show the next track
            else:
                # print 'ELSE',self.medialist.at_end()
                # report error if medilaist is empty (liveshow will not get this far
                if self.medialist.length() == 0:
                    self.mon.err(self, "Medialist empty")
                    self.end('error', "Medialist empty")

                # setup default direction for next track as normally goes forward unless kicked back
                self.kickback_for_next_track = False
                # print 'init direction to False at begin of what_next_after showing', self.kickback_for_next_track
                # end trigger from input, or track count
                if self.end_trigger_signal is True or (
                        self.track_count_limit > 0
                        and self.track_count == self.track_count_limit):
                    self.end_trigger_signal = False
                    # repeat so test start trigger
                    if self.show_params['repeat'] == 'repeat':
                        self.stop_timers()
                        # print 'END TRIGGER restart'
                        self.wait_for_trigger()
                    else:
                        # single run so exit show
                        if self.level != 0:
                            self.kickback_for_next_track = False
                            self.subshow_kickback_signal = False
                            # print 'single run exit subshow'
                            self.end(
                                'normal',
                                "End of single run - Return from Sub Show")
                        else:
                            # end of single run and at top - exit the show
                            self.stop_timers()
                            # print 'ENDING'
                            self.ending_reason = 'user-stop'
                            Show.base_close_or_unload(self)

                # user wants to play child
                elif self.play_child_signal is True:
                    self.play_child_signal = False
                    index = self.medialist.index_of_track(self.child_track_ref)
                    if index >= 0:
                        # don't use select the track as need to preserve mediashow sequence for returning from child
                        child_track = self.medialist.track(index)
                        Show.write_stats(self, 'play child', self.show_params,
                                         child_track)
                        self.display_eggtimer()
                        self.enable_hint = False
                        self.start_load_show_loop(child_track)
                    else:
                        self.mon.err(
                            self, "Child not found in medialist: " +
                            self.child_track_ref)
                        self.ending_reason = 'error'
                        Show.base_close_or_unload(self)

                elif self.repeat_track_signal is True:
                    self.repeat_track_signal = False
                    self.start_load_show_loop(self.medialist.selected_track())

                # skip to next track on user input or after subshow
                elif self.next_track_signal is True:
                    # print 'skip forward test' ,self.subshow_kickback_signal
                    if self.next_track_signal is True or self.subshow_kickback_signal is False:
                        self.next_track_signal = False
                        self.kickback_for_next_track = False
                        if self.medialist.at_end() is True:
                            # medialist_at_end can give false positive for shuffle
                            if self.show_params[
                                    'sequence'] == "ordered" and self.show_params[
                                        'repeat'] == 'repeat':
                                self.wait_for_trigger()
                            elif self.show_params[
                                    'sequence'] == "ordered" and self.show_params[
                                        'repeat'] == 'single-run':
                                if self.level != 0:
                                    self.kickback_for_next_track = False
                                    self.subshow_kickback_signal = False
                                    # print 'end subshow skip forward test, self. direction is ' ,self.kickback_for_next_track
                                    self.end('normal', "Return from Sub Show")
                                else:
                                    # end of single run and at top - exit the show
                                    self.stop_timers()
                                    self.ending_reason = 'user-stop'
                                    Show.base_close_or_unload(self)
                            else:
                                # shuffling  - just do next track
                                self.kickback_for_next_track = False
                                self.medialist.next(
                                    self.show_params['sequence'])
                                self.start_load_show_loop(
                                    self.medialist.selected_track())
                        else:
                            # not at end just do next track
                            self.medialist.next(self.show_params['sequence'])
                            self.start_load_show_loop(
                                self.medialist.selected_track())

                # skip to previous track on user input or after subshow
                elif self.previous_track_signal is True or self.subshow_kickback_signal is True:
                    # print 'skip backward test, subshow kickback is' ,self.subshow_kickback_signal
                    self.subshow_kickback_signal = False
                    self.previous_track_signal = False
                    self.kickback_for_next_track = True
                    # medialist_at_start can give false positive for shuffle
                    if self.medialist.at_start() is True:
                        # print 'AT START'
                        if self.show_params[
                                'sequence'] == "ordered" and self.show_params[
                                    'repeat'] == 'repeat':
                            self.kickback_for_next_track = True
                            self.wait_for_trigger()
                        elif self.show_params[
                                'sequence'] == "ordered" and self.show_params[
                                    'repeat'] == 'single-run':
                            if self.level != 0:
                                self.kickback_for_next_track = True
                                self.subshow_kickback_signal = True
                                # print 'end subshow skip forward test, self. direction is ' ,self.kickback_for_next_track
                                self.end('normal', "Return from Sub Show")
                            else:
                                # end of single run and at top - exit the show
                                self.stop_timers()
                                self.ending_reason = 'user-stop'
                                Show.base_close_or_unload(self)
                        else:
                            # shuffling  - just do previous track
                            self.kickback_for_next_track = True
                            self.medialist.previous(
                                self.show_params['sequence'])
                            self.start_load_show_loop(
                                self.medialist.selected_track())
                    else:
                        # not at end just do next track
                        self.medialist.previous(self.show_params['sequence'])
                        self.start_load_show_loop(
                            self.medialist.selected_track())

                # AT END OF MEDIALIST
                elif self.medialist.at_end() is True:
                    # print 'MEDIALIST AT END'

                    # interval>0 and list finished so wait for the interval timer
                    if self.show_params[
                            'sequence'] == "ordered" and self.interval > 0 and self.interval_timer_signal == False:
                        self.waiting_for_interval = True
                        # print 'WAITING FOR INTERVAL'
                        Show.base_shuffle(self)
                        Show.base_track_ready_callback(self, False)
                        self.poll_for_interval_timer = self.canvas.after(
                            200, self.what_next_after_showing)

                    # interval=0
                    #elif self.show_params['sequence'] == "ordered" and self.show_params['repeat'] == 'repeat' and self.show_params['trigger-end-type']== 'interval' and int(self.show_params['trigger-end-param']) == 0:
                    #self.medialist.next(self.show_params['sequence'])
                    # self.start_load_show_loop(self.medialist.selected_track())

                    # shuffling so there is no end condition, get out of end test
                    elif self.show_params['sequence'] == "shuffle":
                        self.medialist.next(self.show_params['sequence'])
                        self.start_load_show_loop(
                            self.medialist.selected_track())

                    # nothing special to do at end of list, just repeat or exit
                    elif self.show_params['sequence'] == "ordered":
                        if self.show_params['repeat'] == 'repeat':
                            # print 'repeating at end of list'
                            self.wait_for_trigger()
                        else:
                            # single run
                            # if not at top return to parent
                            if self.level != 0:
                                self.end('normal', "End of Single Run")
                            else:
                                # at top so close the show
                                # print 'closing show'
                                self.stop_timers()
                                self.ending_reason = 'user-stop'
                                Show.base_close_or_unload(self)

                    else:
                        self.mon.err(
                            self, "Unhandled playing event at end of list: " +
                            self.show_params['sequence'] + ' with ' +
                            self.show_params['repeat'] + " of " +
                            self.show_params['trigger-end-param'])
                        self.end(
                            'error',
                            "Unhandled playing event at end of list: " +
                            self.show_params['sequence'] + ' with ' +
                            self.show_params['repeat'] + " of " +
                            self.show_params['trigger-end-param'])

                elif self.medialist.at_end() is False:
                    # nothing special just do the next track
                    # print 'nothing special'
                    if self.wait_for_next_trigger is False:
                        self.medialist.next(self.show_params['sequence'])
                        self.start_load_show_loop(
                            self.medialist.selected_track())
                    else:
                        #close the previous track to display admin message
                        Show.base_shuffle(self)
                        Show.base_track_ready_callback(self, False)
                        Show.display_admin_message(
                            self, self.show_params['trigger-wait-text'])

                else:
                    # unhandled state
                    self.mon.err(
                        self, "Unhandled playing event: " +
                        self.show_params['sequence'] + ' with ' +
                        self.show_params['repeat'] + " of " +
                        self.show_params['trigger-end-param'])
                    self.end(
                        'error', "Unhandled playing event: " +
                        self.show_params['sequence'] + ' with ' +
                        self.show_params['repeat'] + " of " +
                        self.show_params['trigger-end-param'])