X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Femoji.ex;h=9a23bd81b3548ff35bc942118ea1b0bd107c23f6;hb=aaaa428512db8ace56ca5ab7ebf1488d64ac5e35;hp=8ead7ea1ecaf3b2e7d186b692ddc83133c545467;hpb=c26724cc5580a13d9e7e7468860eff8e49e02ba2;p=akkoma diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index 8ead7ea1e..9a23bd81b 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -108,11 +108,9 @@ defmodule Pleroma.Emoji do shortcode_globs = Application.get_env(:pleroma, :emoji)[:shortcode_globs] || [] emojis = - # Add the things fro - # Deprecated? (Enum.flat_map( packs, - fn pack -> load_from_file(Path.join([emoji_dir_path, pack, "emoji.txt"])) end + fn pack -> load_pack(Path.join(emoji_dir_path, pack)) end ) ++ load_from_file("config/emoji.txt") ++ load_from_file("config/custom_emoji.txt") ++ @@ -125,6 +123,60 @@ defmodule Pleroma.Emoji do :ok end + defp load_pack(pack_dir) do + pack_name = Path.basename(pack_dir) + + emoji_txt = Path.join(pack_dir, "emoji.txt") + + if File.exists?(emoji_txt) do + load_from_file(emoji_txt) + else + Logger.info( + "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) + + # If no tag matches, use the pack name as a tag + {shortcode, filename, to_string(match_extra(@groups, filename))} + end) + end + end + + def make_shortcode_to_file_map(pack_dir, exts) do + find_all_emoji(pack_dir, exts) + |> Enum.map(&Path.relative_to(&1, pack_dir)) + |> Enum.map(fn f -> {f |> Path.basename() |> Path.rootname(), f} end) + |> Enum.into(%{}) + end + + def find_all_emoji(dir, exts) do + Enum.reduce( + File.ls!(dir), + [], + fn f, acc -> + filepath = Path.join(dir, f) + + if File.dir?(filepath) do + acc ++ find_all_emoji(filepath, exts) + else + acc ++ [filepath] + end + end + ) + |> Enum.filter(fn f -> Path.extname(f) in exts end) + end + defp load_from_file(file) do if File.exists?(file) do load_from_file_stream(File.stream!(file))