Skip to content
Extraits de code Groupes Projets
statuses_controller.rb 2,47 ko
Newer Older
  • Learn to ignore specific revisions
  • class Api::V1::StatusesController < ApiController
    
      before_action -> { doorkeeper_authorize! :read }, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite]
      before_action -> { doorkeeper_authorize! :write }, only:  [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite]
    
    
      before_action :set_status, only: [:show, :context, :reblogged_by, :favourited_by]
    
      respond_to :json
    
        @context = OpenStruct.new({ ancestors: @status.ancestors, descendants: @status.descendants })
        set_maps([@status] + @context[:ancestors] + @context[:descendants])
    
      def reblogged_by
        @accounts = @status.reblogs.includes(:account).limit(40).map(&:account)
        render action: :accounts
      end
    
      def favourited_by
        @accounts = @status.favourites.includes(:account).limit(40).map(&:account)
        render action: :accounts
      end
    
    
      def create
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        @status = PostStatusService.new.call(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id]), params[:media_ids])
    
        render action: :show
      end
    
    
      def destroy
        @status = Status.where(account_id: current_user.account).find(params[:id])
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        RemoveStatusService.new.call(@status)
    
      def reblog
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        @status = ReblogService.new.call(current_user.account, Status.find(params[:id])).reload
    
        render action: :show
      end
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        RemoveStatusService.new.call(Status.where(account_id: current_user.account, reblog_of_id: params[:id]).first!)
    
        @status = Status.find(params[:id])
        render action: :show
      end
    
    
      def favourite
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        @status = FavouriteService.new.call(current_user.account, Status.find(params[:id])).status.reload
    
        render action: :show
      end
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        @status = UnfavouriteService.new.call(current_user.account, Status.find(params[:id])).status.reload
    
        @statuses = Feed.new(:home, current_user.account).get(20, params[:max_id], params[:since_id]).to_a
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        render action: :index
    
        @statuses = Feed.new(:mentions, current_user.account).get(20, params[:max_id], params[:since_id]).to_a
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        render action: :index
      end
    
      def public
    
        @statuses = Status.as_public_timeline(current_user.account).paginate_by_max_id(20, params[:max_id], params[:since_id]).to_a
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        render action: :index
    
    
      private
    
      def set_status
        @status = Status.find(params[:id])
      end