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
					
				
					 3 changed files with 18 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -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…
	
	Add table
		
		Reference in a new issue