98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
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)
|
|
|
|
conn.getAlbums()
|
|
|
|
# player.play_song(echidna_id)
|
|
|