104 lines
3.2 KiB
Python
104 lines
3.2 KiB
Python
|
|
"""Views for Quick Sync adaptive streaming"""
|
||
|
|
from rest_framework.views import APIView
|
||
|
|
from rest_framework.response import Response
|
||
|
|
from rest_framework.permissions import IsAuthenticated
|
||
|
|
from rest_framework import status
|
||
|
|
from django.core.cache import cache
|
||
|
|
|
||
|
|
from audio.quick_sync_service import QuickSyncService
|
||
|
|
|
||
|
|
|
||
|
|
class QuickSyncStatusView(APIView):
|
||
|
|
"""Get Quick Sync status and recommendations"""
|
||
|
|
|
||
|
|
permission_classes = [IsAuthenticated]
|
||
|
|
|
||
|
|
def get(self, request):
|
||
|
|
"""Get current quick sync status"""
|
||
|
|
service = QuickSyncService()
|
||
|
|
user_prefs = service.get_user_preferences(request.user.id)
|
||
|
|
sync_status = service.get_quick_sync_status(user_prefs)
|
||
|
|
|
||
|
|
return Response({
|
||
|
|
'status': sync_status,
|
||
|
|
'preferences': user_prefs,
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
class QuickSyncPreferencesView(APIView):
|
||
|
|
"""Manage Quick Sync user preferences"""
|
||
|
|
|
||
|
|
permission_classes = [IsAuthenticated]
|
||
|
|
|
||
|
|
def get(self, request):
|
||
|
|
"""Get user's quick sync preferences"""
|
||
|
|
service = QuickSyncService()
|
||
|
|
prefs = service.get_user_preferences(request.user.id)
|
||
|
|
|
||
|
|
return Response(prefs)
|
||
|
|
|
||
|
|
def post(self, request):
|
||
|
|
"""Update user's quick sync preferences"""
|
||
|
|
service = QuickSyncService()
|
||
|
|
|
||
|
|
preferences = {
|
||
|
|
'mode': request.data.get('mode', 'auto'),
|
||
|
|
'prefer_quality': request.data.get('prefer_quality', True),
|
||
|
|
'adapt_to_system': request.data.get('adapt_to_system', True),
|
||
|
|
'auto_download_quality': request.data.get('auto_download_quality', False),
|
||
|
|
}
|
||
|
|
|
||
|
|
success = service.update_user_preferences(request.user.id, preferences)
|
||
|
|
|
||
|
|
if success:
|
||
|
|
# Get updated status
|
||
|
|
sync_status = service.get_quick_sync_status(preferences)
|
||
|
|
return Response({
|
||
|
|
'message': 'Quick Sync preferences updated',
|
||
|
|
'preferences': preferences,
|
||
|
|
'status': sync_status,
|
||
|
|
})
|
||
|
|
else:
|
||
|
|
return Response(
|
||
|
|
{'error': 'Failed to update preferences'},
|
||
|
|
status=status.HTTP_400_BAD_REQUEST
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class QuickSyncTestView(APIView):
|
||
|
|
"""Test network speed for Quick Sync"""
|
||
|
|
|
||
|
|
permission_classes = [IsAuthenticated]
|
||
|
|
|
||
|
|
def post(self, request):
|
||
|
|
"""Run network speed test"""
|
||
|
|
service = QuickSyncService()
|
||
|
|
|
||
|
|
# Clear cache to force new test
|
||
|
|
cache.delete('quick_sync_network_speed')
|
||
|
|
|
||
|
|
speed = service.measure_network_speed()
|
||
|
|
system_resources = service.get_system_resources()
|
||
|
|
|
||
|
|
return Response({
|
||
|
|
'network_speed_mbps': speed,
|
||
|
|
'system_resources': system_resources,
|
||
|
|
'recommended_quality': service.get_recommended_quality()[0],
|
||
|
|
'timestamp': system_resources['timestamp'],
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
class QuickSyncQualityPresetsView(APIView):
|
||
|
|
"""Get available quality presets"""
|
||
|
|
|
||
|
|
permission_classes = [IsAuthenticated]
|
||
|
|
|
||
|
|
def get(self, request):
|
||
|
|
"""Get all quality presets"""
|
||
|
|
service = QuickSyncService()
|
||
|
|
|
||
|
|
return Response({
|
||
|
|
'presets': service.QUALITY_PRESETS,
|
||
|
|
'thresholds': service.SPEED_THRESHOLDS,
|
||
|
|
})
|