diff --git a/app/models/media_track.rb b/app/models/media_track.rb index b225a778556..1f60b1b3298 100644 --- a/app/models/media_track.rb +++ b/app/models/media_track.rb @@ -24,6 +24,8 @@ class MediaTrack < ActiveRecord::Base belongs_to :user belongs_to :media_object, touch: true belongs_to :attachment + belongs_to :master_content_tags, class_name: "MasterCourses::MasterContentTag", dependent: :destroy + before_validation :set_media_and_attachment before_save :convert_srt_to_wvtt before_create :mark_downstream_create_destroy diff --git a/lib/api/v1/master_courses.rb b/lib/api/v1/master_courses.rb index 7e3c7b02931..9092bde3c55 100644 --- a/lib/api/v1/master_courses.rb +++ b/lib/api/v1/master_courses.rb @@ -76,6 +76,7 @@ module Api::V1::MasterCourses html_url: url, locked: } + json[:locale] = asset.locale if asset.class_name == "MediaTrack" json[:exceptions] = exceptions[migration_id] || [] unless migration_id.nil? json end diff --git a/packages/canvas-media/src/closedCaptionLanguages.js b/packages/canvas-media/src/closedCaptionLanguages.js index 6e60dd9118a..a8135c4c78a 100644 --- a/packages/canvas-media/src/closedCaptionLanguages.js +++ b/packages/canvas-media/src/closedCaptionLanguages.js @@ -414,4 +414,12 @@ function sortedClosedCaptionLanguageList(userLocale) { return langlist } -export {sortedClosedCaptionLanguageList, closedCaptionLanguages as default} +function captionLanguageForLocale(locale) { + return closedCaptionLanguages.find(lang => lang.id === locale)?.label || locale +} + +export { + sortedClosedCaptionLanguageList, + captionLanguageForLocale, + closedCaptionLanguages as default, +} diff --git a/packages/canvas-media/src/index.js b/packages/canvas-media/src/index.js index f0044b15d6c..dbbd8171c91 100644 --- a/packages/canvas-media/src/index.js +++ b/packages/canvas-media/src/index.js @@ -26,7 +26,10 @@ import saveMediaRecording, { saveClosedCaptions, saveClosedCaptionsForAttachment, } from './saveMediaRecording' -import closedCaptionLanguages, {sortedClosedCaptionLanguageList} from './closedCaptionLanguages' +import closedCaptionLanguages, { + sortedClosedCaptionLanguageList, + captionLanguageForLocale, +} from './closedCaptionLanguages' import getTranslations from './getTranslations' import * as CONSTANTS from './shared/constants' @@ -45,6 +48,7 @@ export { saveClosedCaptionsForAttachment, closedCaptionLanguages, sortedClosedCaptionLanguageList, + captionLanguageForLocale, getTranslations, CONSTANTS, } diff --git a/spec/javascripts/jsx/blueprint_courses/components/UnsyncedChangesSpec.js b/spec/javascripts/jsx/blueprint_courses/components/UnsyncedChangesSpec.js index a1f2058609e..6602f54b7ce 100644 --- a/spec/javascripts/jsx/blueprint_courses/components/UnsyncedChangesSpec.js +++ b/spec/javascripts/jsx/blueprint_courses/components/UnsyncedChangesSpec.js @@ -49,6 +49,15 @@ const unsyncedChanges = [ html_url: '/4/pages/page-1', locked: false, }, + { + asset_id: '5', + asset_type: 'media_track', + asset_name: 'media.mp4', + change_type: 'created', + html_url: '/media_attachments/96/media_tracks', + locked: false, + locale: 'en', + }, ] const defaultProps = { @@ -100,9 +109,21 @@ test('renders the migration options component', () => { test('renders the changes properly', () => { const tree = mount(connect()) const changes = tree.find('tr[data-testid="bcs__unsynced-item"]') - equal(changes.length, 3) + equal(changes.length, 4) const locks = changes.find('IconBlueprintLockSolid') equal(locks.length, 1) const unlocks = changes.find('IconBlueprintSolid') - equal(unlocks.length, 2) + equal(unlocks.length, 3) +}) + +test('renders the media tracks properly', () => { + const tree = mount(connect()) + const changes = tree.find('tr[data-testid="bcs__unsynced-item"]') + equal(changes.length, 4) + const assetName = changes.findWhere( + node => node.name() === 'Text' && node.text() === 'media.mp4 (English)' + ) + equal(assetName.length, 1) + const assetType = changes.findWhere(node => node.name() === 'Text' && node.text() === 'Caption') + equal(assetType.length, 1) }) diff --git a/ui/features/blueprint_course_master/react/components/UnsyncedChange.js b/ui/features/blueprint_course_master/react/components/UnsyncedChange.js index 6b3b714a3c2..2f122533906 100644 --- a/ui/features/blueprint_course_master/react/components/UnsyncedChange.js +++ b/ui/features/blueprint_course_master/react/components/UnsyncedChange.js @@ -25,11 +25,13 @@ import {View} from '@instructure/ui-view' import {IconLock, IconUnlock} from '@canvas/blueprint-courses/react/components/BlueprintLocks' import propTypes from '@canvas/blueprint-courses/react/propTypes' import {itemTypeLabels, changeTypeLabels} from '@canvas/blueprint-courses/react/labels' +import {captionLanguageForLocale} from '@instructure/canvas-media' const UnsyncedChange = props => { - const {asset_type, asset_name, change_type, locked} = props.change + const {asset_type, asset_name, change_type, locked, locale} = props.change const changeLabel = changeTypeLabels[change_type] || change_type const typeLabel = itemTypeLabels[asset_type] || asset_type + const name = locale ? `${asset_name} (${captionLanguageForLocale(locale)})` : asset_name return (