Pleroma.Activity.mastodon_notification_type/1
authorhref <href@random.sh>
Mon, 10 Dec 2018 14:50:10 +0000 (15:50 +0100)
committerhref <href@random.sh>
Fri, 14 Dec 2018 12:22:10 +0000 (13:22 +0100)
lib/pleroma/activity.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/push/push.ex

index c065f3b6ce690a688ead5a087135f46e44f13ba8..200addd6ebdba96a600c4a46816dd7b7559bb421 100644 (file)
@@ -3,6 +3,14 @@ defmodule Pleroma.Activity do
   alias Pleroma.{Repo, Activity, Notification}
   import Ecto.Query
 
+  # https://github.com/tootsuite/mastodon/blob/master/app/models/notification.rb#L19
+  @mastodon_notification_types %{
+    "Create" => "mention",
+    "Follow" => "follow",
+    "Announce" => "reblog",
+    "Like" => "favourite"
+  }
+
   schema "activities" do
     field(:data, :map)
     field(:local, :boolean, default: true)
@@ -88,4 +96,11 @@ defmodule Pleroma.Activity do
   end
 
   def get_in_reply_to_activity(_), do: nil
+
+  for {ap_type, type} <- @mastodon_notification_types do
+    def mastodon_notification_type(%Activity{data: %{"type" => unquote(ap_type)}}),
+      do: unquote(type)
+  end
+
+  def mastodon_notification_type(%Activity{}), do: nil
 end
index e105a1e15474cfa8dcef3f9b069843dc37a82a5c..4db7cd60f0e56530ad4f46e64f31bc02a5cf8733 100644 (file)
@@ -1055,52 +1055,37 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
 
   def render_notification(user, %{id: id, activity: activity, inserted_at: created_at} = _params) do
     actor = User.get_cached_by_ap_id(activity.data["actor"])
+    parent_activity = Activity.get_create_activity_by_object_ap_id(activity.data["object"])
+    mastodon_type = Activity.mastodon_notification_type(activity)
 
-    created_at =
-      NaiveDateTime.to_iso8601(created_at)
-      |> String.replace(~r/(\.\d+)?$/, ".000Z", global: false)
-
-    id = id |> to_string
+    response = %{
+      id: to_string(id),
+      type: mastodon_type,
+      created_at: CommonAPI.Utils.to_masto_date(activity.inserted_at),
+      account: AccountView.render("account.json", %{user: actor, for: user})
+    }
 
-    case activity.data["type"] do
-      "Create" ->
-        %{
-          id: id,
-          type: "mention",
-          created_at: created_at,
-          account: AccountView.render("account.json", %{user: actor, for: user}),
+    case mastodon_type do
+      "mention" ->
+        response
+        |> Map.merge(%{
           status: StatusView.render("status.json", %{activity: activity, for: user})
-        }
-
-      "Like" ->
-        liked_activity = Activity.get_create_activity_by_object_ap_id(activity.data["object"])
-
-        %{
-          id: id,
-          type: "favourite",
-          created_at: created_at,
-          account: AccountView.render("account.json", %{user: actor, for: user}),
-          status: StatusView.render("status.json", %{activity: liked_activity, for: user})
-        }
-
-      "Announce" ->
-        announced_activity = Activity.get_create_activity_by_object_ap_id(activity.data["object"])
-
-        %{
-          id: id,
-          type: "reblog",
-          created_at: created_at,
-          account: AccountView.render("account.json", %{user: actor, for: user}),
-          status: StatusView.render("status.json", %{activity: announced_activity, for: user})
-        }
-
-      "Follow" ->
-        %{
-          id: id,
-          type: "follow",
-          created_at: created_at,
-          account: AccountView.render("account.json", %{user: actor, for: user})
-        }
+        })
+
+      "favourite" ->
+        response
+        |> Map.merge(%{
+          status: StatusView.render("status.json", %{activity: parent_activity, for: user})
+        })
+
+      "reblog" ->
+        response
+        |> Map.merge(%{
+          status: StatusView.render("status.json", %{activity: parent_activity, for: user})
+        })
+
+      "follow" ->
+        response
 
       _ ->
         nil
index 35e14c243d984283e1c6eadd57f4e2c3810b5137..8fa28ee8ef6c79b149fab2681e260eec81e23fcc 100644 (file)
@@ -54,7 +54,7 @@ defmodule Pleroma.Web.Push do
       when type in @types do
     actor = User.get_cached_by_ap_id(notification.activity.data["actor"])
 
-    type = format_type(notification)
+    type = Pleroma.Activity.mastodon_notification_type(notification.activity)
 
     Subscription
     |> where(user_id: ^user_id)
@@ -114,16 +114,6 @@ defmodule Pleroma.Web.Push do
     {:noreply, state}
   end
 
-  # https://github.com/tootsuite/mastodon/blob/master/app/models/notification.rb#L19
-  defp format_type(%{activity: %{data: %{"type" => type}}}) do
-    case type do
-      "Create" -> "mention"
-      "Follow" -> "follow"
-      "Announce" -> "reblog"
-      "Like" -> "favourite"
-    end
-  end
-
   defp format_title(%{activity: %{data: %{"type" => type}}}) do
     case type do
       "Create" -> "New Mention"