import urwid # txt = urwid.Text("hello world") # fill = urwid.Filler(txt, "top") # loop = urwid.MainLoop(fill) # loop.run() import os import io from typing import Iterable os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide" import pygame import SubSonic u = 'pseudo' p = 'telegram9dock-MICHEL' conn = SubSonic.SubpyConn(u, p, "https://music.0x01fe.net") echidna_id = "937004317800a879f0cddd471fb82387" pygame.mixer.init() class SubPyPlayer: conn: SubSonic.SubpyConn main: urwid.Padding def __init__(self, conn: SubSonic.SubpyConn): self.conn = conn self.main = urwid.Padding(self.menu('test', ['Artists', 'Albums', 'Songs', 'Playlists']), left=2, right=2) top = urwid.Overlay( self.main, urwid.SolidFill("\N{MEDIUM SHADE}"), align=urwid.CENTER, width=(urwid.RELATIVE, 60), valign=urwid.MIDDLE, height=(urwid.RELATIVE, 60), min_width=20, min_height=9, ) urwid.MainLoop(top, palette=[("reversed", "standout", "")]).run() # Currently Blocking def play_song(self, song_id: str): r = self.conn.stream(song_id) # convert stream to bytes io thing audio_data = io.BytesIO(r.content) pygame.mixer.music.load(audio_data) pygame.mixer.music.play() while pygame.mixer.music.get_busy(): pygame.time.Clock().tick(10) def menu(self, title: str, choices_: Iterable[str]) -> urwid.ListBox: body = [urwid.Text(title), urwid.Divider()] for c in choices_: button = urwid.Button(c) urwid.connect_signal(button, "click", self.item_chosen, c) body.append(urwid.AttrMap(button, None, focus_map="reversed")) return urwid.ListBox(urwid.SimpleFocusListWalker(body)) def item_chosen(self, button: urwid.Button, choice: str) -> None: response = urwid.Text(["You chose ", choice, "\n"]) done = urwid.Button("Ok") urwid.connect_signal(done, "click", self.exit_program) self.main.original_widget = urwid.Filler( urwid.Pile( [ response, urwid.AttrMap(done, None, focus_map="reversed"), ] ) ) def exit_program(self, button: urwid.Button) -> None: raise urwid.ExitMainLoop() # player = SubPyPlayer(conn) # for album in conn.getAllAlbums(): # print(album.name) # for playlist in conn.getPlaylists(): # print(playlist.name, playlist.duration) for song in conn.getStarredSongs(): print(song.title) # player.play_song(echidna_id)