diff --git a/app/models/master_file.rb b/app/models/master_file.rb index 41a8768bf5..37fbf97e7c 100644 --- a/app/models/master_file.rb +++ b/app/models/master_file.rb @@ -318,6 +318,18 @@ def update_derivatives(outputs, managed = true) save end + def set_default_thumbnail + if is_video? + thumbnail.content=StringIO.new(File.read('app/assets/images/video_icon.png', encoding: 'BINARY')) + thumbnail.mime_type='image/png' + thumbnail.original_name='video_icon.png' + thumbnail.save + save + reload + thumbnail.reload + end + end + alias_method :'_poster_offset', :'poster_offset' def poster_offset _poster_offset.to_i @@ -387,6 +399,7 @@ def extract_still(options={}) unless options[:preview] file.mime_type = 'image/jpeg' file.content = StringIO.new(result) + file.original_name = 'thumbnail.jpg' if type == 'thumbnail' end end end diff --git a/app/services/master_file_builder.rb b/app/services/master_file_builder.rb index 301e6378a1..2ca3e0f66a 100644 --- a/app/services/master_file_builder.rb +++ b/app/services/master_file_builder.rb @@ -65,6 +65,10 @@ def self.from_specs(media_object, specs) if master_file.save media_object.save master_file.process + + # Replace thumbnail (for videos) with default thumbnail + master_file.set_default_thumbnail + response[:master_files] << master_file else response[:flash][:error] << "There was a problem storing the file" diff --git a/lib/avalon/batch/entry.rb b/lib/avalon/batch/entry.rb index c9bb1e0a5e..0d88db898e 100644 --- a/lib/avalon/batch/entry.rb +++ b/lib/avalon/batch/entry.rb @@ -220,6 +220,9 @@ def process! master_file.media_object = media_object media_object.save master_file.process(files) + + # Replace thumbnail (for videos) with default thumbnail + master_file.set_default_thumbnail else Rails.logger.error "Problem saving MasterFile(#{master_file.id}): #{master_file.errors.full_messages.to_sentence}" end diff --git a/spec/controllers/master_files_controller_spec.rb b/spec/controllers/master_files_controller_spec.rb index ac8fcff411..225e07240e 100644 --- a/spec/controllers/master_files_controller_spec.rb +++ b/spec/controllers/master_files_controller_spec.rb @@ -310,8 +310,8 @@ class << file it "returns thumbnail" do get :get_frame, params: { id: mf.id, type: 'thumbnail', size: 'bar' } - expect(response.body).to eq('fake image content') - expect(response.headers['Content-Type']).to eq('image/jpeg') + # get_frame returns default "video_icon.png" + expect(response.headers['Content-Type']).to eq('image/png') end it "returns offset thumbnail" do @@ -645,10 +645,10 @@ class << file describe "#update" do let(:master_file) { FactoryBot.create(:master_file, :with_media_object) } - subject { put('update', params: { id: master_file.id, - master_file: { title: "New label", - poster_offset: "00:00:03", - date_digitized: "2020-08-27", + subject { put('update', params: { id: master_file.id, + master_file: { title: "New label", + poster_offset: "00:00:03", + date_digitized: "2020-08-27", permalink: "https://perma.link" }})} before do diff --git a/spec/factories/master_files.rb b/spec/factories/master_files.rb index b09b218ff9..2ea7604fa7 100644 --- a/spec/factories/master_files.rb +++ b/spec/factories/master_files.rb @@ -49,8 +49,7 @@ end trait :with_thumbnail do after(:create) do |mf| - mf.thumbnail.mime_type = 'image/jpeg' - mf.thumbnail.content = 'fake image content' + mf.set_default_thumbnail mf.save end end diff --git a/spec/models/master_file_spec.rb b/spec/models/master_file_spec.rb index 83cc429cc2..d533f4c98e 100644 --- a/spec/models/master_file_spec.rb +++ b/spec/models/master_file_spec.rb @@ -535,9 +535,18 @@ end describe 'thumbnail' do - let(:master_file) { FactoryBot.create(:master_file) } - it 'sets original_name to default value' do - expect(master_file.thumbnail.original_name).to eq 'thumbnail.jpg' + let(:master_file) { FactoryBot.create(:master_file, :with_thumbnail) } + it 'uses a default icon for videos' do + expect(master_file.thumbnail.original_name).to eq 'video_icon.png' + end + it 'uses a default icon for audio' do + master_file.file_format = 'Sound' + master_file.set_workflow + master_file.thumbnail.original_name = 'audio_icon.png' + + # Setting default thumbnail should not change the current thumbnail + master_file.set_default_thumbnail + expect(master_file.thumbnail.original_name).to eq 'audio_icon.png' end end