diff options
author | multiple creatures <dev@multiple-creature.party> | 2019-04-06 11:51:54 -0500 |
---|---|---|
committer | multiple creatures <dev@multiple-creature.party> | 2019-05-21 03:16:21 -0500 |
commit | 7580036307581a96790816683734433738ddd2b4 (patch) | |
tree | 59647e9e0d3f65900932dcdcf5062d53481b5de0 | |
parent | b507a598c50676ac4b1ba0bbe483819ec33c5a6e (diff) |
curated world: also consider public favs
-rw-r--r-- | app/models/status.rb | 13 | ||||
-rw-r--r-- | app/services/fan_out_on_write_service.rb | 5 | ||||
-rw-r--r-- | app/services/favourite_service.rb | 3 |
3 files changed, 15 insertions, 6 deletions
diff --git a/app/models/status.rb b/app/models/status.rb index dcf53a5ea..1dfe8715b 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -356,7 +356,7 @@ class Status < ApplicationRecord query = timeline_scope(local_only).without_replies else # instead of our ftl being a noisy irrelevant firehose - # only show public stuff boosted by the community + # only show public stuff boosted/faved by the community query = Status.network if local_only then # we don't want to change the ltl @@ -366,14 +366,21 @@ class Status < ApplicationRecord .without_reblogs else # but on the ftl query = query.without_replies unless Setting.show_replies_in_public_timelines + # grab the stuff we faved + fav_query = Favourite.select('status_id') + .where(account_id: Account.local) + .reorder(:status_id) + .distinct # grab the stuff we boosted - subquery = query.reblogs.select(:reblog_of_id) + boost_query = query.reblogs.select(:reblog_of_id) .reorder(nil) .distinct # map those ids to actual statuses # THIS QUERY IS EXPENSIVE AS FUCK!!!!!!! # but it does the job - query = Status.where(id: subquery).with_public_visibility + query = Status.where(id: boost_query) + .or(where(id: fav_query)) + .with_public_visibility end end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 2065acde3..a81482dd6 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -3,7 +3,7 @@ class FanOutOnWriteService < BaseService # Push a status into home and mentions feeds # @param [Status] status - def call(status) + def call(status, allow_nonlocal = false, deliver_to_local = true) raise Mastodon::RaceConditionError if status.visibility.nil? deliver_to_self(status) if status.account.local? @@ -27,8 +27,7 @@ class FanOutOnWriteService < BaseService deliver_to_hashtags(status) if !status.reblog? && status.distributable? # we want to let community users decide what goes on the ftl with boosts - return unless status.network? || status.relayed? - deliver_to_local = true + return unless allow_nonlocal || status.network? || status.relayed? if status.reblog? then status = Status.find(status.reblog_of_id) diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb index b565bcc32..fd7ade02b 100644 --- a/app/services/favourite_service.rb +++ b/app/services/favourite_service.rb @@ -16,6 +16,9 @@ class FavouriteService < BaseService favourite = Favourite.create!(account: account, status: status) + # stream it to the world timeline if public + FanOutOnWriteService.new.call(status, true, false) if status.public_visibility? + create_notification(favourite) bump_potential_friendship(account, status) |