Rewrite Atom generation from stream entries to use Ox instead of Nokogiri (#1124)
* Rewrite Atom generation from stream entries to use Ox instead of Nokogiri::Builder StreamEntry is now limited to only statuses, which allows some optimization. Removed extra queries on AccountsController#show. AtomSerializer instead of AtomBuilderHelper used in AccountsController#show, StreamEntriesController#show, StreamEntryRenderer and PubSubHubbub::DistributionWorker PubSubHubbub::DistributionWorker moves n+1 DomainBlock query to PubSubHubbub::DeliveryWorker instead. All Salmon slaps that aren't based on StreamEntry still use AtomBuilderHelper and Nokogiri * All Salmon slaps now use Ox instead of Nokogiri. No touch from status on account
This commit is contained in:
@ -13,6 +13,9 @@ class Pubsubhubbub::DeliveryWorker
|
||||
def perform(subscription_id, payload)
|
||||
subscription = Subscription.find(subscription_id)
|
||||
headers = {}
|
||||
host = Addressable::URI.parse(subscription.callback_url).host
|
||||
|
||||
return if DomainBlock.blocked?(host)
|
||||
|
||||
headers['User-Agent'] = 'Mastodon/PubSubHubbub'
|
||||
headers['Link'] = LinkHeader.new([[api_push_url, [%w(rel hub)]], [account_url(subscription.account, format: :atom), [%w(rel self)]]]).to_s
|
||||
|
@ -10,14 +10,10 @@ class Pubsubhubbub::DistributionWorker
|
||||
|
||||
return if stream_entry.hidden?
|
||||
|
||||
account = stream_entry.account
|
||||
renderer = AccountsController.renderer.new(method: 'get', http_host: Rails.configuration.x.local_domain, https: Rails.configuration.x.use_https)
|
||||
payload = renderer.render(:show, assigns: { account: account, entries: [stream_entry] }, formats: [:atom])
|
||||
# domains = account.followers_domains
|
||||
account = stream_entry.account
|
||||
payload = AtomSerializer.render(AtomSerializer.new.feed(account, [stream_entry]))
|
||||
|
||||
Subscription.where(account: account).active.select('id, callback_url').find_each do |subscription|
|
||||
host = Addressable::URI.parse(subscription.callback_url).host
|
||||
next if DomainBlock.blocked?(host) # || !domains.include?(host)
|
||||
Pubsubhubbub::DeliveryWorker.perform_async(subscription.id, payload)
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
|
Reference in New Issue
Block a user