Exemple #1
0
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()]
    })
Exemple #2
0
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])
    })
Exemple #3
0
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()]
    })
Exemple #4
0
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])
    })
Exemple #5
0
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)
Exemple #6
0
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)