0
0
Fork 0

Add support for editing for published statuses (#16697)

* Add support for editing for published statuses

* Fix references to stripped-out code

* Various fixes and improvements

* Further fixes and improvements

* Fix updates being potentially sent to unauthorized recipients

* Various fixes and improvements

* Fix wrong words in test

* Fix notifying accounts that were tagged but were not in the audience

* Fix mistake
This commit is contained in:
Eugen Rochko 2022-01-19 22:37:27 +01:00 committed by GitHub
parent 2d1f082bb6
commit 1060666c58
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 1415 additions and 574 deletions

View file

@ -2,15 +2,38 @@
class PushUpdateWorker
include Sidekiq::Worker
include Redisable
def perform(account_id, status_id, timeline_id = nil)
account = Account.find(account_id)
status = Status.find(status_id)
message = InlineRenderer.render(status, account, :status)
timeline_id = "timeline:#{account.id}" if timeline_id.nil?
def perform(account_id, status_id, timeline_id = nil, options = {})
@account = Account.find(account_id)
@status = Status.find(status_id)
@timeline_id = timeline_id || "timeline:#{account.id}"
@options = options.symbolize_keys
Redis.current.publish(timeline_id, Oj.dump(event: :update, payload: message, queued_at: (Time.now.to_f * 1000.0).to_i))
publish!
rescue ActiveRecord::RecordNotFound
true
end
private
def payload
InlineRenderer.render(@status, @account, :status)
end
def message
Oj.dump(
event: update? ? :'status.update' : :update,
payload: payload,
queued_at: (Time.now.to_f * 1000.0).to_i
)
end
def publish!
redis.publish(@timeline_id, message)
end
def update?
@options[:update]
end
end