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
|