diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index c10a2c680..2d4c2dd9a 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -11,8 +11,8 @@ class AccountsController < ApplicationController if user_signed_in? status_ids = @statuses.collect { |s| [s.id, s.reblog_of_id] }.flatten.uniq - @favourited = Favourite.where(status_id: status_ids).where(account_id: current_user.account_id).map { |f| [f.status_id, true] }.to_h - @reblogged = Status.where(reblog_of_id: status_ids).where(account_id: current_user.account_id).map { |s| [s.reblog_of_id, true] }.to_h + @favourited = Status.favourites_map(status_ids, current_user.account_id) + @reblogged = Status.reblogs_map(status_ids, current_user.account_id) else @favourited = {} @reblogged = {} diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb index 1e50d3b60..c26149627 100644 --- a/app/controllers/stream_entries_controller.rb +++ b/app/controllers/stream_entries_controller.rb @@ -7,6 +7,20 @@ class StreamEntriesController < ApplicationController def show @type = @stream_entry.activity_type.downcase + if @stream_entry.activity_type == 'Status' + @ancestors = @stream_entry.activity.ancestors.with_includes.with_counters + @descendants = @stream_entry.activity.descendants.with_includes.with_counters + + if user_signed_in? + status_ids = [@stream_entry.activity_id] + @ancestors.map { |s| s.id } + @descendants.map { |s| s.id } + @favourited = Status.favourites_map(status_ids, current_user.account_id) + @reblogged = Status.reblogs_map(status_ids, current_user.account_id) + else + @favourited = {} + @reblogged = {} + end + end + respond_to do |format| format.html format.atom diff --git a/app/models/status.rb b/app/models/status.rb index 12c58733c..4adf2944c 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -75,4 +75,12 @@ class Status < ApplicationRecord def self.as_mentions_timeline(account) self.where(id: Mention.where(account: account).pluck(:status_id)).with_includes.with_counters end + + def self.favourites_map(status_ids, account_id) + Favourite.where(status_id: status_ids).where(account_id: account_id).map { |f| [f.status_id, true] }.to_h + end + + def self.reblogs_map(status_ids, account_id) + self.where(reblog_of_id: status_ids).where(account_id: account_id).map { |s| [s.reblog_of_id, true] }.to_h + end end diff --git a/app/views/stream_entries/_status.html.haml b/app/views/stream_entries/_status.html.haml index defadffc6..ece31d0e2 100644 --- a/app/views/stream_entries/_status.html.haml +++ b/app/views/stream_entries/_status.html.haml @@ -4,7 +4,7 @@ - centered = include_threads && !is_predecessor && !is_successor - if status.reply? && include_threads - - status.ancestors.with_includes.with_counters.each do |status| + - @ancestors.each do |status| = render partial: 'status', locals: { status: status, is_predecessor: true } .entry{ class: entry_classes(status, is_predecessor, is_successor, include_threads) } @@ -43,5 +43,5 @@ %li.transparent-background= link_to '', media.file.url, style: "background-image: url(#{media.file.url(:small)})", target: '_blank' - if include_threads - - status.descendants.with_includes.with_counters.each do |status| + - @descendants.each do |status| = render partial: 'status', locals: { status: status, is_successor: true }