about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-02-24 18:44:03 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-02-24 18:44:03 +0100
commitc967802c4351f34d5c62e52b72c7d5c2d72ffba3 (patch)
treeb673170c5b9e02b8aa3b1d96642c26bba592c04d
parent79609d62705fa7060c1d1ab78234b4aabdbd7e0f (diff)
Notify remote users about mentions
-rw-r--r--app/api/mastodon/entities.rb31
-rw-r--r--app/api/mastodon/rest.rb6
-rw-r--r--app/services/post_status_service.rb9
3 files changed, 41 insertions, 5 deletions
diff --git a/app/api/mastodon/entities.rb b/app/api/mastodon/entities.rb
index 2e56a67df..975e72538 100644
--- a/app/api/mastodon/entities.rb
+++ b/app/api/mastodon/entities.rb
@@ -1,17 +1,44 @@
 module Mastodon
   module Entities
     class Account < Grape::Entity
+      include ApplicationHelper
+
+      expose :id
       expose :username
-      expose :domain
+
+      expose :domain do |account|
+        account.local? ? LOCAL_DOMAIN : account.domain
+      end
+
       expose :display_name
       expose :note
+
+      expose :url do |account|
+        account.local? ? profile_url(name: account.username) : account.url
+      end
     end
 
     class Status < Grape::Entity
+      include ApplicationHelper
+
       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 :in_reply_to_id
+
+      expose :reblog_of_id
+      expose :reblog, using: Mastodon::Entities::Status
+
       expose :account, using: Mastodon::Entities::Account
 
       with_options(format_with: :iso_timestamp) do
diff --git a/app/api/mastodon/rest.rb b/app/api/mastodon/rest.rb
index eaf337938..25a53202b 100644
--- a/app/api/mastodon/rest.rb
+++ b/app/api/mastodon/rest.rb
@@ -3,11 +3,11 @@ module Mastodon
     version 'v1', using: :path
     format :json
 
-    resource :statuses do
+    resource :timelines do
       desc 'Return a public timeline'
 
-      get :all do
-        present Status.all, with: Mastodon::Entities::Status
+      get :public do
+        # todo
       end
 
       desc 'Return the home timeline of a logged in user'
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index e8fc6cdef..39bbe9f9e 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -9,6 +9,11 @@ class PostStatusService < BaseService
       next unless local_account.nil?
       follow_remote_account_service.("acct:#{match.first}")
     end
+
+    status.mentions.each do |mentioned_account|
+      next if mentioned_account.local?
+      send_interaction_service.(status.stream_entry, mentioned_account)
+    end
   end
 
   private
@@ -16,4 +21,8 @@ class PostStatusService < BaseService
   def follow_remote_account_service
     @follow_remote_account_service ||= FollowRemoteAccountService.new
   end
+
+  def send_interaction_service
+    @send_interaction_service ||= SendInteractionService.new
+  end
 end