Add tag timelines.
[akkoma] / lib / pleroma / web / mastodon_api / views / status_view.ex
index d1e5f58c5c61816be6dd600c4b600b79c08d3aba..e561b32fe929f337ab33f071cf79ff8701c2fd34 100644 (file)
@@ -22,6 +22,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     |> Enum.map(fn (user) -> AccountView.render("mention.json", %{user: user}) end)
 
     repeated = opts[:for] && opts[:for].ap_id in (object["announcements"] || [])
+    favorited = opts[:for] && opts[:for].ap_id in (object["likes"] || [])
+
+    attachments = render_many(object["attachment"] || [], StatusView, "attachment.json", as: :attachment)
+
+    created_at = (object["published"] || "")
+    |> NaiveDateTime.from_iso8601!
+    |> NaiveDateTime.to_iso8601
+    |> String.replace(~r/(\.\d+)?$/, ".000Z", global: false)
 
     %{
       id: activity.id,
@@ -32,20 +40,44 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       in_reply_to_account_id: nil,
       reblog: nil,
       content: HtmlSanitizeEx.basic_html(object["content"]),
-      created_at: object["published"],
+      created_at: created_at,
       reblogs_count: announcement_count,
       favourites_count: like_count,
       reblogged: !!repeated,
-      favourited: false, # fix
+      favourited: !!favorited,
       muted: false,
       sensitive: sensitive,
       spoiler_text: "",
       visibility: "public",
-      media_attachments: [], # fix
+      media_attachments: attachments,
       mentions: mentions,
       tags: [], # fix,
-      application: nil,
+      application: %{
+        name: "Web",
+        website: nil
+      },
       language: nil
     }
   end
+
+  def render("attachment.json", %{attachment: attachment}) do
+    [%{"mediaType" => media_type, "href" => href} | _] = attachment["url"]
+
+    type = cond do
+      String.contains?(media_type, "image") -> "image"
+      String.contains?(media_type, "video") -> "video"
+      true -> "unknown"
+    end
+
+    << hash_id::signed-32, _rest::binary >> = :crypto.hash(:md5, href)
+
+    %{
+      id: attachment["id"] || hash_id,
+      url: href,
+      remote_url: href,
+      preview_url: href,
+      text_url: href,
+      type: type
+    }
+  end
 end