From 0bfbf15b379a95e7fad50e8f611cf6c5e67cfa9c Mon Sep 17 00:00:00 2001 From: Jorty Date: Sat, 30 Jun 2018 15:08:31 -0400 Subject: [PATCH 1/3] Allow emojis to be added automatically --- .../controllers/util_controller.ex | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 7a0c37ce9..db6142dc8 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -173,7 +173,25 @@ def version(conn, _params) do end def emoji(conn, _params) do - json(conn, Enum.into(Formatter.get_custom_emoji(), %{})) + emoji_dir = Path.join(:code.priv_dir(:pleroma), "static/emoji") + + shortcode_emoji_glob = + Path.join( + emoji_dir, + Application.get_env(:pleroma, :emoji, []) |> + Keyword.get(:glob, "by-shortcode/**/*.png") + ) + shortcode_emoji = + Path.wildcard(shortcode_emoji_glob) |> + Enum.map(fn path -> + shortcode = Path.basename(path, ".png") + serve_path = Path.join("/emoji", Path.relative_to(path, emoji_dir)) + {shortcode, serve_path} + end) + + emoji = Enum.into(Formatter.get_custom_emoji(), shortcode_emoji) |> Enum.into(%{}) + + json(conn, emoji) end def follow_import(conn, %{"list" => %Plug.Upload{} = listfile}) do From c171f9790bc2d6a1b215792ade1b1cfc7e458ac4 Mon Sep 17 00:00:00 2001 From: Jorty Date: Sat, 30 Jun 2018 17:20:08 -0400 Subject: [PATCH 2/3] Move emoji glob setting to config.exs Also, a bit of formatting, and the glob includes an "/emoji/" prefix to make it more intuitive to users --- config/config.exs | 2 ++ .../controllers/util_controller.ex | 35 +++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/config/config.exs b/config/config.exs index cf6cbaa9d..96350d064 100644 --- a/config/config.exs +++ b/config/config.exs @@ -12,6 +12,8 @@ config :pleroma, Pleroma.Upload, uploads: "uploads" +config :pleroma, :emoji, shortcode_glob: "/emoji/by-shortcode/**/*.png" + # Configures the endpoint config :pleroma, Pleroma.Web.Endpoint, url: [host: "localhost"], diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index db6142dc8..73a46bb5e 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -173,23 +173,30 @@ def version(conn, _params) do end def emoji(conn, _params) do - emoji_dir = Path.join(:code.priv_dir(:pleroma), "static/emoji") + static_dir = Path.join(:code.priv_dir(:pleroma), "static") + + emoji_shortcode_glob = + Application.get_env(:pleroma, :emoji, []) + |> Keyword.get(:shortcode_glob) - shortcode_emoji_glob = - Path.join( - emoji_dir, - Application.get_env(:pleroma, :emoji, []) |> - Keyword.get(:glob, "by-shortcode/**/*.png") - ) shortcode_emoji = - Path.wildcard(shortcode_emoji_glob) |> - Enum.map(fn path -> - shortcode = Path.basename(path, ".png") - serve_path = Path.join("/emoji", Path.relative_to(path, emoji_dir)) - {shortcode, serve_path} - end) + case emoji_shortcode_glob do + nil -> + [] - emoji = Enum.into(Formatter.get_custom_emoji(), shortcode_emoji) |> Enum.into(%{}) + glob -> + Path.join(static_dir, glob) + |> Path.wildcard() + |> Enum.map(fn path -> + shortcode = Path.basename(path, ".png") + serve_path = Path.join("/", Path.relative_to(path, static_dir)) + {shortcode, serve_path} + end) + end + + emoji = + Enum.into(Formatter.get_custom_emoji(), shortcode_emoji) + |> Enum.into(%{}) json(conn, emoji) end From 748fff6544cc70476bb0892a661d4d8c7f6ee295 Mon Sep 17 00:00:00 2001 From: Jorty Date: Sat, 30 Jun 2018 20:35:34 -0400 Subject: [PATCH 3/3] Fix auto-shortcode emoji Emoji were broken due to `Pleroma.Formatter` not knowing about the auto-shortcode emoji. This moves that logic from `Pleroma.Web.TwitterAPI.UtilController` to `Pleroma.Formatter`. Additionally, it's now possible to specify multiple shortcode globs, and the default globs were changed to `["/emoji/custom/**/*.png"]`, since that's in the .gitignore and the files there would have to be shortcode emoji anyway. --- config/config.exs | 2 +- lib/pleroma/formatter.ex | 23 +++++++++++++++- .../controllers/util_controller.ex | 27 +------------------ 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/config/config.exs b/config/config.exs index 96350d064..0616fe4fb 100644 --- a/config/config.exs +++ b/config/config.exs @@ -12,7 +12,7 @@ config :pleroma, Pleroma.Upload, uploads: "uploads" -config :pleroma, :emoji, shortcode_glob: "/emoji/by-shortcode/**/*.png" +config :pleroma, :emoji, shortcode_globs: ["/emoji/custom/**/*.png"] # Configures the endpoint config :pleroma, Pleroma.Web.Endpoint, diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index df7ffbc41..0aaf21538 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -116,7 +116,28 @@ def parse_mentions(text) do _ -> [] end) - @emoji @finmoji_with_filenames ++ @emoji_from_file + @emoji_from_globs ( + static_path = Path.join(:code.priv_dir(:pleroma), "static") + + globs = + Application.get_env(:pleroma, :emoji, []) + |> Keyword.get(:shortcode_globs, []) + + paths = + Enum.map(globs, fn glob -> + Path.join(static_path, glob) + |> Path.wildcard() + end) + |> Enum.concat() + + Enum.map(paths, fn path -> + shortcode = Path.basename(path, Path.extname(path)) + external_path = Path.join("/", Path.relative_to(path, static_path)) + {shortcode, external_path} + end) + ) + + @emoji @finmoji_with_filenames ++ @emoji_from_globs ++ @emoji_from_file def emojify(text, emoji \\ @emoji) def emojify(text, nil), do: text diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 73a46bb5e..7a0c37ce9 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -173,32 +173,7 @@ def version(conn, _params) do end def emoji(conn, _params) do - static_dir = Path.join(:code.priv_dir(:pleroma), "static") - - emoji_shortcode_glob = - Application.get_env(:pleroma, :emoji, []) - |> Keyword.get(:shortcode_glob) - - shortcode_emoji = - case emoji_shortcode_glob do - nil -> - [] - - glob -> - Path.join(static_dir, glob) - |> Path.wildcard() - |> Enum.map(fn path -> - shortcode = Path.basename(path, ".png") - serve_path = Path.join("/", Path.relative_to(path, static_dir)) - {shortcode, serve_path} - end) - end - - emoji = - Enum.into(Formatter.get_custom_emoji(), shortcode_emoji) - |> Enum.into(%{}) - - json(conn, emoji) + json(conn, Enum.into(Formatter.get_custom_emoji(), %{})) end def follow_import(conn, %{"list" => %Plug.Upload{} = listfile}) do