Ejemplo n.º 1
0
class Controller():

    def __init__(self, user=None):
        self.api = DribleAPI()
        self.view = View()
        self.user = user
        self.player = MPDClient()
        self.current_station = None

        ## Setup MPDClient
        self.player.timeout = 10
        self.player.idletimeout = None
        self.player.connect("localhost", 6600)

    def login(self):
        while True:
            username = self.view.login()

            if username == "exit()":
                break

            self.user = User.get(username=username)

            ## User not found
            if self.user is None:
                ans = self.view.user_not_found(username)
                if ans == 'y' or ans == 'Y':
                    if User.create(username=username) is None:
                        self.view.error()
                    continue
            else:
                self.__user_menu()


    def __user_menu(self):
        while True:
            choice = self.view.user_menu(self.user.username)

            ## Logout
            if choice == '5':
                break

            elif choice == '1':
                current_station = self.api.get_random_station()
                self.player.add(current_station['streamurl'])
                self.player.play()

                while True:
                    choice = self.view.player_menu(current_station['name'], self.player.status()['volume'])
                    if choice == '1':
                        ## Make sure connection
                        try:
                            self.player.connect("localhost", 6600)
                        except ConnectionError:
                            ## already connected
                            pass

                        self.player.stop()
                        self.player.clear()
                        break

                    elif choice == '2':
                        vol = self.view.user_prompt('Set volume to (0~100): ')
                        try:
                            self.player.setvol(vol)
                        except CommandError:
                            self.view.error("Invalid volume value, only accept an integer between 0-100")

            else:
                continue