webhook / album art changes
This commit is contained in:
parent
7145e86ded
commit
55bd485af4
@ -69,6 +69,7 @@ class Radio(FastAPI):
|
||||
app.add_api_route("/radio/album_art", self.album_art_handler, methods=["GET"],
|
||||
include_in_schema=True)
|
||||
asyncio.get_event_loop().run_until_complete(self.load_playlist())
|
||||
asyncio.get_event_loop().run_until_complete(self._ls_skip())
|
||||
|
||||
|
||||
def get_queue_item_by_uuid(self, uuid: str) -> tuple[int, dict] | None:
|
||||
@ -269,7 +270,8 @@ class Radio(FastAPI):
|
||||
query = "SELECT album_art FROM tracks WHERE id = ?"
|
||||
query_params = (track_id,)
|
||||
|
||||
if file_path:
|
||||
if file_path and not track_id:
|
||||
logging.info("Searchijng w filePath %s", file_path)
|
||||
query = "SELECT album_art FROM tracks WHERE file_path = ?"
|
||||
query_params = (file_path,)
|
||||
|
||||
@ -295,7 +297,8 @@ class Radio(FastAPI):
|
||||
file_path = file_path.replace("/paul/toons/",
|
||||
"/singer/gogs_toons/")
|
||||
logging.info("Seeking %s", original_file_path)
|
||||
cached_album_art = await self.get_album_art(file_path=original_file_path)
|
||||
cached_album_art = await self.get_album_art(file_path=original_file_path,
|
||||
track_id=track_id)
|
||||
if cached_album_art:
|
||||
logging.info("Returning from cache!")
|
||||
return cached_album_art
|
||||
@ -308,9 +311,10 @@ class Radio(FastAPI):
|
||||
traceback.print_exc()
|
||||
|
||||
# TODO: Optimize/cache
|
||||
async def album_art_handler(self, request: Request) -> bytes:
|
||||
async def album_art_handler(self, request: Request, track_id: Optional[int] = None) -> bytes:
|
||||
try:
|
||||
album_art = await self._get_album_art()
|
||||
logging.info("Seeking album art with trackId: %s", track_id)
|
||||
album_art = await self._get_album_art(track_id=track_id)
|
||||
if not album_art:
|
||||
return RedirectResponse(url="https://codey.lol/images/radio_art_default.jpg",
|
||||
status_code=302)
|
||||
@ -337,7 +341,7 @@ class Radio(FastAPI):
|
||||
|
||||
|
||||
async def radio_get_next(self, data: ValidRadioNextRequest, request: Request,
|
||||
background_tasks: BackgroundTasks) -> dict:
|
||||
background_tasks: BackgroundTasks) -> Optional[dict]:
|
||||
"""
|
||||
Get next track
|
||||
Args:
|
||||
@ -349,42 +353,43 @@ class Radio(FastAPI):
|
||||
"""
|
||||
if not self.util.check_key(path=request.url.path, req_type=4, key=data.key):
|
||||
raise HTTPException(status_code=403, detail="Unauthorized")
|
||||
if not isinstance(self.active_playlist, list) or not self.active_playlist:
|
||||
await self.load_playlist()
|
||||
await self._ls_skip()
|
||||
return
|
||||
next = self.active_playlist.pop(0)
|
||||
if not isinstance(next, dict):
|
||||
logging.info("next is of type: %s, reloading playlist...", type(next))
|
||||
await self.load_playlist()
|
||||
await self._ls_skip()
|
||||
return
|
||||
|
||||
if isinstance(self.active_playlist, list) and self.active_playlist:
|
||||
next = self.active_playlist.pop(0)
|
||||
if not isinstance(next, dict):
|
||||
logging.info("next is of type: %s, reloading playlist...", type(next))
|
||||
await self.load_playlist()
|
||||
return await self.radio_pop_track(request, recursion_type="not dict: next")
|
||||
duration = next['duration']
|
||||
time_started = int(time.time())
|
||||
time_ends = int(time_started + duration)
|
||||
|
||||
duration = next['duration']
|
||||
time_started = int(time.time())
|
||||
time_ends = int(time_started + duration)
|
||||
|
||||
if len(self.active_playlist) > 1:
|
||||
self.active_playlist.append(next) # Push to end of playlist
|
||||
else:
|
||||
await self.load_playlist()
|
||||
|
||||
logging.info("Returning %s", next['artistsong'])
|
||||
# logging.info("Top 5 songs in playlist: %s, bottom: %s",
|
||||
# self.active_playlist[0:6], self.active_playlist[-6:])
|
||||
self.now_playing = next
|
||||
next['start'] = time_started
|
||||
next['end'] = time_ends
|
||||
try:
|
||||
background_tasks.add_task(self.radio_util.webhook_song_change, next)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
if not await self.get_album_art(file_path=next['file_path']):
|
||||
album_art = await self._get_album_art(next['file_path'])
|
||||
await self.cache_album_art(next['id'], album_art)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
return next
|
||||
if len(self.active_playlist) > 1:
|
||||
self.active_playlist.append(next) # Push to end of playlist
|
||||
else:
|
||||
return await self.radio_pop_track(request, recursion_type="not list: self.active_playlist")
|
||||
await self.load_playlist()
|
||||
|
||||
logging.info("Returning %s", next['artistsong'])
|
||||
# logging.info("Top 5 songs in playlist: %s, bottom: %s",
|
||||
# self.active_playlist[0:6], self.active_playlist[-6:])
|
||||
self.now_playing = next
|
||||
next['start'] = time_started
|
||||
next['end'] = time_ends
|
||||
try:
|
||||
background_tasks.add_task(self.radio_util.webhook_song_change, next)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
try:
|
||||
if not await self.get_album_art(file_path=next['file_path']):
|
||||
album_art = await self._get_album_art(next['file_path'])
|
||||
await self.cache_album_art(next['id'], album_art)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
return next
|
||||
|
||||
|
||||
async def radio_request(self, data: ValidRadioSongRequest, request: Request) -> Response:
|
||||
|
@ -65,8 +65,11 @@ class RadioUtil:
|
||||
'username': 'serious.FM',
|
||||
"embeds": [{
|
||||
"title": "Now Playing",
|
||||
"description": f'# {track['song']}\nby **{track['artist']}**',
|
||||
"description": f'## {track['song']}\nby\n## {track['artist']}',
|
||||
"color": 0x30c56f,
|
||||
"thumbnail": {
|
||||
"url": f"https://api.codey.lol/radio/album_art?track_id={track['id']}&{time.time()}",
|
||||
},
|
||||
"fields": [
|
||||
{
|
||||
"name": "Duration",
|
||||
|
Loading…
x
Reference in New Issue
Block a user