Add an RSS feed tagged to a public profile page (#10502)
* Add featured tag support to rss feed on public account page * fix codeing style
This commit is contained in:
		
							parent
							
								
									a8b0bb355d
								
							
						
					
					
						commit
						9e1d28f48e
					
				| @ -28,6 +28,7 @@ class AccountsController < ApplicationController | ||||
|         @pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses? | ||||
|         @statuses        = filtered_status_page(params) | ||||
|         @statuses        = cache_collection(@statuses, Status) | ||||
|         @rss_url         = rss_url | ||||
| 
 | ||||
|         unless @statuses.empty? | ||||
|           @older_url = older_url if @statuses.last.id > filtered_statuses.last.id | ||||
| @ -38,8 +39,9 @@ class AccountsController < ApplicationController | ||||
|       format.rss do | ||||
|         expires_in 0, public: true | ||||
| 
 | ||||
|         @statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status) | ||||
|         render xml: RSS::AccountSerializer.render(@account, @statuses) | ||||
|         @statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE) | ||||
|         @statuses = cache_collection(@statuses, Status) | ||||
|         render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag]) | ||||
|       end | ||||
| 
 | ||||
|       format.json do | ||||
| @ -97,6 +99,14 @@ class AccountsController < ApplicationController | ||||
|     params[:username] | ||||
|   end | ||||
| 
 | ||||
|   def rss_url | ||||
|     if tag_requested? | ||||
|       short_account_tag_url(@account, params[:tag], format: 'rss') | ||||
|     else | ||||
|       short_account_url(@account, format: 'rss') | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def older_url | ||||
|     pagination_url(max_id: @statuses.last.id) | ||||
|   end | ||||
| @ -126,7 +136,7 @@ class AccountsController < ApplicationController | ||||
|   end | ||||
| 
 | ||||
|   def tag_requested? | ||||
|     request.path.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize) | ||||
|     request.path.split('.').first.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize) | ||||
|   end | ||||
| 
 | ||||
|   def filtered_status_page(params) | ||||
|  | ||||
| @ -5,12 +5,12 @@ class RSS::AccountSerializer | ||||
|   include StatusesHelper | ||||
|   include RoutingHelper | ||||
| 
 | ||||
|   def render(account, statuses) | ||||
|   def render(account, statuses, tag) | ||||
|     builder = RSSBuilder.new | ||||
| 
 | ||||
|     builder.title("#{display_name(account)} (@#{account.local_username_and_domain})") | ||||
|            .description(account_description(account)) | ||||
|            .link(ActivityPub::TagManager.instance.url_for(account)) | ||||
|            .link(tag.present? ? short_account_tag_url(account, tag) : short_account_url(account)) | ||||
|            .logo(full_pack_url('media/images/logo.svg')) | ||||
|            .accent_color('2b90d9') | ||||
| 
 | ||||
| @ -33,7 +33,7 @@ class RSS::AccountSerializer | ||||
|     builder.to_xml | ||||
|   end | ||||
| 
 | ||||
|   def self.render(account, statuses) | ||||
|     new.render(account, statuses) | ||||
|   def self.render(account, statuses, tag) | ||||
|     new.render(account, statuses, tag) | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -7,7 +7,7 @@ | ||||
|   - if @account.user&.setting_noindex | ||||
|     %meta{ name: 'robots', content: 'noindex, noarchive' }/ | ||||
| 
 | ||||
|   %link{ rel: 'alternate', type: 'application/rss+xml', href: account_url(@account, format: 'rss') }/ | ||||
|   %link{ rel: 'alternate', type: 'application/rss+xml', href: @rss_url }/ | ||||
|   %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/ | ||||
| 
 | ||||
|   - if @older_url | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user