summaryrefslogtreecommitdiff
path: root/app/controllers/activities_controller.rb
blob: 6366332e05f3256c8142689be6205713529d4ed5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# frozen_string_literal: true

class ActivitiesController < ApplicationController
  include TimePeriod

  skip_authorization_check

  def show
    @page_layout_class = 'layout--wide'

    if cacheable_request
      rendered_frontpage = $redis.get('rendered_frontpage')

      if rendered_frontpage
        render html: rendered_frontpage.html_safe, layout: true
        return
      end
    end

    @title = 'Homepage'
    setup_pagination_and_tags
    get_time_period
    set_image_filter
    watching_images = current_user&.watching_images?

    @image_search = frontpage_images
    @top_scoring_images_search = get_top_scoring(4, randomize: true)
    @comments_search = get_recent_comments(5)
    @watched_images_search = (PostLoader.new(default_image_filter_options.merge(size: 15)).search('my:watched') if watching_images)

    # @image_search, @top_scoring_images_search, @comments_search, @watched_images_search = Elasticsearch::Model.msearch! [
    #   frontpage_images,
    #   get_top_scoring(4, randomize: true),
    #   get_recent_comments(5),
    #   (PostLoader.new(default_image_filter_options.merge(size: 15)).search('my:watched') if watching_images)
    # ].compact

    @top_scoring_images = @top_scoring_images_search.records(includes: [:image, :paste])
    @watched_images = @watched_images_search.records if watching_images
    @posts = @image_search.records(includes: [:image, :paste, :thumbnail])
    @comments = @comments_search.records(includes: { post: :tags })

    @topics = Topic.recent(6)
    @featured_image = Post.joins(:features).order('post_features.created_at desc').first

    if current_user
      image_ids = (@posts.map(&:id) + [@featured_image ? @featured_image.id : nil]) rescue []
      image_ids += @top_scoring_images.map(&:id) if @top_scoring_images
      image_ids += @watched_images.map(&:id) if @watched_images
      @interactions = PostQuery.interactions(image_ids.compact.uniq, current_user.id)
    end

    #@images.each do |image|
    #  if !image.processed && !$redis.sismember('processing_images', image.id.to_s)
    #    ProcessImageJob.perform_later(image.id, :priority_image_processing)
    #  end
    #end

    if cacheable_request
      rendered_frontpage = render_to_string layout: false
      $redis.set('rendered_frontpage', rendered_frontpage)
      $redis.expire('rendered_frontpage', 60.seconds)
      render html: rendered_frontpage, layout: true
    else
      respond_to do |format|
        format.html { render }
      end
    end
  end

  private

  def cacheable_request
    @cacheable_request ||= (request.format.html? && session['warden.user.user.key'].nil? && session[:filter_id].nil?)
  end
end