Notify remote users about mentions
This commit is contained in:
		| @@ -1,17 +1,44 @@ | |||||||
| module Mastodon | module Mastodon | ||||||
|   module Entities |   module Entities | ||||||
|     class Account < Grape::Entity |     class Account < Grape::Entity | ||||||
|  |       include ApplicationHelper | ||||||
|  |  | ||||||
|  |       expose :id | ||||||
|       expose :username |       expose :username | ||||||
|       expose :domain |  | ||||||
|  |       expose :domain do |account| | ||||||
|  |         account.local? ? LOCAL_DOMAIN : account.domain | ||||||
|  |       end | ||||||
|  |  | ||||||
|       expose :display_name |       expose :display_name | ||||||
|       expose :note |       expose :note | ||||||
|  |  | ||||||
|  |       expose :url do |account| | ||||||
|  |         account.local? ? profile_url(name: account.username) : account.url | ||||||
|  |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     class Status < Grape::Entity |     class Status < Grape::Entity | ||||||
|  |       include ApplicationHelper | ||||||
|  |  | ||||||
|       format_with(:iso_timestamp) { |dt| dt.iso8601 } |       format_with(:iso_timestamp) { |dt| dt.iso8601 } | ||||||
|  |  | ||||||
|       expose :uri |       expose :id | ||||||
|  |  | ||||||
|  |       expose :uri do |status| | ||||||
|  |         status.local? ? unique_tag(status.stream_entry.created_at, status.stream_entry.activity_id, status.stream_entry.activity_type) : status.uri | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       expose :url do |status| | ||||||
|  |         status.local? ? status_url(name: status.account.username, id: status.id) : status.url | ||||||
|  |       end | ||||||
|  |  | ||||||
|       expose :text |       expose :text | ||||||
|  |       expose :in_reply_to_id | ||||||
|  |  | ||||||
|  |       expose :reblog_of_id | ||||||
|  |       expose :reblog, using: Mastodon::Entities::Status | ||||||
|  |  | ||||||
|       expose :account, using: Mastodon::Entities::Account |       expose :account, using: Mastodon::Entities::Account | ||||||
|  |  | ||||||
|       with_options(format_with: :iso_timestamp) do |       with_options(format_with: :iso_timestamp) do | ||||||
|   | |||||||
| @@ -3,11 +3,11 @@ module Mastodon | |||||||
|     version 'v1', using: :path |     version 'v1', using: :path | ||||||
|     format :json |     format :json | ||||||
|  |  | ||||||
|     resource :statuses do |     resource :timelines do | ||||||
|       desc 'Return a public timeline' |       desc 'Return a public timeline' | ||||||
|  |  | ||||||
|       get :all do |       get :public do | ||||||
|         present Status.all, with: Mastodon::Entities::Status |         # todo | ||||||
|       end |       end | ||||||
|  |  | ||||||
|       desc 'Return the home timeline of a logged in user' |       desc 'Return the home timeline of a logged in user' | ||||||
|   | |||||||
| @@ -9,6 +9,11 @@ class PostStatusService < BaseService | |||||||
|       next unless local_account.nil? |       next unless local_account.nil? | ||||||
|       follow_remote_account_service.("acct:#{match.first}") |       follow_remote_account_service.("acct:#{match.first}") | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     status.mentions.each do |mentioned_account| | ||||||
|  |       next if mentioned_account.local? | ||||||
|  |       send_interaction_service.(status.stream_entry, mentioned_account) | ||||||
|  |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   private |   private | ||||||
| @@ -16,4 +21,8 @@ class PostStatusService < BaseService | |||||||
|   def follow_remote_account_service |   def follow_remote_account_service | ||||||
|     @follow_remote_account_service ||= FollowRemoteAccountService.new |     @follow_remote_account_service ||= FollowRemoteAccountService.new | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def send_interaction_service | ||||||
|  |     @send_interaction_service ||= SendInteractionService.new | ||||||
|  |   end | ||||||
| end | end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user