56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
import logging
|
|
from typing import Optional
|
|
from aiohttp import ClientSession, ClientTimeout
|
|
|
|
"""Radio Utils"""
|
|
|
|
|
|
async def get_now_playing() -> Optional[str]:
|
|
"""
|
|
Get radio now playing
|
|
Args:
|
|
None
|
|
Returns:
|
|
str
|
|
"""
|
|
np_url: str = "https://api.codey.lol/radio/np"
|
|
try:
|
|
async with ClientSession() as session:
|
|
async with await session.post(
|
|
np_url,
|
|
headers={
|
|
"content-type": "application/json; charset=utf-8",
|
|
},
|
|
timeout=ClientTimeout(connect=1.5, sock_read=1.5),
|
|
) as request:
|
|
request.raise_for_status()
|
|
response_json = await request.json()
|
|
artistsong = response_json.get("artistsong")
|
|
return artistsong
|
|
except Exception as e:
|
|
logging.critical("Now playing retrieval failed: %s", str(e))
|
|
return None
|
|
|
|
|
|
async def skip() -> bool:
|
|
"""
|
|
Ask LiquidSoap server to skip to the next track
|
|
Args:
|
|
None
|
|
Returns:
|
|
bool
|
|
"""
|
|
try:
|
|
ls_uri: str = "http://127.0.0.1:29000"
|
|
async with ClientSession() as session:
|
|
async with session.get(
|
|
f"{ls_uri}/next", timeout=ClientTimeout(connect=2, sock_read=2)
|
|
) as request:
|
|
request.raise_for_status()
|
|
text: Optional[str] = await request.text()
|
|
return text == "OK"
|
|
except Exception as e:
|
|
logging.debug("Skip failed: %s", str(e))
|
|
|
|
return False # failsafe
|