def edit(self): self._win.move(0, 0) self._text_box.edit() file_names = self._text_box.gather().split() self.draw() for file_name in file_names: Player.instance().add(file_name)
def __init__(self, win): import platform import getpass PlayerWindow.__init__(self, win) EventObserver.__init__(self, Player.instance()) self.user_info = '{user}@{hostname}'.format(user=getpass.getuser(), hostname=platform.node())
def __init__(self, pad, begin_y, begin_x, end_y, end_x): Widget.__init__(self) EventObserver.__init__(self, Player.instance()) self._pad = pad self._begin_y = begin_y self._begin_x = begin_x self._end_y = end_y self._end_x = end_x
def draw(self): selected_index = 0 for index, track in enumerate(Player.instance().track_list): filename = os.path.basename(track.file_path) track_path = Player.instance().current_track.file_path if filename == os.path.basename(track_path): self._pad.addstr(index, 0, track.title, curses.A_REVERSE) selected_index = index else: self._pad.addstr(index, 0, track.title, curses.A_NORMAL) diff = selected_index - (self._end_y - 1) // 2 start_row = 0 if diff < 0 else diff try: self._pad.refresh(start_row, 0, self._begin_y, self._begin_x, self._end_y - 1, self._end_x - 1) except: # do nothing because refresh returns ERR if two refreshes # happen in quick succession pass finally: self.dirty = False
def draw(self): self._win.clear() player = Player.instance() if player.current_track: file_path = player.current_track.file_path else: file_path = '' to_display = '{user_info}: {path}'.format(user_info=self.user_info, path=file_path) try: self._win.addstr(0, 0, to_display, curses.A_NORMAL) if not player.current_track: self._win.addstr(InfoWindow.NO_PLAYLIST_ERR, curses.A_REVERSE) except curses.error: pass self._win.refresh()
def draw(self): player = Player.instance() self._win.clear() state = 'Stopped' if player.is_playing(): state = 'Playing' elif player.is_paused(): state = 'Paused' name = player.current_track.title if player.current_track else '' to_display = self.display_format.format( state=state, title=name, progress=hms_format(player.get_current_second()), duration=hms_format(player.get_song_duration()), volume=str(int(round(player.volume, 2) * 100))) try: self._win.addstr(0, 0, to_display) except curses.error: pass self._win.refresh()
def main_loop(self): while True: player = Player.instance() self.draw() input_char = self._win.getch() if input_char == ord('h'): self.print_help() elif input_char == ord('n'): player.play_next() elif input_char == ord('p'): if player.is_playing(): player.pause() else: player.play() elif input_char == ord('+'): volume = player.volume + 0.1 if volume >= 1.0: volume = 1.0 player.volume = volume elif input_char == ord('-'): volume = player.volume - 0.1 if volume >= 1.0: volume = 1.0 player.volume = volume elif input_char == ord('a'): self.input_win.edit() elif input_char == ord('q'): player.exit() break elif input_char == curses.KEY_RESIZE: # resize all inner windows self._win.clear() max_y, max_x = self._win.getmaxyx() self.list_win.resize(1, max_x // 2, max_y - 2, max_x // 2) self.status_win.resize(max_y - 2, 0, 1, max_x) self.info_win.resize(0, 0, 1, max_x) elif input_char != -1: self._win.addstr('Unknown command %s' % input_char) time.sleep(0.1)
def _play_item(self, list_box, row): player = Player.instance() player.play(player.track_list[row.get_index()].file_path)
def __init__(self, win): PlayerWindow.__init__(self, win) EventObserver.__init__(self, Player.instance()) self.display_format = '{state} {title} | {progress}/{duration}' + \ ' | Volume: {volume}%'
def main(stdscr, playlist): player = Player(list(set(playlist))) if playlist: player.instance().play() main_window = MainWindow(stdscr) main_window.main_loop()