diff --git a/app/models/iiif_canvas_presenter.rb b/app/models/iiif_canvas_presenter.rb index fc2b6620d5..7b650248a5 100644 --- a/app/models/iiif_canvas_presenter.rb +++ b/app/models/iiif_canvas_presenter.rb @@ -209,7 +209,11 @@ def manifest_attributes(quality, media_type) def supplemental_attributes(file) if file.is_a?(SupplementalFile) label = file.tags.include?('machine_generated') ? file.label + ' (machine generated)' : file.label - format = file.file.content_type + format = if file.file.content_type == 'text/srt' && file.tags.include?('caption') + 'text/vtt' + else + file.file.content_type + end language = file.language || 'en' filename = file.file.filename.to_s else diff --git a/spec/models/iiif_canvas_presenter_spec.rb b/spec/models/iiif_canvas_presenter_spec.rb index 345870020e..051d320fa0 100644 --- a/spec/models/iiif_canvas_presenter_spec.rb +++ b/spec/models/iiif_canvas_presenter_spec.rb @@ -269,6 +269,16 @@ expect(subject.any? { |content| content.body_id =~ /master_files\/#{master_file.id}\/captions/ }).to eq false end + context 'srt captions' do + let(:srt_caption_file) { FactoryBot.create(:supplemental_file, :with_caption_srt_file, :with_caption_tag) } + let(:supplemental_files) { [supplemental_file, transcript_file, caption_file, srt_caption_file] } + it 'sets format to "text/vtt"' do + captions = subject.select { |s| s.body_id.include?('captions') } + expect(captions.none? { |content| content.format == 'text/srt' }).to eq true + expect(captions.all? { |content| content.format == 'text/vtt' }).to eq true + end + end + context 'legacy master file captions' do let(:master_file) { FactoryBot.create(:master_file, :with_waveform, :with_captions, supplemental_files_json: supplemental_files_json, media_object: media_object, derivatives: [derivative]) }