Notify remote users about mentions

This commit is contained in:
Eugen Rochko 2016-02-24 18:44:03 +01:00
parent 79609d6270
commit c967802c43
3 changed files with 41 additions and 5 deletions

View File

@ -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

View File

@ -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'

View File

@ -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