- Full PWA support with offline capabilities - Comprehensive search across songs, playlists, and channels - Offline playlist manager with download tracking - Pre-built frontend for zero-build deployment - Docker-based deployment with docker compose - Material-UI dark theme interface - YouTube audio download and management - Multi-user authentication support
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
"""Download API views"""
|
|
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from download.models import DownloadQueue
|
|
from download.serializers import DownloadQueueSerializer, AddToDownloadSerializer
|
|
from common.views import ApiBaseView, AdminWriteOnly
|
|
|
|
|
|
class DownloadListView(ApiBaseView):
|
|
"""Download queue list endpoint"""
|
|
permission_classes = [AdminWriteOnly]
|
|
|
|
def get(self, request):
|
|
"""Get download queue"""
|
|
status_filter = request.query_params.get('filter', 'pending')
|
|
queryset = DownloadQueue.objects.filter(owner=request.user, status=status_filter)
|
|
serializer = DownloadQueueSerializer(queryset, many=True)
|
|
return Response({'data': serializer.data})
|
|
|
|
def post(self, request):
|
|
"""Add to download queue"""
|
|
serializer = AddToDownloadSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
created_items = []
|
|
for url in serializer.validated_data['urls']:
|
|
item, created = DownloadQueue.objects.get_or_create(
|
|
owner=request.user,
|
|
url=url,
|
|
defaults={'auto_start': serializer.validated_data['auto_start']}
|
|
)
|
|
created_items.append(item)
|
|
|
|
response_serializer = DownloadQueueSerializer(created_items, many=True)
|
|
return Response(response_serializer.data, status=status.HTTP_201_CREATED)
|
|
|
|
def delete(self, request):
|
|
"""Clear download queue"""
|
|
status_filter = request.query_params.get('filter', 'pending')
|
|
DownloadQueue.objects.filter(owner=request.user, status=status_filter).delete()
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|