streamer: integrate, fix, ui change

This commit is contained in:
bkfox
2024-04-28 18:59:33 +02:00
parent a64c850efa
commit 87692c860b
8 changed files with 79 additions and 76 deletions

12
aircox_streamer/viewsets.py Normal file → Executable file
View File

@ -46,7 +46,7 @@ class ControllerViewSet(viewsets.ViewSet):
if station_pk is None:
return None
if station_pk not in self.streamers:
raise Http404("station not found")
raise Http404(f"station not found: {station_pk}")
return self.streamers[station_pk]
def get_serializer(self, **kwargs):
@ -60,7 +60,8 @@ class ControllerViewSet(viewsets.ViewSet):
return serializer.data
def dispatch(self, request, *args, station_pk=None, **kwargs):
self.streamer = self.get_streamer(station_pk)
if not self.streamer:
self.streamer = self.get_streamer(station_pk)
return super().dispatch(request, *args, **kwargs)
@ -80,6 +81,9 @@ class StreamerViewSet(ControllerViewSet):
def dispatch(self, request, *args, pk=None, **kwargs):
if pk is not None:
kwargs.setdefault("station_pk", pk)
if pk := kwargs.get("station_pk"):
kwargs["station_pk"] = int(pk)
self.streamer = self.get_streamer(**kwargs)
self.object = self.streamer
return super().dispatch(request, *args, **kwargs)
@ -88,6 +92,8 @@ class StreamerViewSet(ControllerViewSet):
class SourceViewSet(ControllerViewSet):
serializer_class = SourceSerializer
model = controllers.Source
lookup_field = "pk"
lookup_value_converter = "str"
def get_sources(self):
return (s for s in self.streamer.sources if isinstance(s, self.model))
@ -139,7 +145,7 @@ class QueueSourceViewSet(SourceViewSet):
model = controllers.QueueSource
def get_sound_queryset(self, request):
return Sound.objects.station(request.station).broadcast()
return Sound.objects.station(request.station)
@action(detail=True, methods=["POST"])
def push(self, request, pk):