about summary refs log tree commit diff
path: root/app/services
diff options
context:
space:
mode:
authorFire Demon <firedemon@creature.cafe>2020-08-10 18:10:06 -0500
committerFire Demon <firedemon@creature.cafe>2020-08-30 05:45:17 -0500
commit07339cf4906c93c2a79f395a8fb3104c852b1fa9 (patch)
tree09cdefc1476364970c84c1d96b2cf99510cf27d9 /app/services
parent034315fffe528c5181640b6f372a5822bf405f1a (diff)
[Timelines] Replace Federated timetime with public local reblogs when in local mode
Diffstat (limited to 'app/services')
-rw-r--r--app/services/fan_out_on_write_service.rb15
1 files changed, 11 insertions, 4 deletions
diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb
index 3f845ecd4..08963cf5e 100644
--- a/app/services/fan_out_on_write_service.rb
+++ b/app/services/fan_out_on_write_service.rb
@@ -23,14 +23,16 @@ class FanOutOnWriteService < BaseService
       deliver_to_lists(status)
     end
 
-    return if status.account.silenced? || !status.public_visibility?
-    return if status.reblog? && !Setting.show_reblogs_in_public_timelines
+    return if status.account.silenced?
+
+    deliver_to_public(status.reblog) if status.local? && status.reblog? && status.reblog.public_visibility? && !status.reblog.account.silenced?
+
+    return if status.reblog? || !status.public_visibility?
 
     deliver_to_hashtags(status)
 
     return if status.reply? && status.in_reply_to_account_id != status.account_id && !Setting.show_replies_in_public_timelines
 
-    deliver_to_public(status)
     deliver_to_media(status) if status.media_attachments.any?
   end
 
@@ -85,8 +87,13 @@ class FanOutOnWriteService < BaseService
   end
 
   def deliver_to_public(status)
+    key = "timeline:public:#{status.id}"
+    return if Redis.current.get(key)
+
     Rails.logger.debug "Delivering status #{status.id} to public timeline"
 
+    Redis.current.set(key, true, ex: 6.hours)
+
     Redis.current.publish('timeline:public', @payload)
     if status.local?
       Redis.current.publish('timeline:public:local', @payload)
@@ -109,7 +116,7 @@ class FanOutOnWriteService < BaseService
   def deliver_to_direct_timelines(status)
     Rails.logger.debug "Delivering status #{status.id} to direct timelines"
 
-    FeedInsertWorker.push_bulk(status.mentions.includes(:account).map(&:account).select { |mentioned_account| mentioned_account.local? }) do |account|
+    FeedInsertWorker.push_bulk(status.mentions.includes(:account).map(&:account).select(&:local?)) do |account|
       [status.id, account.id, :direct]
     end
   end