forked from AkkomaGang/akkoma
Merge branch 'feature/emoji-in-local-users' into 'develop'
Add emoji to local user profiles. Closes #202 See merge request pleroma/pleroma!271
This commit is contained in:
commit
63094cfd3e
5 changed files with 61 additions and 2 deletions
|
@ -42,7 +42,8 @@ def render("user.json", %{user: user}) do
|
||||||
"image" => %{
|
"image" => %{
|
||||||
"type" => "Image",
|
"type" => "Image",
|
||||||
"url" => User.banner_url(user)
|
"url" => User.banner_url(user)
|
||||||
}
|
},
|
||||||
|
"tag" => user.info["source_data"]["tag"] || []
|
||||||
}
|
}
|
||||||
|> Map.merge(Utils.make_json_ld_header())
|
|> Map.merge(Utils.make_json_ld_header())
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
@ -123,6 +123,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],
|
||||||
|
|
|
@ -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
|
||||||
|
@ -195,4 +196,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" => %{"type" => "Image", "url" => "#{Endpoint.url()}#{url}"},
|
||||||
|
"name" => ":#{shortcode}:"
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,26 @@ 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" => %{"type" => "Image", "url" => "#{Endpoint.url()}/finmoji/128px/perkele-128.png"},
|
||||||
|
"name" => ":perkele:"
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"type" => "Emoji",
|
||||||
|
"icon" => %{
|
||||||
|
"type" => "Image",
|
||||||
|
"url" => "#{Endpoint.url()}/finmoji/128px/karjalanpiirakka-128.png"
|
||||||
|
},
|
||||||
|
"name" => ":karjalanpiirakka:"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
assert expected == Utils.emoji_from_profile(user)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue