Exemple #1
0
 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)
Exemple #2
0
 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())
Exemple #3
0
 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
Exemple #4
0
 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
Exemple #5
0
 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()
Exemple #6
0
 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()
Exemple #7
0
 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)
Exemple #8
0
 def _play_item(self, list_box, row):
     player = Player.instance()
     player.play(player.track_list[row.get_index()].file_path)
Exemple #9
0
 def __init__(self, win):
     PlayerWindow.__init__(self, win)
     EventObserver.__init__(self, Player.instance())
     self.display_format = '{state} {title} | {progress}/{duration}' + \
                           ' | Volume: {volume}%'
Exemple #10
0
def main(stdscr, playlist):
    player = Player(list(set(playlist)))
    if playlist:
        player.instance().play()
    main_window = MainWindow(stdscr)
    main_window.main_loop()