This commit is contained in:
codey 2025-02-11 20:49:14 -05:00
parent 88d870ce8f
commit 128019423b
2 changed files with 23 additions and 7 deletions

View File

@ -242,6 +242,15 @@ class ValidRadioSongRequest(BaseModel):
artistsong: str | None = None artistsong: str | None = None
alsoSkip: bool = False alsoSkip: bool = False
class ValidRadioQueueGetRequest(BaseModel):
"""
- **key**: API key (optional, needed if specifying a non-default limit)
- **limit**: optional, default: 15k
"""
key: str|None = None
limit: int|None = 15000
class ValidRadioNextRequest(BaseModel): class ValidRadioNextRequest(BaseModel):
""" """
- **key**: API Key - **key**: API Key

View File

@ -11,7 +11,8 @@ import regex
import music_tag import music_tag
from . import radio_util from . import radio_util
from .constructors import ValidRadioNextRequest, ValidRadioReshuffleRequest, ValidRadioQueueShiftRequest,\ from .constructors import ValidRadioNextRequest, ValidRadioReshuffleRequest, ValidRadioQueueShiftRequest,\
ValidRadioQueueRemovalRequest, ValidRadioSongRequest, RadioException ValidRadioQueueRemovalRequest, ValidRadioSongRequest,\
ValidRadioQueueGetRequest, RadioException
from uuid import uuid4 as uuid from uuid import uuid4 as uuid
from typing import Optional, LiteralString from typing import Optional, LiteralString
from fastapi import FastAPI, BackgroundTasks, Request, Response, HTTPException from fastapi import FastAPI, BackgroundTasks, Request, Response, HTTPException
@ -19,6 +20,11 @@ from fastapi.responses import RedirectResponse
from aiohttp import ClientSession, ClientTimeout from aiohttp import ClientSession, ClientTimeout
# pylint: disable=bare-except, broad-exception-caught, invalid-name # pylint: disable=bare-except, broad-exception-caught, invalid-name
"""
TODO:
- Radio request typeahead
"""
class Radio(FastAPI): class Radio(FastAPI):
"""Radio Endpoints""" """Radio Endpoints"""
@ -59,7 +65,7 @@ class Radio(FastAPI):
raise HTTPException(status_code=403, detail="Unauthorized") raise HTTPException(status_code=403, detail="Unauthorized")
if data.skipTo: if data.skipTo:
(x, _) = self.radio_util.get_queue_item_by_uuid(data.skipTo) (x, _) = self.radio_util.get_queue_item_by_uuid(data.skipTo)
self.radio_util.active_playlist: list = self.radio_util.active_playlist[x:] self.radio_util.active_playlist = self.radio_util.active_playlist[x:]
if not self.radio_util.active_playlist: if not self.radio_util.active_playlist:
await self.radio_util.load_playlist() await self.radio_util.load_playlist()
return await self.radio_util._ls_skip() return await self.radio_util._ls_skip()
@ -81,12 +87,13 @@ class Radio(FastAPI):
} }
async def radio_get_queue(self, request: Request, limit: int = 20_000) -> dict: async def radio_get_queue(self, request: Request, limit: Optional[int] = 15_000) -> dict:
""" """
Get current play queue, up to limit n [default: 20k] Get current play queue, up to limit [default: 15k]
""" """
queue_out = []
for x, item in enumerate(self.radio_util.active_playlist[0:limit+1]): queue_out: list[dict] = []
for x, item in enumerate(self.radio_util.active_playlist[0:limit]):
queue_out.append({ queue_out.append({
'pos': x, 'pos': x,
'id': item.get('id'), 'id': item.get('id'),
@ -189,7 +196,7 @@ class Radio(FastAPI):
else: else:
await self.radio_util.load_playlist() await self.radio_util.load_playlist()
self.radio_util.now_playing: dict = next self.radio_util.now_playing = next
next['start'] = time_started next['start'] = time_started
next['end'] = time_ends next['end'] = time_ends
try: try: