From 6ae0c42c0156ce3f4861731e4872be026be2eeef Mon Sep 17 00:00:00 2001 From: Blake Erickson Date: Fri, 21 Apr 2023 13:33:33 -0600 Subject: [PATCH] FIX: Do not overwrite existing thumbnails (#21199) * FIX: Do not overwrite existing thumbnails When auto generating video thumbnails they should not overwrite any existing topic thumbnails. This also addresses an issue with capitalized file extensions like .MOV that were being excluded. * Update app/models/post.rb Remove comment Co-authored-by: Penar Musaraj --------- Co-authored-by: Penar Musaraj --- app/models/post.rb | 21 +++++++++------------ spec/models/post_spec.rb | 11 +++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 739954db9f8..1ebb4224700 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1013,24 +1013,21 @@ class Post < ActiveRecord::Base upload ||= Upload.get_from_url(src) # Link any video thumbnails - if upload.present? && (FileHelper.supported_video.include? upload.extension) + if upload.present? && (FileHelper.supported_video.include? upload.extension&.downcase) # Video thumbnails have the filename of the video file sha1 with a .png or .jpg extension. # This is because at time of upload in the composer we don't know the topic/post id yet # and there is no thumbnail info added to the markdown to tie the thumbnail to the topic/post after # creation. thumbnail = Upload.where("original_filename like ?", "#{upload.sha1}.%").first if upload.sha1.present? - if thumbnail.present? - upload_ids << thumbnail.id if thumbnail.present? - - if self.is_first_post? #topic - self.topic.update_column(:image_upload_id, thumbnail.id) - extra_sizes = - ThemeModifierHelper.new( - theme_ids: Theme.user_selectable.pluck(:id), - ).topic_thumbnail_sizes - self.topic.generate_thumbnails!(extra_sizes: extra_sizes) - end + if thumbnail.present? && self.is_first_post? && !self.topic.image_upload_id + upload_ids << thumbnail.id + self.topic.update_column(:image_upload_id, thumbnail.id) + extra_sizes = + ThemeModifierHelper.new( + theme_ids: Theme.user_selectable.pluck(:id), + ).topic_thumbnail_sizes + self.topic.generate_thumbnails!(extra_sizes: extra_sizes) end end upload_ids << upload.id if upload.present? diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index c61a96b1d29..39607007710 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -1566,6 +1566,17 @@ RSpec.describe Post do post.topic.reload expect(post.topic.topic_thumbnails.length).to eq(0) end + + it "does not overwrite existing thumbnails" do + image_upload.original_filename = "#{video_upload.sha1}.png" + image_upload.save! + post.topic.image_upload_id = image_upload_2.id + post.topic.save! + post.link_post_uploads + + post.topic.reload + expect(post.topic.image_upload_id).to eq(image_upload_2.id) + end end describe "uploads" do