From ede04cdb2443fe87a30b393c8dd2a5973dc05770 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 2 Feb 2017 00:39:17 +0100 Subject: [PATCH] Move rendering of JSON payloads for public/hashtag timelines to FanOutOnWriteService. The only recipient-specific part on them is reblogged/favourited. But since only newly created statuses appear on them, it is safe to assume that both attributes would be false --- app/channels/application_cable/channel.rb | 6 +++--- app/services/fan_out_on_write_service.rb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb index ae69032ce..f57bcc56a 100644 --- a/app/channels/application_cable/channel.rb +++ b/app/channels/application_cable/channel.rb @@ -5,12 +5,12 @@ module ApplicationCable protected def hydrate_status(encoded_message) - message = ActiveSupport::JSON.decode(encoded_message) + message = OJ.load(encoded_message) return [nil, message] if message['event'] == 'delete' - status = Status.find_by(id: message['payload']) - message['payload'] = FeedManager.instance.inline_render(current_user.account, 'api/v1/statuses/show', status) + status_json = OJ.load(message['payload']) + status = Status.find(status_json['id']) [status, message] end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 79c7bf248..13aad4632 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -35,12 +35,12 @@ class FanOutOnWriteService < BaseService def deliver_to_hashtags(status) Rails.logger.debug "Delivering status #{status.id} to hashtags" status.tags.find_each do |tag| - FeedManager.instance.broadcast("hashtag:#{tag.name}", event: 'update', payload: status.id) + FeedManager.instance.broadcast("hashtag:#{tag.name}", event: 'update', payload: FeedManager.instance.inline_render(nil, 'api/v1/statuses/show', status)) end end def deliver_to_public(status) Rails.logger.debug "Delivering status #{status.id} to public timeline" - FeedManager.instance.broadcast(:public, event: 'update', payload: status.id) + FeedManager.instance.broadcast(:public, event: 'update', payload: FeedManager.instance.inline_render(nil, 'api/v1/statuses/show', status)) end end