X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Femoji.ex;h=b77b26f7f375e8d148825fc9749c993c682e1abe;hb=4265608097fea6611570409a14cec7b4daf01b51;hp=15455b77984144a751d8111be8aedf4ce7fae8df;hpb=52ed287e87ea18fdbf14695ccfafae00768299dc;p=akkoma diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index 15455b779..b77b26f7f 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -6,7 +6,7 @@ defmodule Pleroma.Emoji do @moduledoc """ The emojis are loaded from: - * the built-in Finmojis (if enabled in configuration), + * emoji packs in INSTANCE-DIR/emoji * the files: `config/emoji.txt` and `config/custom_emoji.txt` * glob paths, nested folder is used as tag name for grouping e.g. priv/static/emoji/custom/nested_folder @@ -22,7 +22,7 @@ defmodule Pleroma.Emoji do @ets __MODULE__.Ets @ets_options [:ordered_set, :protected, :named_table, {:read_concurrency, true}] - @groups Application.get_env(:pleroma, :emoji)[:groups] + @groups Pleroma.Config.get([:emoji, :groups]) @doc false def start_link do @@ -81,14 +81,11 @@ defmodule Pleroma.Emoji do end defp load do - static_path = Path.join(:code.priv_dir(:pleroma), "static") - emoji_dir_path = - Path.join([ - static_path, + Path.join( Pleroma.Config.get!([:instance, :static_dir]), "emoji" - ]) + ) case File.ls(emoji_dir_path) do {:error, :enoent} -> @@ -100,26 +97,45 @@ defmodule Pleroma.Emoji do # There was some other error Logger.error("Could not access the custom emoji directory #{emoji_dir_path}: #{e}") - {:ok, packs} -> + {:ok, results} -> + grouped = + Enum.group_by(results, fn file -> File.dir?(Path.join(emoji_dir_path, file)) end) + + packs = grouped[true] || [] + files = grouped[false] || [] + # Print the packs we've found Logger.info("Found emoji packs: #{Enum.join(packs, ", ")}") - # compat thing for old custom emoji handling - shortcode_globs = Application.get_env(:pleroma, :emoji)[:shortcode_globs] || [] + if not Enum.empty?(files) do + Logger.warn( + "Found files in the emoji folder. These will be ignored, please move them to a subdirectory\nFound files: #{ + Enum.join(files, ", ") + }" + ) + end emojis = - (Enum.flat_map( - packs, - fn pack -> load_pack(Path.join(emoji_dir_path, pack)) end - ) ++ - load_from_file("config/emoji.txt") ++ - load_from_file("config/custom_emoji.txt") ++ - load_from_globs(shortcode_globs)) - |> Enum.reject(fn value -> value == nil end) + Enum.flat_map( + packs, + fn pack -> load_pack(Path.join(emoji_dir_path, pack)) end + ) true = :ets.insert(@ets, emojis) end + # Compat thing for old custom emoji handling & default emoji, + # it should run even if there are no emoji packs + shortcode_globs = Pleroma.Config.get([:emoji, :shortcode_globs], []) + + emojis = + (load_from_file("config/emoji.txt") ++ + load_from_file("config/custom_emoji.txt") ++ + load_from_globs(shortcode_globs)) + |> Enum.reject(fn value -> value == nil end) + + true = :ets.insert(@ets, emojis) + :ok end @@ -135,17 +151,9 @@ defmodule Pleroma.Emoji do "No emoji.txt found for pack \"#{pack_name}\", assuming all .png files are emoji" ) - common_pack_path = - Path.join([ - "/", - Pleroma.Config.get!([:instance, :static_dir]), - "emoji", - pack_name - ]) - make_shortcode_to_file_map(pack_dir, [".png"]) |> Enum.map(fn {shortcode, rel_file} -> - filename = Path.join(common_pack_path, rel_file) + filename = Path.join("/emoji/#{pack_name}", rel_file) {shortcode, filename, [to_string(match_extra(@groups, filename))]} end)