From d04a98e723555c5cd21dde6834b42c0297850e42 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Tue, 11 Dec 2018 14:48:13 +0800 Subject: [PATCH 1/2] allows re-use of thumbnails for identical attachments - changes the thumbnail file naming scheme to digest_filesize_size.thumb. --- app/models/attachment.rb | 2 +- test/unit/attachment_test.rb | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index cc9b5f930..fd4931eaf 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -216,7 +216,7 @@ class Attachment < ActiveRecord::Base size = Setting.thumbnails_size.to_i end size = 100 unless size > 0 - target = File.join(self.class.thumbnails_storage_path, "#{id}_#{digest}_#{size}.thumb") + target = File.join(self.class.thumbnails_storage_path, "#{digest}_#{filesize}_#{size}.thumb") begin Redmine::Thumbnail.generate(self.diskfile, target, size) diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index 2bee67ed2..c89ed5631 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -429,11 +429,33 @@ class AttachmentTest < ActiveSupport::TestCase assert_difference "Dir.glob(File.join(Attachment.thumbnails_storage_path, '*.thumb')).size" do thumbnail = attachment.thumbnail - assert_equal "16_8e0294de2441577c529f170b6fb8f638_100.thumb", File.basename(thumbnail) + assert_equal "8e0294de2441577c529f170b6fb8f638_2654_100.thumb", File.basename(thumbnail) assert File.exists?(thumbnail) end end + def test_should_reuse_thumbnail + a = Attachment.create!( + :container => Issue.find(1), + :file => uploaded_test_file("2010/11/101123161450_testfile_1.png", "image/png"), + :author => User.find(1) + ) + a_thumb = b_thumb = nil + assert_difference "Dir.glob(File.join(Attachment.thumbnails_storage_path, '*.thumb')).size" do + a_thumb = a.thumbnail + end + + b = Attachment.create!( + :container => Issue.find(2), + :file => uploaded_test_file("2010/11/101123161450_testfile_1.png", "image/png"), + :author => User.find(1) + ) + assert_no_difference "Dir.glob(File.join(Attachment.thumbnails_storage_path, '*.thumb')).size" do + b_thumb = b.thumbnail + end + assert_equal a_thumb, b_thumb + end + def test_thumbnail_should_return_nil_if_generation_fails Redmine::Thumbnail.expects(:generate).raises(SystemCallError, 'Something went wrong') set_fixtures_attachments_directory -- 2.11.0