logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
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:

Mapp/controllers/accounts_controller.rb11+++++++++++
Mapp/controllers/stream_entries_controller.rb16++++++++++++++++
Aapp/services/favourite_service.rb19+++++++++++++++++++
Mconfig/routes.rb12+++++++++++-
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