CommonAPI: add emoji to user source data on update

This commit is contained in:
eal 2018-08-12 22:24:10 +03:00
parent 8c0c930041
commit f9d13558c8
4 changed files with 56 additions and 1 deletions

View file

@ -1,5 +1,5 @@
defmodule Pleroma.Web.CommonAPI do defmodule Pleroma.Web.CommonAPI do
alias Pleroma.{Repo, Activity, Object} alias Pleroma.{User, Repo, Activity, Object}
alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Formatter alias Pleroma.Formatter
@ -118,6 +118,18 @@ def post(user, %{"status" => status} = data) do
end end
def update(user) do 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(%{ ActivityPub.update(%{
local: true, local: true,
to: [user.follower_address], to: [user.follower_address],

View file

@ -1,6 +1,7 @@
defmodule Pleroma.Web.CommonAPI.Utils do defmodule Pleroma.Web.CommonAPI.Utils do
alias Pleroma.{Repo, Object, Formatter, Activity} alias Pleroma.{Repo, Object, Formatter, Activity}
alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.Endpoint
alias Pleroma.User alias Pleroma.User
alias Calendar.Strftime alias Calendar.Strftime
alias Comeonin.Pbkdf2 alias Comeonin.Pbkdf2
@ -196,4 +197,15 @@ def confirm_current_password(user, password) do
_ -> {:error, "Invalid password."} _ -> {:error, "Invalid password."}
end end
end end
def emoji_from_profile(%{info: info} = user) do
(Formatter.get_emoji(user.bio) ++ Formatter.get_emoji(user.name))
|> Enum.map(fn {shortcode, url} ->
%{
"type" => "Emoji",
"icon" => %{"url" => "#{Endpoint.url()}#{url}"},
"name" => ":#{shortcode}:"
}
end)
end
end end

View file

@ -1,6 +1,7 @@
defmodule Pleroma.Web.CommonAPI.Test do defmodule Pleroma.Web.CommonAPI.Test do
use Pleroma.DataCase use Pleroma.DataCase
alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI
alias Pleroma.User
import Pleroma.Factory import Pleroma.Factory
@ -10,4 +11,14 @@ test "it de-duplicates tags" do
assert activity.data["object"]["tag"] == ["2hu"] assert activity.data["object"]["tag"] == ["2hu"]
end end
test "it adds emoji when updating profiles" do
user = insert(:user, %{name: ":karjalanpiirakka:"})
CommonAPI.update(user)
user = User.get_cached_by_ap_id(user.ap_id)
[karjalanpiirakka] = user.info["source_data"]["tag"]
assert karjalanpiirakka["name"] == ":karjalanpiirakka:"
end
end end

View file

@ -1,5 +1,6 @@
defmodule Pleroma.Web.CommonAPI.UtilsTest do defmodule Pleroma.Web.CommonAPI.UtilsTest do
alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.Endpoint
alias Pleroma.Builders.{UserBuilder} alias Pleroma.Builders.{UserBuilder}
use Pleroma.DataCase use Pleroma.DataCase
@ -29,4 +30,23 @@ test "correct password given" do
assert Utils.confirm_current_password(user, "test") == {:ok, user} assert Utils.confirm_current_password(user, "test") == {:ok, user}
end end
end end
test "parses emoji from name and bio" do
{:ok, user} = UserBuilder.insert(%{name: ":karjalanpiirakka:", bio: ":perkele:"})
expected = [
%{
"type" => "Emoji",
"icon" => %{"url" => "#{Endpoint.url()}/finmoji/128px/perkele-128.png"},
"name" => ":perkele:"
},
%{
"type" => "Emoji",
"icon" => %{"url" => "#{Endpoint.url()}/finmoji/128px/karjalanpiirakka-128.png"},
"name" => ":karjalanpiirakka:"
}
]
assert expected == Utils.emoji_from_profile(user)
end
end end