about summary refs log tree commit diff
path: root/app/views
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2022-05-09 07:43:08 +0200
committerGitHub <noreply@github.com>2022-05-09 07:43:08 +0200
commit2b8dc58b7ff7fb708687c08a75c99b3fb30efc49 (patch)
tree6145e0c99b5550ad80d902b67a76278e0753ac69 /app/views
parentf17e73da09e6c63665aee4e9731df7808094960e (diff)
Change RSS feeds (#18356)
* Change RSS feeds

- Use date and time for titles instead of ellipsized text
- Use full content in body, even when there is a content warning
- Use media extensions

* Change feed icons and add width and height attributes to custom emojis

* Fix custom emoji animate on hover breaking

* Fix tests
Diffstat (limited to 'app/views')
-rw-r--r--app/views/accounts/show.rss.ruby37
-rw-r--r--app/views/tags/show.rss.ruby36
2 files changed, 73 insertions, 0 deletions
diff --git a/app/views/accounts/show.rss.ruby b/app/views/accounts/show.rss.ruby
new file mode 100644
index 000000000..73c1c51e0
--- /dev/null
+++ b/app/views/accounts/show.rss.ruby
@@ -0,0 +1,37 @@
+RSS::Builder.build do |doc|
+  doc.title(display_name(@account))
+  doc.description(I18n.t('rss.descriptions.account', acct: @account.local_username_and_domain))
+  doc.link(params[:tag].present? ? short_account_tag_url(@account, params[:tag]) : short_account_url(@account))
+  doc.image(full_asset_url(@account.avatar.url(:original)), display_name(@account), params[:tag].present? ? short_account_tag_url(@account, params[:tag]) : short_account_url(@account))
+  doc.last_build_date(@statuses.first.created_at) if @statuses.any?
+  doc.icon(full_asset_url(@account.avatar.url(:original)))
+  doc.logo(full_pack_url('media/images/logo_transparent_white.svg'))
+  doc.generator("Mastodon v#{Mastodon::Version.to_s}")
+
+  @statuses.each do |status|
+    doc.item do |item|
+      item.title(l(status.created_at))
+      item.link(ActivityPub::TagManager.instance.url_for(status))
+      item.pub_date(status.created_at)
+      item.description(rss_status_content_format(status))
+
+      if status.ordered_media_attachments.first&.audio?
+        media = status.ordered_media_attachments.first
+        item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size)
+      end
+
+      status.ordered_media_attachments.each do |media|
+        item.media_content(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size) do |media_content|
+          media_content.medium(media.gifv? ? 'image' : media.type.to_s)
+          media_content.rating(status.sensitive? ? 'adult' : 'nonadult')
+          media_content.description(media.description) if media.description.present?
+          media_content.thumbnail(media.thumbnail.url(:original, false)) if media.thumbnail?
+        end
+      end
+
+      status.tags.each do |tag|
+        item.category(tag.name)
+      end
+    end
+  end
+end
diff --git a/app/views/tags/show.rss.ruby b/app/views/tags/show.rss.ruby
new file mode 100644
index 000000000..4152ecd24
--- /dev/null
+++ b/app/views/tags/show.rss.ruby
@@ -0,0 +1,36 @@
+RSS::Builder.build do |doc|
+  doc.title("##{@tag.name}")
+  doc.description(I18n.t('rss.descriptions.tag', hashtag: @tag.name))
+  doc.link(tag_url(@tag))
+  doc.last_build_date(@statuses.first.created_at) if @statuses.any?
+  doc.icon(full_asset_url(@account.avatar.url(:original)))
+  doc.logo(full_pack_url('media/images/logo_transparent_white.svg'))
+  doc.generator("Mastodon v#{Mastodon::Version.to_s}")
+
+  @statuses.each do |status|
+    doc.item do |item|
+      item.title(l(status.created_at))
+      item.link(ActivityPub::TagManager.instance.url_for(status))
+      item.pub_date(status.created_at)
+      item.description(rss_status_content_format(status))
+
+      if status.ordered_media_attachments.first&.audio?
+        media = status.ordered_media_attachments.first
+        item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size)
+      end
+
+      status.ordered_media_attachments.each do |media|
+        item.media_content(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size) do |media_content|
+          media_content.medium(media.gifv? ? 'image' : media.type.to_s)
+          media_content.rating(status.sensitive? ? 'adult' : 'nonadult')
+          media_content.description(media.description) if media.description.present?
+          media_content.thumbnail(media.thumbnail.url(:original, false)) if media.thumbnail?
+        end
+      end
+
+      status.tags.each do |tag|
+        item.category(tag.name)
+      end
+    end
+  end
+end