def is_playing(self, state): def pause_sonos(junk): logging.info('pause pressed') self.force_refresh = True self.nav_array[1] = BoxButton('play', 2, is_sprite=True, on_press=pause_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for hotel testing play_room = (str(pod_dict['Rooms']['Living'])) sonos = SoCo(play_room) sonos.group.coordinator.pause() self.poor_man_refresh() def play_sonos(junk): logging.info('pause button pressed, start playing') self.force_refresh = True self.nav_array[1] = BoxButton('pause', 2, is_sprite=True, on_press=play_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for testing at hotel play_room = (str(pod_dict['Rooms']['Living'])) self.poor_man_refresh() try: sonos = SoCo(play_room) look_at_queue = sonos.get_queue() if len(look_at_queue) > 0: sonos.group.coordinator.play() else: print("the queue is empty") except soco.exceptions.SoCoUPnPException as e: logging.warning("Exception caught. Not expecting trace", exc_info=False, stack_info=False) print("the queue is empty") if state == "PLAYING": self.nav_array[1] = BoxButton('pause', 2, is_sprite=True, on_press=pause_sonos, user_data=None) else: self.nav_array[1] = BoxButton('play', 2, is_sprite=True, on_press=play_sonos, user_data=None) # #pause music here,. self.force_refresh = True self.dead_alarm = self.loop.set_alarm_in(.2, self.refresh)
def menu(title, choices): body = [urwid.Text(title), urwid.Divider()] for c in choices: button = BoxButton(c, on_press=item_chosen, user_data=c) #urwid.connect_signal(button, 'click', item_chosen, c) body.append(urwid.AttrMap(button, None, focus_map='reversed')) return urwid.ListBox(urwid.SimpleFocusListWalker(body))
def play_sonos(junk): logging.info('play button pressed') self.force_refresh = True self.nav_array[int(right(junk.label, 1)) - 1] = BoxButton( 'pause', 2, is_sprite=True, theme=nav_theme, on_press=pause_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for testing at hotel play_room = (str(pod_dict['Rooms']['Living'])) try: sonos = SoCo(play_room) look_at_queue = sonos.get_queue() if len(look_at_queue) > 0: sonos.group.coordinator.play() #else: # print("the queue is empty") except: #this doesn't work for some reason. try just looking for stop states. logging.warning("Exception caught. Not expecting trace", exc_info=False, stack_info=False) print("the queue is empty")
def poor_man_refresh(self, what_to_do=True): temp_minute = datetime.datetime.now().minute if temp_minute < 10: temp_minute = "0" + str(temp_minute) else: temp_minute clock_element = urwid.AttrMap( urwid.BigText( "{0}{1}{2}".format(datetime.datetime.now().hour, ":", temp_minute), urwid.font.HalfBlock5x4Font()), "clock_c") burger = BoxButton('burger', 999, is_sprite=True, on_press=self.show_menu, no_border=True, user_data=None, theme=get_theme("burger")) button_line_box = urwid.AttrMap( urwid.LineBox(urwid.Pile([ urwid.Divider(" ", top=0, bottom=0), urwid.GridFlow(self.buttons_list[self.page_num][0], cell_width=50, h_sep=0, v_sep=2, align='center'), urwid.Divider(" ", top=0, bottom=0) ]), trcorner=u"\u2584", tlcorner=u"\u2584", tline=u"\u2584", bline=u"\u2580", blcorner=u"\u2580", brcorner=u"\u2580", lline=u"\u2588", rline=u"\u2588"), "outer_box_c") base = urwid.Filler( urwid.Pile([ urwid.Columns([ urwid.Padding(clock_element, 'left', width='clip'), urwid.Padding(burger, 'right', width=('relative', 19)) ]), button_line_box, urwid.Divider(" ", top=0, bottom=0), urwid.GridFlow(self.nav_array, cell_width=50, h_sep=0, v_sep=0, align='center') ]), 'top') if what_to_do: self.loop.widget = base else: return base
def __init__(self, parent): self.game_name_box = FormControlEdit('Name of game') self.number_of_players_box = FormControlEdit('Number of players') self.create_btn = BoxButton('Create', on_press=self.create_game) self._parent = parent self.widgets = urwid.Filler( urwid.Padding(urwid.Pile([ self.game_name_box, self.number_of_players_box, self.create_btn ]), left=8, right=8)) super().__init__(self.widgets)
def __init__(self, parent): self.new_game_btn = BoxButton('New Game', on_press=self.create_new_game, size='lg') self.join_game_btn = BoxButton('Join Game', on_press=self.join_game, size='lg') self.save_game_btn = BoxButton('Save Game', on_press=self.save_game, size='lg') self.load_game_btn = BoxButton('Load Game', on_press=self.load_game, size='lg') self.show_help_btn = BoxButton('Show Help', on_press=self.show_help, size='lg') self.exit_game_btn = BoxButton('Exit Game', on_press=self.exit_game, size='lg') self.btn_list = urwid.Filler(urwid.GridFlow([ self.new_game_btn, self.join_game_btn, self.save_game_btn, self.load_game_btn, self.show_help_btn, self.exit_game_btn ], cell_width=30, h_sep=10, v_sep=2, align='center'), valign='middle') self._parent = parent super().__init__(self.btn_list)
def lets_pod(junk): nav_theme = get_theme('nav') self.menu_state = "pods" self.page_num = 0 self.set_buttons(split) self.force_refresh = True self.menu_show = False self.menu_array[0] = (BoxButton('music', 1, is_sprite=True, theme=nav_theme, on_press=lets_spot, user_data=None)) self.poor_man_refresh()
def pause_sonos(junk): logging.info('pause pressed') self.force_refresh = True self.nav_array[1] = BoxButton('play', 2, is_sprite=True, on_press=pause_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for hotel testing play_room = (str(pod_dict['Rooms']['Living'])) sonos = SoCo(play_room) sonos.group.coordinator.pause() self.poor_man_refresh()
def lets_spot(junk): nav_theme = get_theme('nav') self.menu_state = "spots" self.page_num = 0 self.set_buttons(play_spot) self.force_refresh = True self.menu_show = False self.menu_array[0] = (BoxButton('POD', 1, show_date=False, is_sprite=False, on_press=lets_pod, theme=nav_theme, user_data=None)) self.poor_man_refresh()
def __init__(self, parent): self.usernameBox = FormControlEdit('Username') self.passwordBox = FormControlEdit('Password', isPassword=True) self.user_data = [self.usernameBox, self.passwordBox] self.anonymousBtn = BoxButton('Anonymous User', on_press=self.create_anon_user, btn_type='action', user_data=self.user_data) self.loginBtn = BoxButton('Login', on_press=self.login, btn_type='action', user_data=self.user_data) self.registerBtn = BoxButton('Register', on_press=self.register, btn_type='action', user_data=self.user_data) self.exitBtn = BoxButton('Exit', on_press=self.exit_app, btn_type='action') self.user_data_widgets = urwid.Pile(self.user_data) self.form_buttons = urwid.Columns( [self.anonymousBtn, self.loginBtn, self.registerBtn, self.exitBtn]) self.error_text = urwid.Text('') self.form_widgets = urwid.Pile([ urwid.Padding(urwid.BigText('Sign In', urwid.Thin3x3Font()), width='clip'), self.user_data_widgets, urwid.Divider(), urwid.Divider(), self.form_buttons, self.error_text ]) self.form_widgets = urwid.Filler( urwid.Padding(self.form_widgets, left=4, right=4)) self._parent = parent super().__init__(self.form_widgets) # User creds self.username, self.password = None, None
def __init__(self, parent): self.games = [ dict(game_name='FireBolt', players=['Earl', 'Phineas', 'Tucker']), dict(game_name='FireBolt2', players=['Carlson', 'Ben', 'Kevlin']) ] self.players_pane = self.generate_pane_widget('players') self.game_pane = self.generate_pane_widget('game') self._parent = parent self.status_box = urwid.Text(u'') middle_col = self.generate_middle_col() self.widgets = urwid.Pile([ urwid.Columns([('weight', 3, self.game_pane), ('weight', 2, middle_col), ('weight', 3, self.players_pane)]), urwid.Padding(urwid.Columns([ ('pack', self.status_box), ('pack', BoxButton(u'Join', on_press=self.join_game)) ]), align='right') ]) super().__init__(self.widgets)
def setup_view(self): logging.info('making buttons.') nav_theme = get_theme("nav") def split(link, user_data_x): logging.info('splitting') flip_here = user_data_x['index_dict'] - 1 flip_iter = 0 for x in self.buttons_list[self.page_num][0]: if 'Pile' in str(type(x)): temp_holder = self.buttons_list[ self.page_num][0][flip_iter] self.buttons_list[ self.page_num][0][flip_iter] = self.buttons_list[ self.page_num][1][flip_iter] self.buttons_list[ self.page_num][1][flip_iter] = temp_holder flip_iter += 1 temp_holder = self.buttons_list[self.page_num][0][flip_here] self.buttons_list[self.page_num][0][flip_here] = self.buttons_list[ self.page_num][1][flip_here] self.buttons_list[self.page_num][1][flip_here] = temp_holder self.poor_man_refresh() def play_sonos(junk): logging.info('play button pressed') self.force_refresh = True self.nav_array[int(right(junk.label, 1)) - 1] = BoxButton( 'pause', 2, is_sprite=True, theme=nav_theme, on_press=pause_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for testing at hotel play_room = (str(pod_dict['Rooms']['Living'])) try: sonos = SoCo(play_room) look_at_queue = sonos.get_queue() if len(look_at_queue) > 0: sonos.group.coordinator.play() #else: # print("the queue is empty") except: #this doesn't work for some reason. try just looking for stop states. logging.warning("Exception caught. Not expecting trace", exc_info=False, stack_info=False) print("the queue is empty") def pause_sonos(junk): logging.info('pause pressed') self.force_refresh = True self.nav_array[int(right(junk.label, 1)) - 1] = BoxButton( 'play', 2, is_sprite=True, theme=nav_theme, on_press=play_sonos, user_data=None) #self.nav_grid = urwid.GridFlow(self.nav_array,cell_width=50,h_sep=0,v_sep=0,align='center') self.dead_alarm = self.loop.set_alarm_in(.01, self.refresh) #commented out for hotel testing play_room = (str(pod_dict['Rooms']['Living'])) sonos = SoCo(play_room) sonos.group.coordinator.pause() def back_page(junk): if self.page_num > 0: self.page_num = self.page_num - 1 self.poor_man_refresh() else: logging.info('page num error') def forward_page(junk): if self.page_num + 1 < len(self.buttons_list): self.page_num = self.page_num + 1 #self.set_buttons(split) self.poor_man_refresh() else: print('too far') def lets_spot(junk): nav_theme = get_theme('nav') self.menu_state = "spots" self.page_num = 0 self.set_buttons(play_spot) self.force_refresh = True self.menu_show = False self.menu_array[0] = (BoxButton('POD', 1, show_date=False, is_sprite=False, on_press=lets_pod, theme=nav_theme, user_data=None)) self.poor_man_refresh() def lets_pod(junk): nav_theme = get_theme('nav') self.menu_state = "pods" self.page_num = 0 self.set_buttons(split) self.force_refresh = True self.menu_show = False self.menu_array[0] = (BoxButton('music', 1, is_sprite=True, theme=nav_theme, on_press=lets_spot, user_data=None)) self.poor_man_refresh() def play_spot(junk, location): time.sleep(5) play_room = (str(pod_dict['Rooms']['Living'])) sonos = SoCo(play_room) uri = location['location'] sonos.clear_queue() sonos.add_uri_to_queue(uri=uri) sonos.play_from_queue(index=0) sonos.play_mode = "SHUFFLE_NOREPEAT" if self.menu_state == "pods": self.set_buttons(split) else: self.set_buttons(play_spot) self.nav_array = [] self.nav_array.append( BoxButton('rr-30', 1, is_sprite=True, on_press=back_page, theme=nav_theme, user_data=None)) self.nav_array.append( BoxButton('pause', 2, is_sprite=True, on_press=pause_sonos, theme=nav_theme, user_data=None)) self.nav_array.append( BoxButton('ff-30', 3, is_sprite=True, on_press=forward_page, theme=nav_theme, user_data=None)) self.menu_array = [] self.menu_array.append( BoxButton('music', 1, is_sprite=True, on_press=lets_spot, theme=nav_theme, user_data=None)) self.menu_array.append( BoxButton('play', 2, is_sprite=True, on_press=play_sonos, theme=nav_theme, user_data=None)) self.menu_array.append( BoxButton('ff-30', 3, is_sprite=True, on_press=forward_page, theme=nav_theme, user_data=None)) try: self.poor_man_refresh(True) except: return self.poor_man_refresh(False)
def set_buttons(self, callbacker): logging.info('setting buttons') self.buttons_list = [] index_dict = 1 #whatever media, extract them to make an interable if self.menu_state == "spots": sonos = SoCo(pod_dict['Rooms']['Living']) sonos_playlists = sonos.get_sonos_playlists() page_split = list(sonos_playlists) #print(page_split) #time.sleep(10) else: page_split = list(pod_dict["Pods"].items()) #what's the size of the iterable. cards_size = len(page_split) # if (self.page_num * 6) < cards_size: # finish = self.page_num * 6 # if self.page_num > 1: # start = (finish)-6 # else: # start = 0 # else: # finish = cards_size # start = ((self.page_num * 6)) - 6 temp_page = 0 total_pages = math.ceil(cards_size / 6) button_theme = get_theme('button') if self.menu_state == "spots": for x in range(0, int(total_pages)): index_dict = 1 split_page_array = [] back_button_array = [] front_button_array = [] for key in page_split: value = {} if math.ceil(index_dict / 6) == (temp_page + 1): value["label"] = key.title value['location'] = key.to_dict( )['resources'][0]['uri'] value["index_dict"] = index_dict - (temp_page * 6) new_button_front = BoxButton(value['label'], index_dict, on_press=callbacker, show_date=False, theme=button_theme, user_data=value) front_button_array.append(new_button_front) index_dict = index_dict + 1 temp_page += 1 split_page_array.append(front_button_array) split_page_array.append(back_button_array) self.buttons_list.append(split_page_array) #print((x.to_dict())['resources'][0]['uri']) else: for x in range(0, int(total_pages)): index_dict = 1 split_page_array = [] back_button_array = [] front_button_array = [] for key, value in page_split: if math.ceil(index_dict / 6) == (temp_page + 1): value["index_dict"] = index_dict - (temp_page * 6) new_button_front = BoxButton(value['label'], index_dict, on_press=callbacker, show_date=False, theme=button_theme, user_data=value) front_button_array.append(new_button_front) new_button_back = self.make_play_func( value['pod_id'], value['index_dict']) back_button_array.append(new_button_back) index_dict = index_dict + 1 temp_page += 1 split_page_array.append(front_button_array) split_page_array.append(back_button_array) self.buttons_list.append(split_page_array)
def make_play_func(self, pod_id, index_id): def flip_back(x): logging.info('splitting') flip_here = x - 1 flip_iter = 0 for x in self.buttons_list[self.page_num][0]: if 'Pile' in str(type(x)): temp_holder = self.buttons_list[ self.page_num][0][flip_iter] self.buttons_list[ self.page_num][0][flip_iter] = self.buttons_list[ self.page_num][1][flip_iter] self.buttons_list[ self.page_num][1][flip_iter] = temp_holder flip_iter += 1 self.poor_man_refresh() def get_random(self): logging.info('getting random.') def play_it_ran(): flip_back(index_id) logging.info('random threading') play_room = (str(pod_dict['Rooms']['Living'])) url = 'http://0.0.0.0:5005/preset/all_rooms/' r = requests.get(url) data = requests.get('http://0.0.0.0:5000/random/' + str(pod_id) + "/").json() time.sleep(1) sonos = SoCo(play_room) sonos.play_uri(data['location']) #parallel threading t = threading.Thread(name="sonos_play_thread", target=play_it_ran) t.start() def get_recent(self): logging.info('getting recent') def play_it_rec(): flip_back(index_id) logging.info('recent thread') url = 'http://0.0.0.0:5005/preset/all_rooms/' r = requests.get(url) play_room = (str(pod_dict['Rooms']['Living'])) sonos = SoCo(play_room) data = requests.get('http://0.0.0.0:5000/recent/' + str(pod_id)).json() sonos.play_uri(data['location']) sonos.play() #parallel threading t = threading.Thread(name="sonos_play_thread", target=play_it_rec) t.start() #func_dict = {"recent":get_recent,"random":get_random} split_theme = get_theme("button") split_array = [] split_array.append( BoxButton('recent', on_press=get_recent, show_date=False, user_data=None, theme=split_theme)) split_array.append(urwid.Divider(" ", top=0, bottom=0)) split_array.append( BoxButton('random', on_press=get_random, show_date=False, user_data=None, theme=split_theme)) return urwid.Pile(split_array)
def generate_middle_col(self, *args, **kwargs): return urwid.Filler( urwid.Pile([ BoxButton('+', on_press=self.add_player_to_game), BoxButton('-', on_press=self.remove_player_from_game) ]))