def create_audio_source(request): """ View for dynamic creation of an audio source """ if request.method == 'POST': audio_source = AudioSource(title=request.POST['title'], length=0) audio_source.save() add_tags_to_model(request.POST['tags'], audio_source) playlist_tuples = [(int(key.split('_')[-1]), int(val)) for key, val in request.POST.items() if key.startswith('source_element_')] add_audiofiles_to_audiosource(playlist_tuples, audio_source) return JSONResponse({ 'status':'success', 'action':'creation', 'audiosource':audio_source.to_dict() }) return JSONResponse({ 'action': 'creation', 'tag_list': tag_list(), 'title': 'Creation d''une nouvelle playlist', 'form_url': reverse('create-audio-source') })
def create_audio_source(request): """ View for dynamic creation of an audio source """ if request.method == 'POST': audio_source = AudioSource(title=request.POST['title'], length=0) audio_source.save() add_tags_to_model(request.POST['tags'], audio_source) playlist_tuples = [(int(key.split('_')[-1]), int(val)) for key, val in request.POST.items() if key.startswith('source_element_')] add_audiofiles_to_audiosource(playlist_tuples, audio_source) return JSONResponse({ 'status': 'success', 'action': 'creation', 'audiosource': audio_source.to_dict() }) return JSONResponse({ 'action': 'creation', 'tag_list': tag_list(), 'title': 'Creation d' 'une nouvelle playlist', 'form_url': reverse('create-audio-source') })
def create_planning(request): """ View for dynamic creation of a planning """ planning_data = json.loads(request.POST['planning_data']) planning = Planning(name=planning_data['title']) planning.save() planning.add_elements(planning_data['planning_elements']) add_tags_to_model(planning_data['tags'], planning) return HttpResponse()
def edit_audio_file(request, audiofile_id): """ AJAX Returns a form to edit audiofile """ # TODO : Use js templating instead of django templating audiofile = get_object_or_404(AudioFile, pk=audiofile_id) form = EditAudioFileForm(initial={ 'title': audiofile.title, 'artist': audiofile.artist }) if request.method == 'POST': to_delete_tags = [ val for key, val in request.POST.items() if key.startswith('to_delete_tag') ] remaining_dict = dict([(k, v) for k, v in request.POST.items() if not key.startswith('to_delete_tag')]) form = EditAudioFileForm(remaining_dict) if form.is_valid(): artist = form.cleaned_data['artist'] title = form.cleaned_data['title'] if artist != audiofile.artist or title != audiofile.title: audiofile.title = title audiofile.artist = artist audiofile.save_and_update_file() add_tags_to_model(form.cleaned_data['tags'], audiofile) audiofile.save() remove_tags_from_model(audiofile, to_delete_tags) return JSONResponse({ 'audiofile': audiofile.to_dict(), 'status': 'ok' }) else: return JSONResponse( dict(form.errors.items() + [('status', 'errors')])) template = loader.get_template('audiosources/audiofile_edit_form.html') ctx = Context({'form': form, 'audiofile': audiofile}) return JSONResponse({ 'html': template.render(ctx), 'tag_list': tag_list(), 'audiofile': audiofile.to_dict(with_tags=True), 'artist_list': [a.name for a in Artist.objects.all()] })
def edit_audio_source(request, audiosource_id): """ JSON View for edition of an audio source (playlist) This view deletes every source element of the audio source every time it is edited """ # TODO: Send audio_source = get_object_or_404(AudioSource, id=audiosource_id) if request.method == 'POST': audio_source.title = request.POST['title'] audio_source.description = request.POST['description'] share = request.POST['share'] audio_source.share = True if share == "yes" else False audio_source.sourceelement_set.all().delete() audio_source.length = 0 add_tags_to_model(request.POST['tags'], audio_source) # Save to be able to add audiofiles to source audio_source.save() playlist_tuples = [(int(key.split('_')[-1]), int(val)) for key, val in request.POST.items() if key.startswith('source_element_')] to_delete_tags = [ val for key, val in request.POST.items() if key.startswith('to_delete_tag') ] remove_tags_from_model(audio_source, to_delete_tags) add_audiofiles_to_audiosource(playlist_tuples, audio_source) return JSONResponse({ 'status': 'success', 'action': 'edition', 'audiosource': audio_source.to_dict() }) return JSONResponse({ 'action': 'edition', 'tag_list': tag_list(), 'title': "Edition de la playlist %s" % audio_source.title, 'audiosource': audio_source.to_dict(with_audiofiles=True, with_tags=True), 'form_url': reverse('edit-audio-source', args=[audiosource_id]) })
def edit_audio_file(request, audiofile_id): """ AJAX Returns a form to edit audiofile """ # TODO : Use js templating instead of django templating audiofile = get_object_or_404(AudioFile, pk=audiofile_id) form = EditAudioFileForm(initial= {'title':audiofile.title, 'artist':audiofile.artist}) if request.method =='POST': to_delete_tags = [val for key, val in request.POST.items() if key.startswith('to_delete_tag')] remaining_dict = dict([(k, v) for k, v in request.POST.items() if not key.startswith('to_delete_tag')]) form = EditAudioFileForm(remaining_dict) if form.is_valid(): artist = form.cleaned_data['artist'] title = form.cleaned_data['title'] if artist != audiofile.artist or title != audiofile.title: audiofile.title = title audiofile.artist = artist audiofile.save_and_update_file() add_tags_to_model(form.cleaned_data['tags'], audiofile) audiofile.save() remove_tags_from_model(audiofile, to_delete_tags) return JSONResponse({ 'audiofile':audiofile.to_dict(), 'status':'ok' }) else: return JSONResponse(dict(form.errors.items() + [('status','errors')])) template = loader.get_template('audiosources/audiofile_edit_form.html') ctx = Context({'form':form, 'audiofile':audiofile}) return JSONResponse({ 'html':template.render(ctx), 'tag_list':tag_list(), 'audiofile': audiofile.to_dict(with_tags=True), 'artist_list':[a.name for a in Artist.objects.all()] })
def edit_audio_source(request, audiosource_id): """ JSON View for edition of an audio source (playlist) This view deletes every source element of the audio source every time it is edited """ # TODO: Send audio_source = get_object_or_404(AudioSource, id=audiosource_id) if request.method == 'POST': audio_source.title = request.POST['title'] audio_source.description = request.POST['description'] share = request.POST['share'] audio_source.share = True if share == "yes" else False audio_source.sourceelement_set.all().delete() audio_source.length = 0 add_tags_to_model(request.POST['tags'], audio_source) # Save to be able to add audiofiles to source audio_source.save() playlist_tuples = [(int(key.split('_')[-1]), int(val)) for key, val in request.POST.items() if key.startswith('source_element_')] to_delete_tags = [val for key, val in request.POST.items() if key.startswith('to_delete_tag')] remove_tags_from_model(audio_source, to_delete_tags) add_audiofiles_to_audiosource(playlist_tuples, audio_source) return JSONResponse({ 'status':'success', 'action':'edition', 'audiosource':audio_source.to_dict() }) return JSONResponse({ 'action':'edition', 'tag_list':tag_list(), 'title': "Edition de la playlist %s" % audio_source.title, 'audiosource':audio_source.to_dict(with_audiofiles=True, with_tags=True), 'form_url': reverse('edit-audio-source', args=[audiosource_id]) })
def edit_planning(request, planning_id): """ View for edition of a planning """ planning = Planning.objects.get(id=planning_id) if request.method == 'POST': planning_data = json.loads(request.POST['planning_data']) planning.planningelement_set.all().delete() planning.add_elements(planning_data['planning_elements']) planning.name = planning_data["title"] remove_tags_from_model(planning, planning_data["to_delete_tags"]) add_tags_to_model(planning_data['tags'], planning) planning.save() return HttpResponse() else: planning_dict = planning.to_dict(with_tags=True) pe_dicts = [pe.to_dict() for pe in planning.planningelement_set.all()] planning_dict["planning_elements"] = pe_dicts return JSONResponse(planning_dict)
def edit_audio_files(request): """ Edit several audio files at once """ audiofiles_ids_list = request.POST.getlist("audiofiles") audiofiles = AudioFile.objects.filter(id__in=audiofiles_ids_list) tags_updated = artist_updated = False if request.POST["tags"]: tags_updated = True for audiofile in audiofiles: add_tags_to_model(request.POST["tags"], audiofile) if request.POST["artist"]: artist_updated = True audiofiles.update(artist=request.POST["artist"]) return JSONResponse({ 'tags_updated':tags_updated, 'artist_updated':artist_updated })
def edit_audio_files(request): """ Edit several audio files at once """ audiofiles_ids_list = request.POST.getlist("audiofiles") audiofiles = AudioFile.objects.filter(id__in=audiofiles_ids_list) tags_updated = artist_updated = False if request.POST["tags"]: tags_updated = True for audiofile in audiofiles: add_tags_to_model(request.POST["tags"], audiofile) if request.POST["artist"]: artist_updated = True audiofiles.update(artist=request.POST["artist"]) return JSONResponse({ 'tags_updated': tags_updated, 'artist_updated': artist_updated })