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