summaryrefslogtreecommitdiffstats
path: root/app/lib
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2020-05-10 09:50:54 +0200
committerGitHub <noreply@github.com>2020-05-10 09:50:54 +0200
commita4240fd0272eb79b7d99cccfa7d14e8a1e12921d (patch)
treec6da3d4c75018c01c09fa0b582e6ca0b35aea790 /app/lib
parent73f3842284ac8ed6519e4d680ab17bde47dfbcae (diff)
Improve RSS entries for statuses (#13592)
* Improve RSS entries for statuses - Render polls in both accounts and tags serializers - Refactor RSS serializers - Change title preview to include ellipsis when truncated - Change title preview to show CW instead of toot text - Add tests * Remove title from OEmbed serialization Twitter doesn't serialize title either, and tihs allows us to move the title formatting code to the RSS serializers.
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/rss/serializer.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/app/lib/rss/serializer.rb b/app/lib/rss/serializer.rb
new file mode 100644
index 00000000000..fd56c568c70
--- /dev/null
+++ b/app/lib/rss/serializer.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+class RSS::Serializer
+ private
+
+ def render_statuses(builder, statuses)
+ statuses.each do |status|
+ builder.item do |item|
+ item.title(status_title(status))
+ .link(ActivityPub::TagManager.instance.url_for(status))
+ .pub_date(status.created_at)
+ .description(status.spoiler_text.presence || Formatter.instance.format(status, inline_poll_options: true).to_str)
+
+ status.media_attachments.each do |media|
+ item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size)
+ end
+ end
+ end
+ end
+
+ def status_title(status)
+ return "#{status.account.acct} deleted status" if status.destroyed?
+
+ preview = status.proper.spoiler_text.presence || status.proper.text
+ if preview.length > 30 || preview[0, 30].include?("\n")
+ preview = preview[0, 30]
+ preview = preview[0, preview.index("\n").presence || 30] + '…'
+ end
+
+ preview = "#{status.proper.spoiler_text.present? ? 'CW ' : ''}“#{preview}”#{status.proper.sensitive? ? ' (sensitive)' : ''}"
+
+ if status.reblog?
+ "#{status.account.acct} boosted #{status.reblog.account.acct}: #{preview}"
+ else
+ "#{status.account.acct}: #{preview}"
+ end
+ end
+end