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 = {}
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
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
- 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) }
%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 }