Files
beefy-player/beefy_player/providers/bassdrive/fallback.py
T

57 lines
1.7 KiB
Python

"""Bundled station, so a cold offline start still makes sense.
Bassdrive is one station with three mounts and a handful of mirror hosts; the
streams below are the ones its own ``.m3u`` files list. The live status-json
always wins when it is reachable.
"""
from __future__ import annotations
from typing import Any
# (url, format, quality, bitrate)
_MOUNTS: tuple[tuple[str, str, str, str], ...] = (
("https://ice.bassdrive.net:443/stream", "mp3", "highest", "128"),
("https://ice.bassdrive.net:443/stream56", "aacp", "high", "56"),
("https://ice.bassdrive.net:443/stream32", "aacp", "low", "32"),
)
#: Alternative servers from bassdrive.m3u, tried when the primary is down.
_MIRRORS: tuple[str, ...] = (
"http://chi.bassdrive.co:80",
"http://bassdrive.radioca.st:8702",
"http://stream.bassdrive.uk:8200",
"http://au.bassdrive.co:8000",
)
_SERVER_TYPE = {"mp3": "audio/mpeg", "aacp": "audio/aacp"}
def fallback_status() -> dict[str, Any]:
"""A ``status-json.xsl``-shaped payload, so the normal parser can eat it."""
return {
"icestats": {
"source": [
{
"listenurl": url,
"bitrate": int(bitrate),
"server_type": _SERVER_TYPE.get(fmt, "audio/mpeg"),
"listeners": 0,
"display-title": "",
}
for url, fmt, _quality, bitrate in _MOUNTS
]
}
}
def fallback_stations() -> list[Any]:
from .api import station_from_status
station = station_from_status(fallback_status())
return [station] if station is not None else []
def known_stream_urls() -> list[str]:
return [url for url, _format, _quality, _bitrate in _MOUNTS] + list(_MIRRORS)