| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FollowingAccountsController < ApplicationController | 
					
						
							|  |  |  |   include AccountControllerConcern | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-04 01:30:44 +02:00
										 |  |  |   before_action :set_cache_headers | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  |   def index | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |     respond_to do |format| | 
					
						
							| 
									
										
										
										
											2018-02-26 16:18:41 +01:00
										 |  |  |       format.html do | 
					
						
							| 
									
										
										
										
											2019-04-04 01:30:44 +02:00
										 |  |  |         mark_cacheable! unless user_signed_in? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 02:26:51 +02:00
										 |  |  |         next if @account.user_hides_network? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |         follows | 
					
						
							|  |  |  |         @relationships = AccountRelationshipsPresenter.new(follows.map(&:target_account_id), current_user.account_id) if user_signed_in? | 
					
						
							| 
									
										
										
										
											2018-02-26 16:18:41 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       format.json do | 
					
						
							| 
									
										
										
										
											2018-05-18 02:26:51 +02:00
										 |  |  |         raise Mastodon::NotPermittedError if params[:page].present? && @account.user_hides_network? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-04 01:30:44 +02:00
										 |  |  |         if params[:page].blank? | 
					
						
							|  |  |  |           skip_session! | 
					
						
							|  |  |  |           expires_in 3.minutes, public: true | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 17:43:42 +02:00
										 |  |  |         render json: collection_presenter, | 
					
						
							|  |  |  |                serializer: ActivityPub::CollectionSerializer, | 
					
						
							|  |  |  |                adapter: ActivityPub::Adapter, | 
					
						
							|  |  |  |                content_type: 'application/activity+json' | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |   def follows | 
					
						
							|  |  |  |     @follows ||= Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |   def page_url(page) | 
					
						
							|  |  |  |     account_following_index_url(@account, page: page) unless page.nil? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   def collection_presenter | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |     if params[:page].present? | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |       ActivityPub::CollectionPresenter.new( | 
					
						
							|  |  |  |         id: account_following_index_url(@account, page: params.fetch(:page, 1)), | 
					
						
							|  |  |  |         type: :ordered, | 
					
						
							|  |  |  |         size: @account.following_count, | 
					
						
							|  |  |  |         items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.target_account) }, | 
					
						
							|  |  |  |         part_of: account_following_index_url(@account), | 
					
						
							|  |  |  |         next: page_url(follows.next_page), | 
					
						
							|  |  |  |         prev: page_url(follows.prev_page) | 
					
						
							|  |  |  |       ) | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |     else | 
					
						
							|  |  |  |       ActivityPub::CollectionPresenter.new( | 
					
						
							|  |  |  |         id: account_following_index_url(@account), | 
					
						
							|  |  |  |         type: :ordered, | 
					
						
							|  |  |  |         size: @account.following_count, | 
					
						
							| 
									
										
										
										
											2018-05-04 20:17:01 +02:00
										 |  |  |         first: page_url(1) | 
					
						
							| 
									
										
										
										
											2017-09-19 23:37:06 +09:00
										 |  |  |       ) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-19 07:52:37 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | end |