Can now import library tracks from front-end

This commit is contained in:
Eliot Berriot 2018-04-12 23:03:26 +02:00
parent 2cef58e6c1
commit 3a31248a3d
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
7 changed files with 249 additions and 4 deletions

View file

@ -1,6 +1,7 @@
import ffmpeg
import os
import json
import logging
import subprocess
import unicodedata
import urllib
@ -40,6 +41,8 @@ from . import serializers
from . import tasks
from . import utils
logger = logging.getLogger(__name__)
class SearchMixin(object):
search_fields = []
@ -223,6 +226,8 @@ class TrackFileViewSet(viewsets.ReadOnlyModelViewSet):
headers={
'Content-Type': 'application/activity+json'
})
logger.debug(
'Proxying media request to %s', library_track.audio_url)
response = StreamingHttpResponse(remote_response.iter_content())
else:
response = Response()
@ -249,6 +254,8 @@ class TrackFileViewSet(viewsets.ReadOnlyModelViewSet):
return Response(form.errors, status=400)
f = form.cleaned_data['track_file']
if not f.audio_file:
return Response(status=400)
output_kwargs = {
'format': form.cleaned_data['to']
}
@ -392,6 +399,22 @@ class SubmitViewSet(viewsets.ViewSet):
data, request, batch=None, import_request=import_request)
return Response(import_data)
@list_route(methods=['post'])
@transaction.non_atomic_requests
def federation(self, request, *args, **kwargs):
serializer = serializers.SubmitFederationTracksSerializer(
data=request.data)
serializer.is_valid(raise_exception=True)
batch = serializer.save(submitted_by=request.user)
for job in batch.jobs.all():
funkwhale_utils.on_commit(
tasks.import_job_run.delay,
import_job_id=job.pk,
use_acoustid=False,
)
return Response({'id': batch.id}, status=201)
@transaction.atomic
def _import_album(self, data, request, batch=None, import_request=None):
# we import the whole album here to prevent race conditions that occurs