Merge branch 'pleroma-feature/compat/push-subscriptions' into 'develop'
[akkoma] / lib / pleroma / activity.ex
index c7502981e31be64eac7e478750537dc772280ea4..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)
@@ -72,8 +80,27 @@ defmodule Pleroma.Activity do
     )
   end
 
-  def get_create_activity_by_object_ap_id(ap_id) do
+  def get_create_activity_by_object_ap_id(ap_id) when is_binary(ap_id) do
     create_activity_by_object_id_query([ap_id])
     |> Repo.one()
   end
+
+  def get_create_activity_by_object_ap_id(_), do: nil
+
+  def normalize(obj) when is_map(obj), do: Activity.get_by_ap_id(obj["id"])
+  def normalize(ap_id) when is_binary(ap_id), do: Activity.get_by_ap_id(ap_id)
+  def normalize(_), do: nil
+
+  def get_in_reply_to_activity(%Activity{data: %{"object" => %{"inReplyTo" => ap_id}}}) do
+    get_create_activity_by_object_ap_id(ap_id)
+  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