Fix auto-shortcode emoji
authorJorty <jorty@jort.space>
Sun, 1 Jul 2018 00:35:34 +0000 (20:35 -0400)
committerJorty <jorty@jort.space>
Sun, 1 Jul 2018 01:31:08 +0000 (21:31 -0400)
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
lib/pleroma/formatter.ex
lib/pleroma/web/twitter_api/controllers/util_controller.ex

index 96350d064c01c0b9ce189771c75db98ce3e59935..0616fe4fb19d48a5ad288749c42af5a0fb64e49e 100644 (file)
@@ -12,7 +12,7 @@ config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes
 
 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,
index df7ffbc4165bdc45bcce98401b04cf72e1aafb9e..0aaf215383c6168f32fe4b4e06a988a9e6f27f5a 100644 (file)
@@ -116,7 +116,28 @@ defmodule Pleroma.Formatter 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
index 73a46bb5ebb7da82bf77b7997e4b65b8634964ac..7a0c37ce97f1c8a9eeb04cded61518e7042aeaec 100644 (file)
@@ -173,32 +173,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController 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