예제 #1
0
def delete_videos(request):
    """
    API endpoint for deleting videos.
    """

    paths = OrderedSet(json.loads(request.body or "{}").get("paths", []))

    lang = json.loads(request.body or "{}").get("lang", "en")

    youtube_ids = get_download_youtube_ids(paths,
                                           language=lang,
                                           downloaded=True)

    num_deleted = 0

    for id in youtube_ids:
        # Delete the file on disk
        if delete_downloaded_files(id):
            num_deleted += 1

    annotate_content_models_by_youtube_id(youtube_ids=youtube_ids.keys(),
                                          language=lang)

    return JsonResponseMessageSuccess(
        _("Deleted %(num_videos)s video(s) successfully.") %
        {"num_videos": num_deleted})
예제 #2
0
def start_video_download(request):
    """
    API endpoint for launching the videodownload job.
    """
    force_job("videodownload", stop=True, locale=request.language)

    paths = OrderedSet(json.loads(request.body or "{}").get("paths", []))

    lang = json.loads(request.body or "{}").get("lang", "en")

    youtube_ids = get_download_youtube_ids(paths, language=lang, downloaded=False)

    queue = VideoQueue()

    queue.add_files(youtube_ids, language=lang)

    force_job("videodownload", _("Download Videos"), locale=lang)

    return JsonResponseMessageSuccess(_("Launched video download process successfully."))
예제 #3
0
def start_video_download(request):
    """
    API endpoint for launching the videodownload job.
    """
    youtube_ids = OrderedSet(simplejson.loads(request.raw_post_data or "{}").get("youtube_ids", []))

    # One query per video (slow)
    video_files_to_create = [id for id in youtube_ids if not get_object_or_None(VideoFile, youtube_id=id)]

    # OK to do bulk_create; cache invalidation triggered via save download
    for lang_code, lang_youtube_ids in divide_videos_by_language(video_files_to_create).iteritems():
        VideoFile.objects.bulk_create([VideoFile(youtube_id=id, flagged_for_download=True, language=lang_code) for id in lang_youtube_ids])

    # OK to update all, since we're not setting all props above.
    # One query per chunk
    for chunk in break_into_chunks(youtube_ids):
        video_files_needing_model_update = VideoFile.objects.filter(download_in_progress=False, youtube_id__in=chunk).exclude(percent_complete=100)
        video_files_needing_model_update.update(percent_complete=0, cancel_download=False, flagged_for_download=True)

    force_job("videodownload", _("Download Videos"), locale=request.language)

    return JsonResponseMessageSuccess(_("Launched video download process successfully."))