forked from cybrespace/mastodon
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?
|
@pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
|
||||||
@statuses = filtered_status_page(params)
|
@statuses = filtered_status_page(params)
|
||||||
@statuses = cache_collection(@statuses, Status)
|
@statuses = cache_collection(@statuses, Status)
|
||||||
|
@rss_url = rss_url
|
||||||
|
|
||||||
unless @statuses.empty?
|
unless @statuses.empty?
|
||||||
@older_url = older_url if @statuses.last.id > filtered_statuses.last.id
|
@older_url = older_url if @statuses.last.id > filtered_statuses.last.id
|
||||||
|
@ -38,8 +39,9 @@ class AccountsController < ApplicationController
|
||||||
format.rss do
|
format.rss do
|
||||||
expires_in 0, public: true
|
expires_in 0, public: true
|
||||||
|
|
||||||
@statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status)
|
@statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE)
|
||||||
render xml: RSS::AccountSerializer.render(@account, @statuses)
|
@statuses = cache_collection(@statuses, Status)
|
||||||
|
render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag])
|
||||||
end
|
end
|
||||||
|
|
||||||
format.json do
|
format.json do
|
||||||
|
@ -97,6 +99,14 @@ class AccountsController < ApplicationController
|
||||||
params[:username]
|
params[:username]
|
||||||
end
|
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
|
def older_url
|
||||||
pagination_url(max_id: @statuses.last.id)
|
pagination_url(max_id: @statuses.last.id)
|
||||||
end
|
end
|
||||||
|
@ -126,7 +136,7 @@ class AccountsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_requested?
|
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
|
end
|
||||||
|
|
||||||
def filtered_status_page(params)
|
def filtered_status_page(params)
|
||||||
|
|
|
@ -5,12 +5,12 @@ class RSS::AccountSerializer
|
||||||
include StatusesHelper
|
include StatusesHelper
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
|
||||||
def render(account, statuses)
|
def render(account, statuses, tag)
|
||||||
builder = RSSBuilder.new
|
builder = RSSBuilder.new
|
||||||
|
|
||||||
builder.title("#{display_name(account)} (@#{account.local_username_and_domain})")
|
builder.title("#{display_name(account)} (@#{account.local_username_and_domain})")
|
||||||
.description(account_description(account))
|
.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'))
|
.logo(full_pack_url('media/images/logo.svg'))
|
||||||
.accent_color('2b90d9')
|
.accent_color('2b90d9')
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ class RSS::AccountSerializer
|
||||||
builder.to_xml
|
builder.to_xml
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.render(account, statuses)
|
def self.render(account, statuses, tag)
|
||||||
new.render(account, statuses)
|
new.render(account, statuses, tag)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
- if @account.user&.setting_noindex
|
- if @account.user&.setting_noindex
|
||||||
%meta{ name: 'robots', content: 'noindex, noarchive' }/
|
%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) }/
|
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
||||||
|
|
||||||
- if @older_url
|
- if @older_url
|
||||||
|
|
Loading…
Reference in New Issue