diff --git a/app/controllers/explore/posts_controller.rb b/app/controllers/explore/posts_controller.rb index e274fac03..eadbb4533 100644 --- a/app/controllers/explore/posts_controller.rb +++ b/app/controllers/explore/posts_controller.rb @@ -8,6 +8,12 @@ module Explore respond_with(@posts) end + def viewed + @post_set = PostSets::MostViewed.new(params[:date]) + @posts = @post_set.posts + respond_with(@posts) + end + def searches @date = params[:date] ? Date.parse(params[:date]) : Date.today @search_service = PopularSearchService.new(@date) diff --git a/app/logical/post_sets/most_viewed.rb b/app/logical/post_sets/most_viewed.rb new file mode 100644 index 000000000..c63811f90 --- /dev/null +++ b/app/logical/post_sets/most_viewed.rb @@ -0,0 +1,17 @@ +module PostSets + class MostViewed < PostSets::Base + attr_reader :date + + def initialize(date) + @date = date.blank? ? Time.zone.now : Time.zone.parse(date) + end + + def posts + @posts ||= PostViewCountService.new.popular_posts(date) + end + + def presenter + ::PostSetPresenters::MostViewed.new(self) + end + end +end diff --git a/app/logical/post_view_count_service.rb b/app/logical/post_view_count_service.rb index 7f5902202..14a173bd8 100644 --- a/app/logical/post_view_count_service.rb +++ b/app/logical/post_view_count_service.rb @@ -4,7 +4,7 @@ class PostViewCountService end def initialize - if !MissedSearchService.enabled? + if !PostViewCountService.enabled? raise NotImplementedError.new("the Reportbooru service isn't configured. Missed searches are not available.") end end @@ -30,4 +30,9 @@ class PostViewCountService rescue JSON::ParserError nil end + + def popular_posts(date = Date.today) + ranking = fetch_rank(date) + ranking.map {|x| Post.find(x[0])} + end end diff --git a/app/presenters/post_set_presenters/most_viewed.rb b/app/presenters/post_set_presenters/most_viewed.rb new file mode 100644 index 000000000..ac83f7b37 --- /dev/null +++ b/app/presenters/post_set_presenters/most_viewed.rb @@ -0,0 +1,54 @@ +module PostSetPresenters + class MostViewed < Base + attr_accessor :post_set, :tag_set_presenter + delegate :posts, :date, :to => :post_set + + def initialize(post_set) + @post_set = post_set + end + + def prev_day + date - 1.day + end + + def next_day + date + 1.day + end + + def nav_links_for_scale(template) + html = [] + html << '' + html << template.link_to( + "< Back".html_safe, + template.viewed_explore_posts_path( + :date => prev_day + ), + :rel => "prev" + ) + html << template.link_to( + date.to_s, + template.viewed_explore_posts_path( + :date => date + ), + :class => "desc" + ) + html << template.link_to( + "Next >".html_safe, + template.viewed_explore_posts_path( + :date => next_day + ), + :rel => "next" + ) + html << '' + html.join("\n").html_safe + end + + def nav_links(template) + html = [] + html << '
' + html.join("\n").html_safe + end + end +end diff --git a/app/views/explore/posts/viewed.html.erb b/app/views/explore/posts/viewed.html.erb new file mode 100644 index 000000000..b2d412b3f --- /dev/null +++ b/app/views/explore/posts/viewed.html.erb @@ -0,0 +1,21 @@ +