forked from AkkomaGang/akkoma
Add CustomEmojiController
This commit is contained in:
parent
433f2c0f68
commit
1c6e1055c8
7 changed files with 68 additions and 46 deletions
|
@ -0,0 +1,11 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.CustomEmojiController do
|
||||||
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
|
def index(conn, _params) do
|
||||||
|
render(conn, "index.json", custom_emojis: Pleroma.Emoji.get_all())
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
alias Pleroma.Config
|
alias Pleroma.Config
|
||||||
alias Pleroma.Pagination
|
alias Pleroma.Pagination
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web
|
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.MastodonAPI.AccountView
|
alias Pleroma.Web.MastodonAPI.AccountView
|
||||||
|
@ -22,28 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
|
|
||||||
action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
|
action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
|
||||||
|
|
||||||
defp mastodonized_emoji do
|
|
||||||
Pleroma.Emoji.get_all()
|
|
||||||
|> Enum.map(fn {shortcode, %Pleroma.Emoji{file: relative_url, tags: tags}} ->
|
|
||||||
url = to_string(URI.merge(Web.base_url(), relative_url))
|
|
||||||
|
|
||||||
%{
|
|
||||||
"shortcode" => shortcode,
|
|
||||||
"static_url" => url,
|
|
||||||
"visible_in_picker" => true,
|
|
||||||
"url" => url,
|
|
||||||
"tags" => tags,
|
|
||||||
# Assuming that a comma is authorized in the category name
|
|
||||||
"category" => (tags -- ["Custom"]) |> Enum.join(",")
|
|
||||||
}
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
def custom_emojis(conn, _params) do
|
|
||||||
mastodon_emoji = mastodonized_emoji()
|
|
||||||
json(conn, mastodon_emoji)
|
|
||||||
end
|
|
||||||
|
|
||||||
def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
|
def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
|
||||||
with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)},
|
with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)},
|
||||||
{_, true} <- {:followed, follower.id != followed.id},
|
{_, true} <- {:followed, follower.id != followed.id},
|
||||||
|
@ -114,7 +91,10 @@ def index(%{assigns: %{user: user}} = conn, _params) do
|
||||||
token = get_session(conn, :oauth_token)
|
token = get_session(conn, :oauth_token)
|
||||||
|
|
||||||
if user && token do
|
if user && token do
|
||||||
mastodon_emoji = mastodonized_emoji()
|
mastodon_emoji =
|
||||||
|
Pleroma.Web.MastodonAPI.CustomEmojiView.render("index.json", %{
|
||||||
|
custom_emojis: Pleroma.Emoji.get_all()
|
||||||
|
})
|
||||||
|
|
||||||
limit = Config.get([:instance, :limit])
|
limit = Config.get([:instance, :limit])
|
||||||
|
|
||||||
|
|
28
lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex
Normal file
28
lib/pleroma/web/mastodon_api/views/custom_emoji_view.ex
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.CustomEmojiView do
|
||||||
|
use Pleroma.Web, :view
|
||||||
|
|
||||||
|
alias Pleroma.Emoji
|
||||||
|
alias Pleroma.Web
|
||||||
|
|
||||||
|
def render("index.json", %{custom_emojis: custom_emojis}) do
|
||||||
|
render_many(custom_emojis, __MODULE__, "show.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("show.json", %{custom_emoji: {shortcode, %Emoji{file: relative_url, tags: tags}}}) do
|
||||||
|
url = Web.base_url() |> URI.merge(relative_url) |> to_string()
|
||||||
|
|
||||||
|
%{
|
||||||
|
"shortcode" => shortcode,
|
||||||
|
"static_url" => url,
|
||||||
|
"visible_in_picker" => true,
|
||||||
|
"url" => url,
|
||||||
|
"tags" => tags,
|
||||||
|
# Assuming that a comma is authorized in the category name
|
||||||
|
"category" => tags |> List.delete("Custom") |> Enum.join(",")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
|
@ -461,6 +461,7 @@ defmodule Pleroma.Web.Router do
|
||||||
pipe_through(:api)
|
pipe_through(:api)
|
||||||
|
|
||||||
post("/accounts", AccountController, :create)
|
post("/accounts", AccountController, :create)
|
||||||
|
get("/accounts/search", SearchController, :account_search)
|
||||||
|
|
||||||
get("/instance", InstanceController, :show)
|
get("/instance", InstanceController, :show)
|
||||||
get("/instance/peers", InstanceController, :peers)
|
get("/instance/peers", InstanceController, :peers)
|
||||||
|
@ -468,15 +469,13 @@ defmodule Pleroma.Web.Router do
|
||||||
post("/apps", AppController, :create)
|
post("/apps", AppController, :create)
|
||||||
get("/apps/verify_credentials", AppController, :verify_credentials)
|
get("/apps/verify_credentials", AppController, :verify_credentials)
|
||||||
|
|
||||||
get("/custom_emojis", MastodonAPIController, :custom_emojis)
|
|
||||||
|
|
||||||
get("/statuses/:id/card", StatusController, :card)
|
get("/statuses/:id/card", StatusController, :card)
|
||||||
get("/statuses/:id/favourited_by", StatusController, :favourited_by)
|
get("/statuses/:id/favourited_by", StatusController, :favourited_by)
|
||||||
get("/statuses/:id/reblogged_by", StatusController, :reblogged_by)
|
get("/statuses/:id/reblogged_by", StatusController, :reblogged_by)
|
||||||
|
|
||||||
get("/trends", MastodonAPIController, :empty_array)
|
get("/custom_emojis", CustomEmojiController, :index)
|
||||||
|
|
||||||
get("/accounts/search", SearchController, :account_search)
|
get("/trends", MastodonAPIController, :empty_array)
|
||||||
|
|
||||||
scope [] do
|
scope [] do
|
||||||
pipe_through(:oauth_read_or_public)
|
pipe_through(:oauth_read_or_public)
|
||||||
|
|
|
@ -1084,7 +1084,6 @@ test "it inlines private announced objects" do
|
||||||
{:ok, announce_activity, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, announce_activity, _} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
{:ok, modified} = Transmogrifier.prepare_outgoing(announce_activity.data)
|
{:ok, modified} = Transmogrifier.prepare_outgoing(announce_activity.data)
|
||||||
object = modified["object"]
|
|
||||||
|
|
||||||
assert modified["object"]["content"] == "hey"
|
assert modified["object"]["content"] == "hey"
|
||||||
assert modified["object"]["actor"] == modified["object"]["attributedTo"]
|
assert modified["object"]["actor"] == modified["object"]["attributedTo"]
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do
|
||||||
|
use Pleroma.Web.ConnCase, async: true
|
||||||
|
|
||||||
|
test "with tags", %{conn: conn} do
|
||||||
|
[emoji | _body] =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/custom_emojis")
|
||||||
|
|> json_response(200)
|
||||||
|
|
||||||
|
assert Map.has_key?(emoji, "shortcode")
|
||||||
|
assert Map.has_key?(emoji, "static_url")
|
||||||
|
assert Map.has_key?(emoji, "tags")
|
||||||
|
assert is_list(emoji["tags"])
|
||||||
|
assert Map.has_key?(emoji, "category")
|
||||||
|
assert Map.has_key?(emoji, "url")
|
||||||
|
assert Map.has_key?(emoji, "visible_in_picker")
|
||||||
|
end
|
||||||
|
end
|
|
@ -159,23 +159,6 @@ test "preserves parameters in link headers", %{conn: conn} do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "custom emoji" do
|
|
||||||
test "with tags", %{conn: conn} do
|
|
||||||
[emoji | _body] =
|
|
||||||
conn
|
|
||||||
|> get("/api/v1/custom_emojis")
|
|
||||||
|> json_response(200)
|
|
||||||
|
|
||||||
assert Map.has_key?(emoji, "shortcode")
|
|
||||||
assert Map.has_key?(emoji, "static_url")
|
|
||||||
assert Map.has_key?(emoji, "tags")
|
|
||||||
assert is_list(emoji["tags"])
|
|
||||||
assert Map.has_key?(emoji, "category")
|
|
||||||
assert Map.has_key?(emoji, "url")
|
|
||||||
assert Map.has_key?(emoji, "visible_in_picker")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "index/2 redirections" do
|
describe "index/2 redirections" do
|
||||||
setup %{conn: conn} do
|
setup %{conn: conn} do
|
||||||
session_opts = [
|
session_opts = [
|
||||||
|
|
Loading…
Reference in a new issue