Initial commit - SoundWave v1.0

- 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
This commit is contained in:
Iulian 2025-12-16 23:43:07 +00:00
commit 51679d1943
254 changed files with 37281 additions and 0 deletions

42
backend/download/views.py Normal file
View file

@ -0,0 +1,42 @@
"""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)