Esempio n. 1
0
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')
    })
Esempio n. 2
0
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')
    })
Esempio n. 3
0
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()
Esempio n. 4
0
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()
Esempio n. 5
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()]
    })
Esempio n. 6
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])
    })
Esempio n. 7
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()]
    })
Esempio n. 8
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])
    })
Esempio n. 9
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)
Esempio n. 10
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)
Esempio n. 11
0
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
    })
Esempio n. 12
0
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
    })