Esempio n. 1
0
    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)
Esempio n. 2
0
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))
Esempio n. 3
0
        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")
Esempio n. 4
0
 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
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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()
Esempio n. 8
0
 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()
Esempio n. 9
0
 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()
Esempio n. 10
0
    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
Esempio n. 11
0
 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)
Esempio n. 12
0
    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)
Esempio n. 13
0
    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)
Esempio n. 14
0
    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)
Esempio n. 15
0
 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)
         ]))