diff options
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/api/v1/statuses_controller.rb | 30 | ||||
-rw-r--r-- | app/controllers/api_controller.rb | 9 |
2 files changed, 32 insertions, 7 deletions
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 77bdaa494..9312282ed 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true class Api::V1::StatusesController < ApiController - before_action :authorize_if_got_token, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] - before_action -> { doorkeeper_authorize! :write }, only: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] - before_action :require_user!, except: [:show, :context, :card, :reblogged_by, :favourited_by] - before_action :set_status, only: [:show, :context, :card, :reblogged_by, :favourited_by] + before_action :authorize_if_got_token, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite, :mute, :unmute] + before_action -> { doorkeeper_authorize! :write }, only: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite, :mute, :unmute] + before_action :require_user!, except: [:show, :context, :card, :reblogged_by, :favourited_by] + before_action :set_status, only: [:show, :context, :card, :reblogged_by, :favourited_by, :mute, :unmute] + before_action :set_conversation, only: [:mute, :unmute] respond_to :json @@ -105,6 +106,22 @@ class Api::V1::StatusesController < ApiController render :show end + def mute + current_account.mute_conversation!(@conversation) + + @mutes_map = { @conversation.id => true } + + render :show + end + + def unmute + current_account.unmute_conversation!(@conversation) + + @mutes_map = { @conversation.id => false } + + render :show + end + private def set_status @@ -112,6 +129,11 @@ class Api::V1::StatusesController < ApiController raise ActiveRecord::RecordNotFound unless @status.permitted?(current_account) end + def set_conversation + @conversation = @status.conversation + raise Mastodon::ValidationError if @conversation.nil? + end + def status_params params.permit(:status, :in_reply_to_id, :sensitive, :spoiler_text, :visibility, media_ids: []) end diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 957e3c315..1c67b6fdc 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -93,11 +93,14 @@ class ApiController < ApplicationController if current_account.nil? @reblogs_map = {} @favourites_map = {} + @mutes_map = {} return end - status_ids = statuses.compact.flat_map { |s| [s.id, s.reblog_of_id] }.uniq - @reblogs_map = Status.reblogs_map(status_ids, current_account) - @favourites_map = Status.favourites_map(status_ids, current_account) + status_ids = statuses.compact.flat_map { |s| [s.id, s.reblog_of_id] }.uniq + conversation_ids = statuses.compact.map(&:conversation_id).compact.uniq + @reblogs_map = Status.reblogs_map(status_ids, current_account) + @favourites_map = Status.favourites_map(status_ids, current_account) + @mutes_map = Status.mutes_map(conversation_ids, current_account) end end |