diff --git a/app/models/user.rb b/app/models/user.rb index 3a85606b5..57ac132fb 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -549,6 +549,28 @@ class User < ApplicationRecord is_moderator? || flagger_id == id end + def upload_limit + @upload_limit ||= [max_upload_limit - used_upload_slots, 0].max + end + + def used_upload_slots + uploaded_count = Post.for_user(id).where("created_at >= ?", 24.hours.ago).count + uploaded_comic_count = Post.for_user(id).tag_match("comic").where("created_at >= ?", 24.hours.ago).count / 3 + uploaded_count - uploaded_comic_count + end + + def max_upload_limit + [(base_upload_limit * upload_limit_multiplier).ceil, 10].max + end + + def upload_limit_multiplier + (1 - (adjusted_deletion_confidence / 15.0)) + end + + def adjusted_deletion_confidence + [deletion_confidence(60), 15].min + end + def base_upload_limit if created_at >= 1.month.ago 10 @@ -563,25 +585,6 @@ class User < ApplicationRecord end end - def max_upload_limit - dcon = [deletion_confidence(60), 15].min - [(base_upload_limit * (1 - (dcon / 15.0))).ceil, 10].max - end - - def upload_limit - @upload_limit ||= begin - uploaded_count = Post.for_user(id).where("created_at >= ?", 24.hours.ago).count - uploaded_comic_count = Post.for_user(id).tag_match("comic").where("created_at >= ?", 24.hours.ago).count / 3 - limit = max_upload_limit - (uploaded_count - uploaded_comic_count) - - if limit < 0 - limit = 0 - end - - limit - end - end - def tag_query_limit if is_platinum? Danbooru.config.base_tag_query_limit * 2 diff --git a/app/presenters/user_presenter.rb b/app/presenters/user_presenter.rb index 808da1fa0..b5bea4e0a 100644 --- a/app/presenters/user_presenter.rb +++ b/app/presenters/user_presenter.rb @@ -68,13 +68,14 @@ class UserPresenter return "none" end - dcon = [user.deletion_confidence(60), 15].min - multiplier = (1 - (dcon / 15.0)) - max_count = [(user.base_upload_limit * multiplier).ceil, 5].max - uploaded_count = Post.for_user(user.id).where("created_at >= ?", 24.hours.ago).count - uploaded_comic_count = Post.for_user(user.id).tag_match("comic").where("created_at >= ?", 24.hours.ago).count / 3 + limit_tooltip = <<-EOS.strip_heredoc + Base: #{user.base_upload_limit} + Del. Rate: #{"%.2f" % user.adjusted_deletion_confidence} + Multiplier: (1 - (#{"%.2f" % user.adjusted_deletion_confidence} / 15)) = #{user.upload_limit_multiplier} + Upload Limit: #{user.base_upload_limit} * #{"%.2f" % user.upload_limit_multiplier} = #{user.max_upload_limit} + EOS - "(#{user.base_upload_limit} * #{'%0.2f' % multiplier}) - #{uploaded_count - uploaded_comic_count} = #{user.upload_limit}" + %{#{user.used_upload_slots} / #{user.upload_limit}}.html_safe end def uploads diff --git a/app/views/users/_statistics.html.erb b/app/views/users/_statistics.html.erb index 25d63d60c..c5deecb12 100644 --- a/app/views/users/_statistics.html.erb +++ b/app/views/users/_statistics.html.erb @@ -31,7 +31,7 @@ Upload Limit - <%= presenter.upload_limit %> + <%= presenter.upload_limit %> (<%= link_to "help", wiki_pages_path(title: "about:upload_limits") %>)