subclient

Subsonic ncurses client
git clone https://git.e1e0.net/subclient.git
Log | Files | Refs | README

commit 1c7633a9f26f8dffb3af4e87559023c772d9018a
parent 43d1062cc6c524fe6886dd4f26fc68b5ae393f89
Author: Paco Esteban <paco@e1e0.net>
Date:   Sat, 26 Jun 2021 17:57:32 +0200

basic up/down navigation in curses

Diffstat:
Msubclient/subclient.py | 50++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 44 insertions(+), 6 deletions(-)

diff --git a/subclient/subclient.py b/subclient/subclient.py @@ -24,15 +24,51 @@ class SubClient: self.config = configparser.ConfigParser() self.config.read(get_config_file()) self.subsonic = subsonic.Subsonic(self.config['subclient']) - self.artists = self.subsonic.get_artists() + self.nav_list = self.subsonic.get_artists() + self.nav_y = 0 + self.nav_selected = 0 + self.nav_list_selected = 0 def load_artists(self): - for i, artist in enumerate(self.artists): - self.nav_win.addstr(i, 0, artist.name) + for i, artist in enumerate(self.nav_list): + if i == self.nav_list_selected: + self.nav_win.addstr(i, 0, artist.name, curses.A_REVERSE) + else: + self.nav_win.addstr(i, 0, artist.name) + + def nav_down(self): + self.nav_selected += 1 + self.nav_list_selected += 1 + if self.nav_list_selected > len(self.nav_list): + self.nav_list_selected = len(self.nav_list) + if self.nav_selected >= (curses.LINES - 3): + self.nav_y += 1 + self.nav_selected = curses.LINES - 3 + self.nav_win.clear() + self.load_artists() + self.nav_win.refresh(self.nav_y, 0, 0, 0, + curses.LINES - 1, curses.COLS - 1) + + def nav_up(self): + self.nav_selected -= 1 + self.nav_list_selected -= 1 + if self.nav_list_selected < 0: + self.nav_list_selected = 0 + if self.nav_selected <= 3: + self.nav_y -= 1 + if self.nav_selected < 0: + self.nav_selected = 0 + if self.nav_y < 0: + self.nav_y = 0 + self.nav_win.clear() + self.load_artists() + self.nav_win.refresh(self.nav_y, 0, 0, 0, + curses.LINES - 1, curses.COLS - 1) def refresh(self): self.stdscr.noutrefresh() - self.nav_win.noutrefresh(0, 0, 0, 0, curses.LINES - 1, curses.COLS - 1) + self.nav_win.noutrefresh(self.nav_y, 0, 0, 0, + curses.LINES - 1, curses.COLS - 1) curses.doupdate() def main_loop(self): @@ -41,11 +77,13 @@ class SubClient: if c == 'q': # quit break elif c == 'j': - self.stdscr.clear() + self.nav_down() + elif c == 'k': + self.nav_up() def start(self, stdscr): self.stdscr = stdscr - self.nav_win = curses.newpad(len(self.artists) + 1, curses.COLS - 1) + self.nav_win = curses.newpad(len(self.nav_list) + 1, curses.COLS - 1) self.stdscr.clear() curses.curs_set(0) # disable cursor self.load_artists()