diff --git a/app/logical/upload_service.rb b/app/logical/upload_service.rb
index 8588fcc84..1a6804706 100644
--- a/app/logical/upload_service.rb
+++ b/app/logical/upload_service.rb
@@ -28,7 +28,12 @@ class UploadService
if preprocessor.completed?
@upload = preprocessor.finish!
- create_post_from_upload(@upload)
+
+ begin
+ create_post_from_upload(@upload)
+ rescue Exception => x
+ @upload.update(status: "error: #{x.class} - #{x.message}", backtrace: x.backtrace.join("\n"))
+ end
return @upload
end
@@ -78,8 +83,6 @@ class UploadService
@post = convert_to_post(upload)
@post.save!
- upload.update(status: "error: " + @post.errors.full_messages.join(", "))
-
if upload.context && upload.context["ugoira"]
PixivUgoiraFrameData.create(
post_id: @post.id,
diff --git a/app/models/post.rb b/app/models/post.rb
index 6ae1afb24..90ee52c6f 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -18,7 +18,7 @@ class Post < ApplicationRecord
before_validation :parse_pixiv_id
before_validation :blank_out_nonexistent_parents
before_validation :remove_parent_loops
- validates_uniqueness_of :md5, :on => :create
+ validates_uniqueness_of :md5, :on => :create, message: ->(obj, data) { "duplicate: #{Post.find_by_md5(obj.md5).id}"}
validates_inclusion_of :rating, in: %w(s q e), message: "rating must be s, q, or e"
validate :tag_names_are_valid
validate :added_tags_are_valid
diff --git a/app/models/recommender_service.rb b/app/models/recommender_service.rb
index 443a26db8..efca7d476 100644
--- a/app/models/recommender_service.rb
+++ b/app/models/recommender_service.rb
@@ -10,7 +10,7 @@ module RecommenderService
def available_for_post?(post)
return true if Rails.env.development?
- enabled? && CurrentUser.enable_recommended_posts? && post.created_at > Date.civil(2017, 1, 1) && post.fav_count >= SCORE_THRESHOLD
+ enabled? && post.created_at > Date.civil(2017, 1, 1) && post.fav_count >= SCORE_THRESHOLD
end
def available_for_user?
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb
index 46be1fd1b..6764c12ef 100644
--- a/app/views/users/edit.html.erb
+++ b/app/views/users/edit.html.erb
@@ -82,7 +82,7 @@
<%= f.input :disable_cropped_thumbnails, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %>
- <%= f.input :enable_recommended_posts, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %>
+ <%#= f.input :enable_recommended_posts, :as => :select, :collection => [["No", "false"], ["Yes", "true"]], :include_blank => false %>
diff --git a/test/models/upload_service_test.rb b/test/models/upload_service_test.rb
index e94ae5dd1..9e19cd289 100644
--- a/test/models/upload_service_test.rb
+++ b/test/models/upload_service_test.rb
@@ -343,7 +343,7 @@ class UploadServiceTest < ActiveSupport::TestCase
FactoryBot.create(:user)
end
CurrentUser.ip_addr = "127.0.0.1"
- @jpeg = "https://upload.wikimedia.org/wikipedia/commons/c/c5/Moraine_Lake_17092005.jpg"
+ @jpeg = "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"
@ugoira = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364"
@video = "https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
end
@@ -362,7 +362,8 @@ class UploadServiceTest < ActiveSupport::TestCase
assert_operator(@upload.file_size, :>, 0)
assert_not_nil(@upload.source)
assert(File.exists?(Danbooru.config.storage_manager.file_path(@upload.md5, "jpg", :original)))
- assert(File.exists?(Danbooru.config.storage_manager.file_path(@upload.md5, "jpg", :large)))
+ # this image is not large enough to generate a large file
+ #assert(File.exists?(Danbooru.config.storage_manager.file_path(@upload.md5, "jpg", :large)))
assert(File.exists?(Danbooru.config.storage_manager.file_path(@upload.md5, "jpg", :preview)))
end
@@ -825,7 +826,7 @@ class UploadServiceTest < ActiveSupport::TestCase
subject { UploadService }
setup do
- @source = "https://upload.wikimedia.org/wikipedia/commons/c/c5/Moraine_Lake_17092005.jpg"
+ @source = "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"
CurrentUser.user = travel_to(1.month.ago) do
FactoryBot.create(:user)
end
@@ -895,7 +896,7 @@ class UploadServiceTest < ActiveSupport::TestCase
context "with a preprocessed predecessor" do
setup do
- @predecessor = FactoryBot.create(:source_upload, status: "preprocessed", source: @source, image_height: 0, image_width: 0, file_size: 1, md5: 'blank', file_ext: "jpg")
+ @predecessor = FactoryBot.create(:source_upload, status: "preprocessed", source: @source, image_height: 0, image_width: 0, file_size: 1, md5: 'd34e4cf0a437a5d65f8e82b7bcd02606', file_ext: "jpg")
@tags = 'hello world'
end
@@ -906,6 +907,20 @@ class UploadServiceTest < ActiveSupport::TestCase
assert_equal(@predecessor, predecessor)
assert_equal(@tags, predecessor.tag_string.strip)
end
+
+ context "when the file has already been uploaded" do
+ setup do
+ @post = create(:post, md5: "d34e4cf0a437a5d65f8e82b7bcd02606")
+ @service = subject.new(source: @source)
+ end
+
+ should "point to the dup post in the upload" do
+ @upload = subject.new(source: @source, tag_string: @tags).start!
+ @predecessor.reload
+ assert_equal("error: ActiveRecord::RecordInvalid - Validation failed: Md5 duplicate: #{@post.id}", @predecessor.status)
+ end
+ end
+
end
context "with no predecessor" do