闭社主体 forked from https://github.com/tootsuite/mastodon
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

30 lines
887 B

  1. # frozen_string_literal: true
  2. class ReblogService < BaseService
  3. # Reblog a status and notify its remote author
  4. # @param [Account] account Account to reblog from
  5. # @param [Status] reblogged_status Status to be reblogged
  6. # @return [Status]
  7. def call(account, reblogged_status)
  8. raise Mastodon::NotPermitted if reblogged_status.private_visibility?
  9. reblog = account.statuses.create!(reblog: reblogged_status, text: '')
  10. DistributionWorker.perform_async(reblog.id)
  11. Pubsubhubbub::DistributionWorker.perform_async(reblog.stream_entry.id)
  12. if reblogged_status.local?
  13. NotifyService.new.call(reblog.reblog.account, reblog)
  14. else
  15. NotificationWorker.perform_async(reblog.stream_entry.id, reblog.reblog.account_id)
  16. end
  17. reblog
  18. end
  19. private
  20. def send_interaction_service
  21. @send_interaction_service ||= SendInteractionService.new
  22. end
  23. end