Commit 79609d62 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Add service for posting statuses (normal and replies), mention regex to

fetch webfinger information of mentioned accounts
parent 8da8387a
......@@ -14,6 +14,8 @@ class Account < ActiveRecord::Base
has_many :following, through: :active_relationships, source: :target_account
has_many :followers, through: :passive_relationships, source: :account
MENTION_RE = /(?:^|\W)@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i
def follow!(other_account)
self.active_relationships.first_or_create!(target_account: other_account)
end
......
......@@ -51,6 +51,17 @@ class Status < ActiveRecord::Base
m << thread.account if reply?
m << reblog.account if reblog?
unless reblog?
self.text.scan(Account::MENTION_RE).each do |match|
uri = match.first
username = uri.split('@').first
domain = uri.split('@').size == 2 ? uri.split('@').last : nil
account = Account.find_by(username: username, domain: domain)
m << account unless account.nil?
end
end
m
end
......
class PostStatusService < BaseService
def call(account, text, in_reply_to = nil)
status = account.statuses.create!(text: text, thread: in_reply_to)
status.text.scan(Account::MENTION_RE).each do |match|
next if match.first.split('@').size == 1
username, domain = match.first.split('@')
local_account = Account.find_by(username: username, domain: domain)
next unless local_account.nil?
follow_remote_account_service.("acct:#{match.first}")
end
end
private
def follow_remote_account_service
@follow_remote_account_service ||= FollowRemoteAccountService.new
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment