upload limits: show how upload limits are calculated in profiles.
* Allow mousing over the upload limit on profile pages to show the full formula for the upload limit calculation. In particular, show how the upload limit multiplier is derived from the deletion confidence. * Refactor to avoid duplicating upload limit calculations in the presenter, as much as possible.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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} / <abbr title="#{limit_tooltip}">#{user.upload_limit}</abbr>}.html_safe
|
||||
end
|
||||
|
||||
def uploads
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<tr>
|
||||
<th>Upload Limit</th>
|
||||
<td><%= presenter.upload_limit %></td>
|
||||
<td><%= presenter.upload_limit %> (<%= link_to "help", wiki_pages_path(title: "about:upload_limits") %>)</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
Reference in New Issue
Block a user