commit: c605b828b53165cb0161a1885e03202013b63f52
parent: aab330eb2d39711e19753e89ba7ff67521929cf0
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sun, 6 Mar 2016 12:51:55 +0100
Adding routes to follow, unfollow, favourite and reblog (locally known models)
Diffstat:
4 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
@@ -3,6 +3,7 @@ class AccountsController < ApplicationController
before_action :set_account
before_action :set_webfinger_header
+ before_action :authenticate_user!, only: [:follow, :unfollow]
def show
@statuses = @account.statuses.order('id desc').includes(thread: [:account], reblog: [:account], stream_entry: [])
@@ -13,6 +14,16 @@ class AccountsController < ApplicationController
end
end
+ def follow
+ current_user.account.follow!(@account)
+ redirect_to root_path
+ end
+
+ def unfollow
+ current_user.account.unfollow!(@account)
+ redirect_to root_path
+ end
+
private
def set_account
diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb
@@ -3,6 +3,8 @@ class StreamEntriesController < ApplicationController
before_action :set_account
before_action :set_stream_entry
+ before_action :authenticate_user!, only: [:reblog, :favourite]
+ before_action :only_statuses!, only: [:reblog, :favourite]
def show
@type = @stream_entry.activity_type.downcase
@@ -13,6 +15,16 @@ class StreamEntriesController < ApplicationController
end
end
+ def reblog
+ ReblogService.new.(current_user.account, @stream_entry.activity)
+ redirect_to root_path
+ end
+
+ def favourite
+ FavouriteService.new.(current_user.account, @stream_entry.activity)
+ redirect_to root_path
+ end
+
private
def set_account
@@ -22,4 +34,8 @@ class StreamEntriesController < ApplicationController
def set_stream_entry
@stream_entry = @account.stream_entries.find(params[:id])
end
+
+ def only_statuses!
+ redirect_to root_url unless @stream_entry.activity_type == 'Status'
+ end
end
diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb
@@ -0,0 +1,19 @@
+class FavouriteService < BaseService
+ # Favourite a status and notify remote user
+ # @param [Account] account
+ # @param [Status] status
+ # @return [Favourite]
+ def call(account, status)
+ favourite = Favourite.create!(account: account, status: status)
+ account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
+ return favourite if status.local?
+ send_interaction_service.(favourite.stream_entry, status.account)
+ favourite
+ end
+
+ private
+
+ def send_interaction_service
+ @send_interaction_service ||= SendInteractionService.new
+ end
+end
diff --git a/config/routes.rb b/config/routes.rb
@@ -9,7 +9,17 @@ Rails.application.routes.draw do
}
resources :accounts, path: 'users', only: [:show], param: :username do
- resources :stream_entries, path: 'updates', only: [:show]
+ member do
+ post :follow
+ post :unfollow
+ end
+
+ resources :stream_entries, path: 'updates', only: [:show] do
+ member do
+ post :reblog
+ post :favourite
+ end
+ end
end
namespace :api do