Use Image type for emoji icons.
[akkoma] / lib / pleroma / web / common_api / common_api.ex
index 8845419c2461081e7c2a04b2f34eef99ecdc604d..4be6e75085c6dc7d0b9b985a4de58ccdbba75895 100644 (file)
@@ -1,5 +1,5 @@
 defmodule Pleroma.Web.CommonAPI do
-  alias Pleroma.{Repo, Activity, Object}
+  alias Pleroma.{User, Repo, Activity, Object}
   alias Pleroma.Web.ActivityPub.ActivityPub
   alias Pleroma.Formatter
 
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.CommonAPI do
 
   def delete(activity_id, user) do
     with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id),
-         %Object{} = object <- Object.get_by_ap_id(object_id),
+         %Object{} = object <- Object.normalize(object_id),
          true <- user.info["is_moderator"] || user.ap_id == object.data["actor"],
          {:ok, delete} <- ActivityPub.delete(object) do
       {:ok, delete}
@@ -16,7 +16,7 @@ defmodule Pleroma.Web.CommonAPI do
 
   def repeat(id_or_ap_id, user) do
     with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
-         object <- Object.get_by_ap_id(activity.data["object"]["id"]) do
+         object <- Object.normalize(activity.data["object"]["id"]) do
       ActivityPub.announce(user, object)
     else
       _ ->
@@ -26,7 +26,7 @@ defmodule Pleroma.Web.CommonAPI do
 
   def unrepeat(id_or_ap_id, user) do
     with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
-         object <- Object.get_by_ap_id(activity.data["object"]["id"]) do
+         object <- Object.normalize(activity.data["object"]["id"]) do
       ActivityPub.unannounce(user, object)
     else
       _ ->
@@ -37,7 +37,7 @@ defmodule Pleroma.Web.CommonAPI do
   def favorite(id_or_ap_id, user) do
     with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
          false <- activity.data["actor"] == user.ap_id,
-         object <- Object.get_by_ap_id(activity.data["object"]["id"]) do
+         object <- Object.normalize(activity.data["object"]["id"]) do
       ActivityPub.like(user, object)
     else
       _ ->
@@ -48,7 +48,7 @@ defmodule Pleroma.Web.CommonAPI do
   def unfavorite(id_or_ap_id, user) do
     with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
          false <- activity.data["actor"] == user.ap_id,
-         object <- Object.get_by_ap_id(activity.data["object"]["id"]) do
+         object <- Object.normalize(activity.data["object"]["id"]) do
       ActivityPub.unlike(user, object)
     else
       _ ->
@@ -118,6 +118,18 @@ defmodule Pleroma.Web.CommonAPI do
   end
 
   def update(user) do
+    user =
+      with emoji <- emoji_from_profile(user),
+           source_data <- (user.info["source_data"] || %{}) |> Map.put("tag", emoji),
+           new_info <- Map.put(user.info, "source_data", source_data),
+           change <- User.info_changeset(user, %{info: new_info}),
+           {:ok, user} <- User.update_and_set_cache(change) do
+        user
+      else
+        _e ->
+          user
+      end
+
     ActivityPub.update(%{
       local: true,
       to: [user.follower_address],