subclient

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

commit 2be43369eb260b9a5bbd7e3449aa6cf94335b337
parent 8ea075cbd70cefccbf755e5ad7ba5a304f58eaf5
Author: Paco Esteban <paco@e1e0.net>
Date:   Mon, 18 Oct 2021 19:00:33 +0200

mock up of a list window and info window.  pretty crappy for now

Diffstat:
Mrequirements.txt | 2+-
Msubclient/subclient.py | 34++++++++++++++++++++++------------
2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/requirements.txt b/requirements.txt @@ -1 +1 @@ -py-sonic==0.7.9 +python-mpv-jsonipc==1.1.13 diff --git a/subclient/subclient.py b/subclient/subclient.py @@ -29,9 +29,13 @@ class SubClient: self.player = player.Player(self.subsonic) - self.window = None - self.hight = 0 + self.stdscr = None + self.listwin = None + self.infowin = None + self.height = 0 self.width = 0 + self.listwin_height = 0 + self.infowin_height = 0 self.init_curses() self.nav_list = self.subsonic.get_artists() @@ -39,21 +43,27 @@ class SubClient: self.nav_selected = 0 self.nav_top = 0 self.nav_bottom = len(self.nav_list) - self.nav_max_lines = curses.LINES + self.nav_max_lines = self.listwin_height self.nav_pages = self.nav_bottom // self.nav_max_lines self.artist = None def init_curses(self): - self.window = curses.initscr() - self.window.keypad(True) + self.stdscr = curses.initscr() + self.height, self.width = self.stdscr.getmaxyx() + # leave room for the info window + self.listwin_height = int(self.height * 0.8) + self.infowin_height = self.height - self.listwin_height + self.listwin = curses.newwin(self.listwin_height, self.width, + 0, 0) + self.infowin = curses.newwin(3, self.width, + self.listwin_height + 2, 0) + self.listwin.keypad(True) curses.curs_set(0) # disable cursor curses.noecho() curses.cbreak() - self.height, self.width = self.window.getmaxyx() - def run(self): # read chars until we exit, then clean try: @@ -66,11 +76,11 @@ class SubClient: def input_loop(self): while True: - self.window.erase() + self.listwin.erase() self.load_list() self.refresh() - c = self.window.getkey() + c = self.listwin.getkey() if c == 'q': # quit break elif c == 'j': @@ -100,9 +110,9 @@ class SubClient: for i, t in enumerate( self.nav_list[self.nav_top:self.nav_top + self.nav_max_lines]): if i == self.nav_selected: - self.window.addstr(i, 0, str(t), curses.A_REVERSE) + self.listwin.addstr(i, 0, str(t), curses.A_REVERSE) else: - self.window.addstr(i, 0, str(t)) + self.listwin.addstr(i, 0, str(t)) def nav_scroll(self, direction): # next cursor position @@ -187,7 +197,7 @@ class SubClient: self.nav_pages = self.nav_bottom // self.nav_max_lines def refresh(self): - self.window.noutrefresh() + self.listwin.noutrefresh() curses.doupdate()