diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-05 01:59:46 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-05 01:59:46 +0200 |
commit | 926eea89b51196821d49c7216f38faf0aedb4b09 (patch) | |
tree | b0d44dffa1ed95451c95d75b6c884edf9c0dd049 /app/services | |
parent | 413e700fe027ed7a4fdac325a9369d1481d52458 (diff) |
RemoveStatusService fleshed out, still doesn't send Salmon slaps though
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/fan_out_on_write_service.rb | 2 | ||||
-rw-r--r-- | app/services/remove_status_service.rb | 50 |
2 files changed, 48 insertions, 4 deletions
diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 6e96fa75b..d51681e53 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -31,7 +31,7 @@ class FanOutOnWriteService < BaseService def push(type, receiver, status) redis.zadd(FeedManager.key(type, receiver.id), status.id, status.id) trim(type, receiver) - ActionCable.server.broadcast("timeline:#{receiver.id}", timeline: type, message: inline_render(receiver, status)) + ActionCable.server.broadcast("timeline:#{receiver.id}", type: 'update', timeline: type, message: inline_render(receiver, status)) end def trim(type, receiver) diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 1b5da6b2a..db043df08 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -1,10 +1,54 @@ class RemoveStatusService < BaseService def call(status) + remove_from_self(status) if status.account.local? + remove_from_followers(status) + remove_from_mentioned(status) + remove_reblogs(status) + status.destroy! + end + + private + + def remove_from_self(status) + unpush(:home, status.account, status) + end + + def remove_from_followers(status) + status.account.followers.each do |follower| + next unless follower.local? + unpush(:home, follower, status) + end + end + + def remove_from_mentioned(status) + status.mentions.each do |mention| + mentioned_account = mention.account + if mentioned_account.local? + unpush(:mentions, mentioned_account, status) + else + send_delete_salmon(mentioned_account, status) + end + end + end + + def send_delete_salmon(account, status) # TODO - # Remove from timelines of self, followers, and mentioned accounts - # For remote mentioned accounts, send delete Salmon - # Push delete event through ActionCable + end + + def remove_reblogs(status) + status.reblogs.each do |reblog| + RemoveStatusService.new.(reblog) + end + end + + def unpush(type, receiver, status) + redis.zremrangebyscore(FeedManager.key(type, receiver.id), status.id, status.id) + ActionCable.server.broadcast("timeline:#{receiver.id}", type: 'delete', id: status.id) + end + + def redis + $redis end end |