about summary refs log tree commit diff
path: root/app/controllers/api/v1/timelines/direct_controller.rb
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-09-01 22:48:22 -0500
committermultiple creatures <dev@multiple-creature.party>2019-09-01 22:48:22 -0500
commit2d37586daeb38995933da10c88721d4cc25005e8 (patch)
treef9f8789c3139d354830eeda5f48f56dc901d84fd /app/controllers/api/v1/timelines/direct_controller.rb
parent86d5aa73e92c85dfd28356f2e7ce0103094c1536 (diff)
pre-emptively fetch missing remote media when a timeline's api page is read
Diffstat (limited to 'app/controllers/api/v1/timelines/direct_controller.rb')
-rw-r--r--app/controllers/api/v1/timelines/direct_controller.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/app/controllers/api/v1/timelines/direct_controller.rb b/app/controllers/api/v1/timelines/direct_controller.rb
index d8a76d153..61c12ebf7 100644
--- a/app/controllers/api/v1/timelines/direct_controller.rb
+++ b/app/controllers/api/v1/timelines/direct_controller.rb
@@ -9,6 +9,7 @@ class Api::V1::Timelines::DirectController < Api::BaseController
 
   def show
     @statuses = load_statuses
+    preload_media
     render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id)
   end
 
@@ -60,4 +61,9 @@ class Api::V1::Timelines::DirectController < Api::BaseController
   def pagination_since_id
     @statuses.first.id
   end
+
+  def preload_media
+    fetch_ids = @statuses.flat_map { |s| s.media_attachments.select { |m| m.needs_redownload? }.pluck(:id) }.uniq
+    fetch_ids.each { |m| FetchMediaWorker.perform_async(m) }
+  end
 end