Fix #4522: Sidebar doesn't show most searched tags at certain times of day.
Revert back to previous workaround of fetching previous day if current day returns no result. A terrible hack, really we should convert dates to Reportbooru's timezone, but that has other complications.
This commit is contained in:
@@ -28,11 +28,11 @@ module Explore
|
|||||||
|
|
||||||
def searches
|
def searches
|
||||||
@date, @scale, @min_date, @max_date = parse_date(params)
|
@date, @scale, @min_date, @max_date = parse_date(params)
|
||||||
@search_service = ReportbooruService.new
|
@searches = ReportbooruService.new.popular_searches(@date)
|
||||||
end
|
end
|
||||||
|
|
||||||
def missed_searches
|
def missed_searches
|
||||||
@search_service = ReportbooruService.new
|
@missed_searches = ReportbooruService.new.missed_search_rankings
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -20,29 +20,30 @@ class ReportbooruService
|
|||||||
body.lines.map(&:split).map { [_1, _2.to_i] }
|
body.lines.map(&:split).map { [_1, _2.to_i] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_search_rankings(date = Date.today, expires_in: 1.minutes)
|
def post_search_rankings(date, expires_in: 1.minutes)
|
||||||
return [] unless enabled?
|
request("#{reportbooru_server}/post_searches/rank?date=#{date}", expires_in)
|
||||||
|
|
||||||
response = http.cache(expires_in).get("#{reportbooru_server}/post_searches/rank?date=#{date}")
|
|
||||||
return [] if response.status != 200
|
|
||||||
JSON.parse(response.to_s.force_encoding("utf-8"))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def post_view_rankings(date = Date.today, expires_in: 1.minutes)
|
def post_view_rankings(date, expires_in: 1.minutes)
|
||||||
return [] unless enabled?
|
request("#{reportbooru_server}/post_views/rank?date=#{date}", expires_in)
|
||||||
|
|
||||||
response = http.cache(expires_in).get("#{reportbooru_server}/post_views/rank?date=#{date}")
|
|
||||||
return [] if response.status != 200
|
|
||||||
JSON.parse(response.to_s.force_encoding("utf-8"))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def popular_searches(date = Date.today, limit: 100)
|
def popular_searches(date, limit: 100)
|
||||||
ranking = post_search_rankings(date)
|
ranking = post_search_rankings(date)
|
||||||
ranking.take(limit).map(&:first)
|
ranking.take(limit).map(&:first)
|
||||||
end
|
end
|
||||||
|
|
||||||
def popular_posts(date = Date.today, limit: 100)
|
def popular_posts(date, limit: 100)
|
||||||
ranking = post_view_rankings(date)
|
ranking = post_view_rankings(date)
|
||||||
|
ranking = post_view_rankings(date.yesterday) if ranking.blank?
|
||||||
ranking.take(limit).map { |x| Post.find(x[0]) }
|
ranking.take(limit).map { |x| Post.find(x[0]) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def request(url, expires_in)
|
||||||
|
return [] unless enabled?
|
||||||
|
|
||||||
|
response = http.cache(expires_in).get(url)
|
||||||
|
return [] if response.status != 200
|
||||||
|
JSON.parse(response.to_s.force_encoding("utf-8"))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% @search_service.missed_search_rankings.each do |tags, count| %>
|
<% @missed_searches.each do |tags, count| %>
|
||||||
<tr class="tag-type-<%= Tag.category_for(tags) %>">
|
<tr class="tag-type-<%= Tag.category_for(tags) %>">
|
||||||
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% @search_service.post_search_rankings(@date).each do |tags, count| %>
|
<% @searches.each do |tags, count| %>
|
||||||
<tr class="tag-type-<%= Tag.category_for(tags) %>">
|
<tr class="tag-type-<%= Tag.category_for(tags) %>">
|
||||||
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
||||||
<td style="text-align: right;"><%= count.to_i %></td>
|
<td style="text-align: right;"><%= count.to_i %></td>
|
||||||
|
|||||||
@@ -4,20 +4,20 @@ class ReportbooruServiceTest < ActiveSupport::TestCase
|
|||||||
def setup
|
def setup
|
||||||
@service = ReportbooruService.new(reportbooru_server: "http://localhost:1234")
|
@service = ReportbooruService.new(reportbooru_server: "http://localhost:1234")
|
||||||
@post = create(:post)
|
@post = create(:post)
|
||||||
@date = "2000-01-01"
|
@date = Date.parse("2000-01-01")
|
||||||
end
|
end
|
||||||
|
|
||||||
context "#popular_posts" do
|
context "#popular_posts" do
|
||||||
should "return the list of popular posts on success" do
|
should "return the list of popular posts on success" do
|
||||||
body = "[[#{@post.id},100.0]]"
|
mock_post_view_rankings(@date, [[@post.id, 100]])
|
||||||
@service.http.expects(:get).with("http://localhost:1234/post_views/rank?date=#{@date}").returns(HTTP::Response.new(status: 200, body: body, version: "1.1"))
|
|
||||||
|
|
||||||
posts = @service.popular_posts(@date)
|
posts = @service.popular_posts(@date)
|
||||||
assert_equal([@post], posts)
|
assert_equal([@post], posts)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "return nothing on failure" do
|
should "return nothing on failure" do
|
||||||
@service.http.expects(:get).with("http://localhost:1234/post_views/rank?date=#{@date}").returns(HTTP::Response.new(status: 500, body: "", version: "1.1"))
|
Danbooru::Http.any_instance.expects(:get).with("http://localhost:1234/post_views/rank?date=#{@date}").returns(HTTP::Response.new(status: 500, body: "", version: "1.1"))
|
||||||
|
Danbooru::Http.any_instance.expects(:get).with("http://localhost:1234/post_views/rank?date=#{@date.yesterday}").returns(HTTP::Response.new(status: 500, body: "", version: "1.1"))
|
||||||
|
|
||||||
assert_equal([], @service.popular_posts(@date))
|
assert_equal([], @service.popular_posts(@date))
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user