Notify remote users about mentions
parent
79609d6270
commit
c967802c43
|
@ -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