about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/accounts_controller.rb4
-rw-r--r--app/controllers/stream_entries_controller.rb14
-rw-r--r--app/models/status.rb8
-rw-r--r--app/views/stream_entries/_status.html.haml4
4 files changed, 26 insertions, 4 deletions
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 }