Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment