about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-02-11 02:12:05 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-02-11 02:58:00 +0100
commit149887a0ffc81b588520ff82ab9fda8dff7bce6c (patch)
treefc1ba51d91fbadf729241381a8c46643121ad99f /app/models
parentd551e43a9bc35b4785285e78f5ecd3157636b447 (diff)
Make follow requests federate
Diffstat (limited to 'app/models')
-rw-r--r--app/models/favourite.rb4
-rw-r--r--app/models/follow_request.rb36
-rw-r--r--app/models/stream_entry.rb2
3 files changed, 39 insertions, 3 deletions
diff --git a/app/models/favourite.rb b/app/models/favourite.rb
index 3f3616dce..cd8e2098c 100644
--- a/app/models/favourite.rb
+++ b/app/models/favourite.rb
@@ -12,11 +12,11 @@ class Favourite < ApplicationRecord
   validates :status_id, uniqueness: { scope: :account_id }
 
   def verb
-    :favorite
+    destroyed? ? :unfavorite : :favorite
   end
 
   def title
-    "#{account.acct} favourited a status by #{status.account.acct}"
+    destroyed? ? "#{account.acct} no longer favourites a status by #{status.account.acct}" : "#{account.acct} favourited a status by #{status.account.acct}"
   end
 
   delegate :object_type, to: :target
diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb
index 936ad0691..989c2c2a2 100644
--- a/app/models/follow_request.rb
+++ b/app/models/follow_request.rb
@@ -2,6 +2,7 @@
 
 class FollowRequest < ApplicationRecord
   include Paginable
+  include Streamable
 
   belongs_to :account
   belongs_to :target_account, class_name: 'Account'
@@ -12,12 +13,47 @@ class FollowRequest < ApplicationRecord
   validates :account_id, uniqueness: { scope: :target_account_id }
 
   def authorize!
+    @verb = :authorize
+
     account.follow!(target_account)
     MergeWorker.perform_async(target_account.id, account.id)
+
     destroy!
   end
 
   def reject!
+    @verb = :reject
     destroy!
   end
+
+  def verb
+    destroyed? ? (@verb || :delete) : :request_friend
+  end
+
+  def target
+    target_account
+  end
+
+  def object_type
+    :person
+  end
+
+  def hidden?
+    true
+  end
+
+  def title
+    if destroyed?
+      case @verb
+      when :authorize
+        "#{target_account.acct} authorized #{account.acct}'s request to follow"
+      when :reject
+        "#{target_account.acct} rejected #{account.acct}'s request to follow"
+      else
+        "#{account.acct} withdrew the request to follow #{target_account.acct}"
+      end
+    else
+      "#{account.acct} requested to follow #{target_account.acct}"
+    end
+  end
 end
diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb
index fcc691bef..e0b85be15 100644
--- a/app/models/stream_entry.rb
+++ b/app/models/stream_entry.rb
@@ -30,7 +30,7 @@ class StreamEntry < ApplicationRecord
   end
 
   def targeted?
-    [:follow, :unfollow, :block, :unblock, :share, :favorite].include? verb
+    [:follow, :request_friend, :authorize, :unfollow, :block, :unblock, :share, :favorite].include? verb
   end
 
   def target