Files
subpy/main.py
T
2025-01-17 14:14:57 -06:00

96 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)
# player.play_song(echidna_id)