diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index eca330c26..0102ee093 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -25,7 +25,6 @@ this.initialize_post_image_resize_links(); this.initialize_post_image_resize_to_window_link(); this.initialize_similar(); - this.initialize_view_count(); if (Danbooru.meta("always-resize-images") === "true") { $("#image-resize-to-window-link").click(); @@ -536,25 +535,6 @@ } }); } - - Danbooru.Post.initialize_view_count = function() { - if ($("#views-for-post").length) { - $("#views-for-post-li").hide(); - var current_post_id = $("meta[name=post-id]").attr("content"); - $.ajax({ - url: Danbooru.meta("report-server") + "/hits/pv-" + current_post_id, - success: function(data) { - $("#views-for-post").html(data); - $("#views-for-post-li").show(); - }, - dataType: "text" - }); - } - } - - Danbooru.Post.set_view_count = function(count) { - $("#views-for-post").html(count); - } })(); $(document).ready(function() { diff --git a/app/controllers/explore/posts_controller.rb b/app/controllers/explore/posts_controller.rb index 064831647..c0f2bfe5a 100644 --- a/app/controllers/explore/posts_controller.rb +++ b/app/controllers/explore/posts_controller.rb @@ -8,10 +8,9 @@ module Explore respond_with(@posts) end - def popular_view - @post_set = PostSets::PopularView.new(params[:date], params[:scale]) - @posts = @post_set.posts - respond_with(@posts) + def searches + @date = params[:date] ? Date.parse(params[:date]) : Date.today + @search_service = PopularSearchService.new(@date, params[:scale] || "day") end def intro diff --git a/app/helpers/posts_helper.rb b/app/helpers/posts_helper.rb index d6f4eaeb6..eb47ef711 100644 --- a/app/helpers/posts_helper.rb +++ b/app/helpers/posts_helper.rb @@ -1,15 +1,17 @@ module PostsHelper - def post_view_count_js - return nil unless Danbooru.config.enable_view_counts + def post_search_count_js + return nil unless Danbooru.config.enable_post_search_counts - if action_name == "index" - return nil - elsif action_name == "show" - key = "show-#{params[:id]}" - value = session.id - digest = OpenSSL::Digest.new("sha256") - sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, "#{key},#{value}") - return render("posts/partials/show/view_count", key: key, value: value, sig: sig) + if action_name == "index" && params[:page].nil? + tags = Tag.scan_query(params[:tags]).sort.join(" ") + + if tags.present? + key = "ps-#{tags}" + value = session.id + digest = OpenSSL::Digest.new("sha256") + sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, "#{key},#{value}") + return render("posts/partials/index/search_count", key: key, value: value, sig: sig) + end end return nil diff --git a/app/logical/popular_search_service.rb b/app/logical/popular_search_service.rb new file mode 100644 index 000000000..9650ad517 --- /dev/null +++ b/app/logical/popular_search_service.rb @@ -0,0 +1,31 @@ +# queries reportbooru to find popular post searches +class PopularSearchService + attr_reader :date, :scale + + def initialize(date, scale) + @date = date + @scale = scale + end + + def each_search(&block) + fetch_data.scan(/\S+/).in_groups_of(2).each(&block) + end + + def fetch_data + dates = date.strftime("%Y-%m-%d") + + Cache.get("ps-#{scale}-#{dates}", 1.minute) do + url = URI.parse("#{Danbooru.config.report_server}/hits/#{scale}?date=#{dates}") + response = [] + Net::HTTP.start(url.host, url.port, :use_ssl => url.is_a?(URI::HTTPS)) do |http| + http.read_timeout = 1 + http.request_get(url.request_uri) do |res| + if res.is_a?(Net::HTTPSuccess) + response = res.body + end + end + end + response + end + end +end \ No newline at end of file diff --git a/app/logical/post_sets/popular_view.rb b/app/logical/post_sets/popular_view.rb deleted file mode 100644 index bf68b03ba..000000000 --- a/app/logical/post_sets/popular_view.rb +++ /dev/null @@ -1,73 +0,0 @@ -module PostSets - class PopularView < PostSets::Base - attr_reader :date, :scale - - def initialize(date, scale) - @date = date.blank? ? Time.zone.now : Time.zone.parse(date) - @scale = scale || "Day" - end - - def posts - @posts ||= begin - array = fetch_data.scan(/\S+/).in_groups_of(2) - post_ids = array.map(&:first) - posts = ::Post.where(id: post_ids).order(arbitrary_sql_order_clause(post_ids, "posts")) - posts.each.with_index do |post, i| - post.view_count = array[i][1].to_i - end - posts - end - end - - def min_date - case scale - when "week" - date.beginning_of_week - - when "month" - date.beginning_of_month - - else - date - end - end - - def max_date - case scale - when "week" - date.end_of_week - - when "month" - date.end_of_month - - else - date - end - end - - def source - "popular_by_#{scale.downcase}" - end - - def fetch_data - dates = date.strftime('%Y-%m-%d') - Cache.get("pv-#{scale}-#{dates}", 1.minute) do - url = URI.parse("#{Danbooru.config.report_server}/hits/#{source}?date=#{dates}") - response = [] - Net::HTTP.start(url.host, url.port, :use_ssl => url.is_a?(URI::HTTPS)) do |http| - http.read_timeout = 1 - http.request_get(url.request_uri) do |res| - if res.is_a?(Net::HTTPSuccess) - response = res.body - end - end - end - response - end - end - - def presenter - ::PostSetPresenters::Popular.new(self) - end - end -end diff --git a/app/presenters/post_set_presenters/popular_view.rb b/app/presenters/post_set_presenters/popular_view.rb deleted file mode 100644 index 736ad4301..000000000 --- a/app/presenters/post_set_presenters/popular_view.rb +++ /dev/null @@ -1,38 +0,0 @@ -module PostSetPresenters - class PopularView < Popular - def initialize(post_set) - @post_set = post_set - end - - def nav_links_for_scale(template, scale) - html = [] - html << '' - html << template.link_to( - "«prev".html_safe, - template.popular_explore_post_views_path( - :date => prev_date_for_scale(scale), - :scale => scale.downcase - ), - :rel => (link_rel_for_scale?(template, scale.downcase) ? "prev" : nil) - ) - html << template.link_to( - scale, - template.popular_explore_post_views_path( - :date => date, - :scale => scale.downcase - ), - :class => "desc" - ) - html << template.link_to( - "next»".html_safe, - template.popular_explore_post_views_path( - :date => next_date_for_scale(scale), - :scale => scale.downcase - ), - :rel => (link_rel_for_scale?(template, scale.downcase) ? "next" : nil) - ) - html << '' - html.join("\n").html_safe - end - end -end diff --git a/app/views/explore/posts/popular_view.html.erb b/app/views/explore/posts/popular_view.html.erb deleted file mode 100644 index 630d55452..000000000 --- a/app/views/explore/posts/popular_view.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -
| Tags | +Count | +
|---|---|
| <%= link_to tags, posts_path(:tags => tags) %> | +<%= count.to_i %> | +
+ View by + <%= link_to "day", searches_explore_posts_path(:date => params[:date], :scale => "day") %> | + <%= link_to "week", searches_explore_posts_path(:date => params[:date], :scale => "week") %> | + <%= link_to "year", searches_explore_posts_path(:date => params[:date], :scale => "year") %>. + + Back one + <%= link_to "day", searches_explore_posts_path(:date => 1.day.ago(@date), :scale => params[:scale]) %> | + <%= link_to "week", searches_explore_posts_path(:date => 1.week.ago(@date), :scale => params[:scale]) %>. + + Forward one + <%= link_to "day", searches_explore_posts_path(:date => 1.day.since(@date), :scale => params[:scale]) %> | + <%= link_to "week", searches_explore_posts_path(:date => 1.week.since(@date), :scale => params[:scale]) %>. +
+