221 lines
9.5 KiB
Python
221 lines
9.5 KiB
Python
""" # lint-amnesty, pylint: disable=cyclic-import
|
|
XFields for video block.
|
|
"""
|
|
|
|
|
|
import datetime
|
|
|
|
from xblock.fields import Boolean, DateTime, Dict, Float, List, RelativeTime, Scope, String
|
|
|
|
# Make '_' a no-op so we can scrape strings. Using lambda instead of
|
|
# `django.utils.translation.ugettext_noop` because Django cannot be imported in this file
|
|
_ = lambda text: text
|
|
|
|
|
|
class VideoFields:
|
|
"""Fields for `VideoBlock`."""
|
|
display_name = String(
|
|
help=_("The display name for this component."),
|
|
display_name=_("Component Display Name"),
|
|
default="Video",
|
|
scope=Scope.settings
|
|
)
|
|
|
|
saved_video_position = RelativeTime(
|
|
help=_("Current position in the video."),
|
|
scope=Scope.user_state,
|
|
default=datetime.timedelta(seconds=0)
|
|
)
|
|
# TODO: This should be moved to Scope.content, but this will
|
|
# require data migration to support the old video block.
|
|
youtube_id_1_0 = String(
|
|
help=_("Optional, for older browsers: the YouTube ID for the normal speed video."),
|
|
display_name=_("YouTube ID"),
|
|
scope=Scope.settings,
|
|
default="3_yD_cEKoCk"
|
|
)
|
|
youtube_id_0_75 = String(
|
|
help=_("Optional, for older browsers: the YouTube ID for the .75x speed video."),
|
|
display_name=_("YouTube ID for .75x speed"),
|
|
scope=Scope.settings,
|
|
default=""
|
|
)
|
|
youtube_id_1_25 = String(
|
|
help=_("Optional, for older browsers: the YouTube ID for the 1.25x speed video."),
|
|
display_name=_("YouTube ID for 1.25x speed"),
|
|
scope=Scope.settings,
|
|
default=""
|
|
)
|
|
youtube_id_1_5 = String(
|
|
help=_("Optional, for older browsers: the YouTube ID for the 1.5x speed video."),
|
|
display_name=_("YouTube ID for 1.5x speed"),
|
|
scope=Scope.settings,
|
|
default=""
|
|
)
|
|
start_time = RelativeTime( # datetime.timedelta object
|
|
help=_(
|
|
"Time you want the video to start if you don't want the entire video to play. "
|
|
"Not supported in the native mobile app: the full video file will play. "
|
|
"Formatted as HH:MM:SS. The maximum value is 23:59:59."
|
|
),
|
|
display_name=_("Video Start Time"),
|
|
scope=Scope.settings,
|
|
default=datetime.timedelta(seconds=0)
|
|
)
|
|
end_time = RelativeTime( # datetime.timedelta object
|
|
help=_(
|
|
"Time you want the video to stop if you don't want the entire video to play. "
|
|
"Not supported in the native mobile app: the full video file will play. "
|
|
"Formatted as HH:MM:SS. The maximum value is 23:59:59."
|
|
),
|
|
display_name=_("Video Stop Time"),
|
|
scope=Scope.settings,
|
|
default=datetime.timedelta(seconds=0)
|
|
)
|
|
#front-end code of video player checks logical validity of (start_time, end_time) pair.
|
|
|
|
download_video = Boolean(
|
|
help=_("Allow students to download versions of this video in different formats if they cannot use the edX video"
|
|
" player or do not have access to YouTube. You must add at least one non-YouTube URL "
|
|
"in the Video File URLs field."),
|
|
display_name=_("Video Download Allowed"),
|
|
scope=Scope.settings,
|
|
default=False
|
|
)
|
|
html5_sources = List(
|
|
help=_("The URL or URLs where you've posted non-YouTube versions of the video. Each URL must end in .mpeg,"
|
|
" .mp4, .ogg, or .webm and cannot be a YouTube URL. (For browser compatibility, we strongly recommend"
|
|
" .mp4 and .webm format.) Students will be able to view the first listed video that's compatible with"
|
|
" the student's computer. To allow students to download these videos, "
|
|
"set Video Download Allowed to True."),
|
|
display_name=_("Video File URLs"),
|
|
scope=Scope.settings,
|
|
)
|
|
track = String(
|
|
help=_("By default, students can download an .srt or .txt transcript when you set Download Transcript "
|
|
"Allowed to True. If you want to provide a downloadable transcript in a different format, we recommend "
|
|
"that you upload a handout by using the Upload a Handout field. If this isn't possible, you can post a "
|
|
"transcript file on the Files & Uploads page or on the Internet, and then add the URL for the "
|
|
"transcript here. Students see a link to download that transcript below the video."),
|
|
display_name=_("Downloadable Transcript URL"),
|
|
scope=Scope.settings,
|
|
default=''
|
|
)
|
|
download_track = Boolean(
|
|
help=_("Allow students to download the timed transcript. A link to download the file appears below the video."
|
|
" By default, the transcript is an .srt or .txt file. If you want to provide the transcript for "
|
|
"download in a different format, upload a file by using the Upload Handout field."),
|
|
display_name=_("Download Transcript Allowed"),
|
|
scope=Scope.settings,
|
|
default=False
|
|
)
|
|
# `sub` is deprecated field and should not be used in future. Now, transcripts are primarily handled in VAL and
|
|
# backward compatibility for the video blocks already using this field has been ensured.
|
|
sub = String(
|
|
help=_("The default transcript for the video, from the Default Timed Transcript field on the Basic tab. "
|
|
"This transcript should be in English. You don't have to change this setting."),
|
|
display_name=_("Default Timed Transcript"),
|
|
scope=Scope.settings,
|
|
default=""
|
|
)
|
|
show_captions = Boolean(
|
|
help=_("Specify whether the transcripts appear with the video by default."),
|
|
display_name=_("Show Transcript"),
|
|
scope=Scope.settings,
|
|
default=True
|
|
)
|
|
# Data format: {'de': 'german_translation', 'uk': 'ukrainian_translation'}
|
|
transcripts = Dict(
|
|
help=_("Add transcripts in different languages."
|
|
" Click below to specify a language and upload an .srt transcript file for that language."),
|
|
display_name=_("Transcript Languages"),
|
|
scope=Scope.settings,
|
|
default={}
|
|
)
|
|
transcript_language = String(
|
|
help=_("Preferred language for transcript."),
|
|
display_name=_("Preferred language for transcript"),
|
|
scope=Scope.preferences,
|
|
default="en"
|
|
)
|
|
transcript_download_format = String(
|
|
help=_("Transcript file format to download by user."),
|
|
scope=Scope.preferences,
|
|
values=[
|
|
# Translators: This is a type of file used for captioning in the video player.
|
|
{"display_name": _("SubRip (.srt) file"), "value": "srt"},
|
|
{"display_name": _("Text (.txt) file"), "value": "txt"}
|
|
],
|
|
default='srt',
|
|
)
|
|
speed = Float(
|
|
help=_("The last speed that the user specified for the video."),
|
|
scope=Scope.user_state
|
|
)
|
|
global_speed = Float(
|
|
help=_("The default speed for the video."),
|
|
scope=Scope.preferences,
|
|
default=1.0
|
|
)
|
|
auto_advance = Boolean(
|
|
help=_("Specify whether to advance automatically to the next unit when the video ends."),
|
|
scope=Scope.preferences,
|
|
# The default is True because this field only has an effect when auto-advance controls are enabled
|
|
# (globally enabled through feature flag and locally enabled through course setting); in that case
|
|
# it's good to start auto-advancing and let the student disable it, instead of the other way around
|
|
# (requiring the user to enable it). When auto-advance controls are hidden, this field won't be used.
|
|
default=True,
|
|
)
|
|
youtube_is_available = Boolean(
|
|
help=_("Specify whether YouTube is available for the user."),
|
|
scope=Scope.user_info,
|
|
default=True
|
|
)
|
|
handout = String(
|
|
help=_("Upload a handout to accompany this video. Students can download the handout by "
|
|
"clicking Download Handout under the video."),
|
|
display_name=_("Upload Handout"),
|
|
scope=Scope.settings,
|
|
)
|
|
only_on_web = Boolean(
|
|
help=_(
|
|
"Specify whether access to this video is limited to browsers only, or if it can be "
|
|
"accessed from other applications including mobile apps."
|
|
),
|
|
display_name=_("Video Available on Web Only"),
|
|
scope=Scope.settings,
|
|
default=False
|
|
)
|
|
edx_video_id = String(
|
|
help=_("If you were assigned a Video ID by edX for the video to play in this component, enter the ID here."
|
|
" In this case, do not enter values in the Default Video URL, the Video File URLs, "
|
|
"and the YouTube ID fields. If you were not assigned a Video ID,"
|
|
" enter values in those other fields and ignore this field."),
|
|
display_name=_("Video ID"),
|
|
scope=Scope.settings,
|
|
default="",
|
|
)
|
|
bumper_last_view_date = DateTime(
|
|
display_name=_("Date of the last view of the bumper"),
|
|
scope=Scope.preferences,
|
|
)
|
|
bumper_do_not_show_again = Boolean(
|
|
display_name=_("Do not show bumper again"),
|
|
scope=Scope.preferences,
|
|
default=False,
|
|
)
|
|
public_access = Boolean(
|
|
help=_("Specify whether the video can be accessed publicly by learners."),
|
|
display_name=_("Public Access"),
|
|
scope=Scope.settings,
|
|
default=False
|
|
)
|
|
# thumbnail is need as a field for the new video editor. The field is hidden in
|
|
# the legacy modal.
|
|
thumbnail = String(
|
|
help=_("Add a specific thumbnail for learners to see before playing the video."),
|
|
display_name=_("Thumbnail"),
|
|
scope=Scope.settings,
|
|
default="",
|
|
)
|