diff --git a/app/lib/status_cache_hydrator.rb b/app/lib/status_cache_hydrator.rb index 34f6199ec0..676e9e62a0 100644 --- a/app/lib/status_cache_hydrator.rb +++ b/app/lib/status_cache_hydrator.rb @@ -26,12 +26,7 @@ class StatusCacheHydrator def hydrate_non_reblog_payload(empty_payload, account_id) empty_payload.tap do |payload| - payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.id) - payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.id) - payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.conversation_id) - payload[:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.id) - payload[:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.id) if @status.account_id == account_id - payload[:filtered] = mapped_applied_custom_filter(account_id, @status) + fill_status_payload(payload, @status, account_id) if payload[:poll] payload[:poll][:voted] = @status.account_id == account_id @@ -45,18 +40,12 @@ class StatusCacheHydrator payload[:muted] = false payload[:bookmarked] = false payload[:pinned] = false if @status.account_id == account_id - payload[:filtered] = mapped_applied_custom_filter(account_id, @status.reblog) # If the reblogged status is being delivered to the author who disabled the display of the application # used to create the status, we need to hydrate it here too payload[:reblog][:application] = payload_reblog_application if payload[:reblog][:application].nil? && @status.reblog.account_id == account_id - payload[:reblog][:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.reblog_of_id) - payload[:reblog][:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.reblog_of_id) - payload[:reblog][:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.reblog.conversation_id) - payload[:reblog][:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.reblog_of_id) - payload[:reblog][:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.reblog_of_id) if @status.reblog.account_id == account_id - payload[:reblog][:filtered] = payload[:filtered] + fill_status_payload(payload[:reblog], @status.reblog, account_id) if payload[:reblog][:poll] if @status.reblog.account_id == account_id @@ -69,11 +58,21 @@ class StatusCacheHydrator end end + payload[:filtered] = payload[:reblog][:filtered] payload[:favourited] = payload[:reblog][:favourited] payload[:reblogged] = payload[:reblog][:reblogged] end end + def fill_status_payload(payload, status, account_id) + payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: status.id) + payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: status.id) + payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: status.conversation_id) + payload[:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: status.id) + payload[:pinned] = StatusPin.exists?(account_id: account_id, status_id: status.id) if status.account_id == account_id + payload[:filtered] = mapped_applied_custom_filter(account_id, status) + end + def mapped_applied_custom_filter(account_id, status) CustomFilter .apply_cached_filters(CustomFilter.cached_filters_for(account_id), status)