def create_new_glossvideo(gloss, video_path, dry_run):
    # Backup the existing video objects stored in the database
    if not dry_run:
        existing_videos = GlossVideo.objects.filter(gloss=gloss)
        for video_object in existing_videos:
            video_object.reversion(revert=False)

    print("Gloss {} (id: {}): creating a new glossvideo.".format(
        gloss, gloss.id))
    new_glossvideo = GlossVideo(gloss=gloss, videofile=video_path)
    if not dry_run:
        new_glossvideo.save()
        new_glossvideo.move_video()
Beispiel #2
0
def addvideo(request):
    """View to present a video upload form and process
    the upload"""

    if request.method == 'POST':

        form = VideoUploadForGlossForm(request.POST, request.FILES)
        if form.is_valid():

            gloss_id = form.cleaned_data['gloss_id']
            gloss = get_object_or_404(Gloss, pk=gloss_id)

            # deal with any existing video for this sign
            goal_folder = WRITABLE_FOLDER + GLOSS_VIDEO_DIRECTORY + '/' + gloss.idgloss[:
                                                                                        2] + '/'
            goal_filename = gloss.idgloss + '-' + str(gloss.pk) + '.mp4'
            goal_location = goal_folder + goal_filename

            vfile = form.cleaned_data['videofile']
            vfile.name = gloss.idgloss + "-" + str(gloss.pk) + ".mp4"
            redirect_url = form.cleaned_data['redirect']

            old_vid = GlossVideo.objects.filter(gloss_id=gloss_id)
            old_vid.first().delete()

            # make a new GlossVideo object for the new file
            video = GlossVideo(videofile=vfile, gloss=gloss)
            video.save()

            # Issue #162: log the upload history
            log_entry = GlossVideoHistory(action="upload",
                                          gloss=gloss,
                                          actor=request.user,
                                          uploadfile=vfile,
                                          goal_location=goal_location)
            log_entry.save()

            # TODO: provide some feedback that it worked (if
            # immediate display of video isn't working)
            return redirect(redirect_url)

    # if we can't process the form, just redirect back to the
    # referring page, should just be the case of hitting
    # Upload without choosing a file but could be
    # a malicious request, if no referrer, go back to root
    if 'HTTP_REFERER' in request.META:
        url = request.META['HTTP_REFERER']
    else:
        url = '/'
    return redirect(url)
def import_existing_gloss_videos(path):
    
    # delete all existing videos
    GlossVideo.objects.all().delete()

    # scan the directory and make an entry for each video file found
    for videofile in os.listdir(path):
        (idgloss, ext) = os.path.splitext(videofile)
        if ext in ['.mov', '.MOV', '.mp4']:

            fullpath = os.path.join(path, videofile)
        
            glosses = Gloss.objects.filter(idgloss=idgloss)
            
            if len(glosses) == 0 and '-' in idgloss:
                # try replacing the first - with :

                idgloss = idgloss.replace('-', ':', 1)
                
                glosses = Gloss.objects.filter(idgloss=idgloss)

            if len(glosses) == 1:
                gloss = glosses[0]
                
                print fullpath, gloss
                
                # replace apostrophe to make nicer URLs
                cleanname = videofile.replace("'", '1')
                
                h = open(fullpath)
                uf = UploadedFile(h, name=cleanname)
                gv = GlossVideo(gloss=gloss, videofile=uf)
            
                gv.save()

            else:
                print "gloss matches for", videofile, glosses
            
        else:
            print 'skipping ', videofile
Beispiel #4
0
def addvideo(request):
    """View to present a video upload form and process
    the upload"""

    if request.method == 'POST':

        form = VideoUploadForGlossForm(request.POST, request.FILES)
        if form.is_valid():

            gloss_id = form.cleaned_data['gloss_id']
            gloss = get_object_or_404(Gloss, pk=gloss_id)
            
            vfile = form.cleaned_data['videofile']
            
            # construct a filename for the video, use sn
            # if present, otherwise use idgloss+gloss id
            if gloss.sn != None:
                vfile.name = str(gloss.sn) + ".mp4"
            else:
                vfile.name = gloss.idgloss + "-" + str(gloss.pk) + ".mp4"
            
            redirect_url = form.cleaned_data['redirect']

            # deal with any existing video for this sign
            goal_folder = WRITABLE_FOLDER+GLOSS_VIDEO_DIRECTORY + '/' + gloss.idgloss[:2] + '/'
            goal_filename = gloss.idgloss + '-' + str(gloss.pk) + '.mp4'
            goal_location = goal_folder + goal_filename
            os.remove(goal_location)

            video = GlossVideo(videofile=vfile, gloss=gloss)
            video.save()

            # Issue #162: log the upload history
            log_entry = GlossVideoHistory(action="upload", gloss=gloss, actor=request.user,
                                          uploadfile=vfile, goal_location=goal_location)
            log_entry.save()

            # Issue #197: convert to thumbnail
            try:
                from CNGT_scripts.python.resizeVideos import VideoResizer

                resizer = VideoResizer([goal_location], FFMPEG_PROGRAM, 180, 0, 0)
                resizer.run()
            except ImportError as i:
                print("Error resizing video: ",i)

            # Issue #214: generate still image
            from signbank.tools import generate_still_image
            generate_still_image(gloss.idgloss[:2], goal_folder, goal_filename)

            # TODO: provide some feedback that it worked (if
            # immediate display of video isn't working)
            return redirect(redirect_url)

    # if we can't process the form, just redirect back to the
    # referring page, should just be the case of hitting
    # Upload without choosing a file but could be
    # a malicious request, if no referrer, go back to root
    if 'HTTP_REFERER' in request.META:
        url = request.META['HTTP_REFERER']
    else:
        url = '/'
    return redirect(url)
Beispiel #5
0
def addvideo(request):
    """View to present a video upload form and process
    the upload"""

    if request.method == 'POST':

        form = VideoUploadForGlossForm(request.POST, request.FILES)
        if form.is_valid():

            gloss_id = form.cleaned_data['gloss_id']
            gloss = get_object_or_404(Gloss, pk=gloss_id)

            vfile = form.cleaned_data['videofile']

            # construct a filename for the video, use sn
            # if present, otherwise use idgloss+gloss id
            if gloss.sn != None:
                vfile.name = str(gloss.sn) + ".mp4"
            else:
                vfile.name = gloss.idgloss + "-" + str(gloss.pk) + ".mp4"

            redirect_url = form.cleaned_data['redirect']

            # deal with any existing video for this sign
            goal_folder = WRITABLE_FOLDER + GLOSS_VIDEO_DIRECTORY + '/' + gloss.idgloss[:
                                                                                        2] + '/'
            goal_filename = gloss.idgloss + '-' + str(gloss.pk) + '.mp4'
            goal_location = goal_folder + goal_filename
            goal_filename_small = gloss.idgloss + '-' + str(
                gloss.pk) + '_small' + '.mp4'
            goal_location_small = goal_folder + goal_filename_small

            if os.path.isfile(goal_location):
                os.remove(goal_location)
            if os.path.isfile(goal_location_small):
                os.remove(goal_location_small)

            # test for other video files for this gloss.pk with a different filename, such as version or old idgloss
            if os.path.isfile(goal_folder):
                file_listing = os.listdir(goal_folder)
                for fname in file_listing:
                    if re.match('.*\-' + str(gloss.pk) + '\..*', fname):
                        if os.path.isfile(goal_folder + fname):
                            os.remove(goal_folder + fname)

            # clean up the database entry for an old file, if necessary

            video_links_count = GlossVideo.objects.filter(gloss=gloss).count()
            video_links_objects = GlossVideo.objects.filter(gloss=gloss)

            if video_links_count > 0:
                # delete the old video object links stored in the database
                for video_object in video_links_objects:
                    video_object.delete()

            # make a new GlossVideo object for the new file
            video = GlossVideo(videofile=vfile, gloss=gloss)
            video.save()

            #Make sure the rights of the new file are okay
            if os.path.isfile(goal_location):
                os.chmod(goal_location, 0o660)

            # Issue #162: log the upload history
            log_entry = GlossVideoHistory(action="upload",
                                          gloss=gloss,
                                          actor=request.user,
                                          uploadfile=vfile,
                                          goal_location=goal_location)
            log_entry.save()

            # Issue #197: convert to thumbnail
            try:
                from CNGT_scripts.python.resizeVideos import VideoResizer

                resizer = VideoResizer([goal_location], FFMPEG_PROGRAM, 180, 0,
                                       0)
                resizer.run()
            except ImportError as i:
                print("Error resizing video: ", i)

            # Issue #214: generate still image
            try:
                from signbank.tools import generate_still_image
                generate_still_image(gloss.idgloss[:2], goal_folder,
                                     goal_filename)
            except:
                print('Error generating still image')

            if os.path.isfile(goal_location_small):
                os.chmod(goal_location_small, 0o660)

            # TODO: provide some feedback that it worked (if
            # immediate display of video isn't working)
            return redirect(redirect_url)

    # if we can't process the form, just redirect back to the
    # referring page, should just be the case of hitting
    # Upload without choosing a file but could be
    # a malicious request, if no referrer, go back to root
    if 'HTTP_REFERER' in request.META:
        url = request.META['HTTP_REFERER']
    else:
        url = '/'
    return redirect(url)