Skip to content
Snippets Groups Projects
Commit 8da8387a authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Add shared statuses to the database

parent fa786867
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,10 @@ module ApplicationHelper
return match[1] unless match.nil?
end
def local_id?(id)
id.start_with?("tag:#{LOCAL_DOMAIN}")
end
def subscription_url(account)
add_base_url_prefix subscriptions_path(id: account.id, format: '')
end
......
class FetchEntryService < BaseService
# Knowing nothing but the URL of a remote status, create a local representation of it and return it
# @param [String] url Atom URL
# @return [Status]
def call(url)
body = http_client.get(url)
xml = Nokogiri::XML(body)
# todo
end
private
def http_client
HTTP
end
end
......@@ -32,12 +32,17 @@ class ProcessFeedService < BaseService
def add_reblog!(entry, status)
status.reblog = find_original_status(entry, target_id(entry))
if status.reblog.nil?
status.reblog = fetch_remote_status(entry)
end
status.save! unless status.reblog.nil?
end
def add_reply!(entry, status)
status.thread = find_original_status(entry, thread_id(entry))
status.save! unless status.thread.nil?
status.save!
end
def find_original_status(xml, id)
......@@ -46,23 +51,22 @@ class ProcessFeedService < BaseService
if local_id?(id)
Status.find(unique_tag_to_local_id(id, 'Status'))
else
status = Status.find_by(uri: id)
if status.nil?
status = fetch_remote_status(xml, id)
end
status
Status.find_by(uri: id)
end
end
def fetch_remote_status(xml, id)
url = xml.at_xpath('./link[@rel="self"]').attribute('href').value
nil
end
def fetch_remote_status(xml)
username = xml.at_xpath('./activity:object/xmlns:author/xmlns:name').content
url = xml.at_xpath('./activity:object/xmlns:author/xmlns:uri').content
domain = Addressable::URI.parse(url).host
account = Account.find_by(username: username, domain: domain)
if account.nil?
account = follow_remote_account_service.("acct:#{username}@#{domain}", false)
return nil if account.nil?
end
def local_id?(id)
id.start_with?("tag:#{LOCAL_DOMAIN}")
Status.new(account: account, uri: target_id(xml), text: target_content(xml), url: target_url(xml))
end
def published(xml)
......@@ -84,7 +88,7 @@ class ProcessFeedService < BaseService
end
def target_id(xml)
xml.at_xpath('./activity:object/xmlns:id').content
xml.at_xpath('.//activity:object/xmlns:id').content
rescue
nil
end
......@@ -93,6 +97,14 @@ class ProcessFeedService < BaseService
entry.at_xpath('./xmlns:id').content
end
def target_content(xml)
xml.at_xpath('.//activity:object/xmlns:content').content
end
def target_url(xml)
xml.at_xpath('.//activity:object/xmlns:link[@rel=alternate]').attribute('href').value
end
def object_type(xml)
xml.at_xpath('./activity:object-type').content.gsub('http://activitystrea.ms/schema/1.0/', '').to_sym
rescue
......
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