Merge remote-tracking branch 'origin/develop' into explicit-addressing
[akkoma] / lib / pleroma / web / mastodon_api / views / status_view.ex
index c501c213c3e584c96b54d873f32b5dede5804c7a..6836d331a7ae89c5d2e58102f68ae55a26c5f698 100644 (file)
@@ -157,6 +157,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
 
     bookmarked = Activity.get_bookmark(activity, opts[:for]) != nil
 
+    thread_muted? =
+      case activity.thread_muted? do
+        thread_muted? when is_boolean(thread_muted?) -> thread_muted?
+        nil -> CommonAPI.thread_muted?(user, activity)
+      end
+
     attachment_data = object.data["attachment"] || []
     attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment)
 
@@ -228,7 +234,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       reblogged: reblogged?(activity, opts[:for]),
       favourited: present?(favorited),
       bookmarked: present?(bookmarked),
-      muted: CommonAPI.thread_muted?(user, activity) || User.mutes?(opts[:for], user),
+      muted: thread_muted? || User.mutes?(opts[:for], user),
       pinned: pinned?(activity, user),
       sensitive: sensitive,
       spoiler_text: summary_html,
@@ -285,8 +291,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       provider_url: page_url_data.scheme <> "://" <> page_url_data.host,
       url: page_url,
       image: image_url |> MediaProxy.url(),
-      title: rich_media[:title],
-      description: rich_media[:description],
+      title: rich_media[:title] || "",
+      description: rich_media[:description] || "",
       pleroma: %{
         opengraph: rich_media
       }
@@ -324,8 +330,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     }
   end
 
-  # TODO: Add tests for this view
-  def render("poll.json", %{object: object} = _opts) do
+  def render("poll.json", %{object: object} = opts) do
     {multiple, options} =
       case object.data do
         %{"anyOf" => options} when is_list(options) -> {true, options}
@@ -346,6 +351,16 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
           _ -> false
         end
 
+      voted =
+        if opts[:for] do
+          existing_votes =
+            Pleroma.Web.ActivityPub.Utils.get_existing_votes(opts[:for].ap_id, object)
+
+          existing_votes != [] or opts[:for].ap_id == object.data["actor"]
+        else
+          false
+        end
+
       {options, votes_count} =
         Enum.map_reduce(options, 0, fn %{"name" => name} = option, count ->
           current_count = option["replies"]["totalItems"] || 0
@@ -357,15 +372,15 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
         end)
 
       %{
-        # Mastodon uses separate ids for polls, but an object can't have more than one poll embedded so object id is fine
+        # Mastodon uses separate ids for polls, but an object can't have
+        # more than one poll embedded so object id is fine
         id: object.id,
         expires_at: Utils.to_masto_date(end_time),
         expired: expired,
         multiple: multiple,
         votes_count: votes_count,
         options: options,
-        # TODO: Actually check for a vote
-        voted: false,
+        voted: voted,
         emojis: build_emojis(object.data["emoji"])
       }
     else