- defp load do
- emojis =
- (load_finmoji(Keyword.get(Application.get_env(:pleroma, :instance), :finmoji_enabled)) ++
- load_from_file("config/emoji.txt") ++
- load_from_file("config/custom_emoji.txt") ++
- load_from_globs(
- Keyword.get(Application.get_env(:pleroma, :emoji, []), :shortcode_globs, [])
- ))
- |> Enum.reject(fn value -> value == nil end)
-
- true = :ets.insert(@ets, emojis)
- :ok
- end
-
- @finmoji [
- "a_trusted_friend",
- "alandislands",
- "association",
- "auroraborealis",
- "baby_in_a_box",
- "bear",
- "black_gold",
- "christmasparty",
- "crosscountryskiing",
- "cupofcoffee",
- "education",
- "fashionista_finns",
- "finnishlove",
- "flag",
- "forest",
- "four_seasons_of_bbq",
- "girlpower",
- "handshake",
- "happiness",
- "headbanger",
- "icebreaker",
- "iceman",
- "joulutorttu",
- "kaamos",
- "kalsarikannit_f",
- "kalsarikannit_m",
- "karjalanpiirakka",
- "kicksled",
- "kokko",
- "lavatanssit",
- "losthopes_f",
- "losthopes_m",
- "mattinykanen",
- "meanwhileinfinland",
- "moominmamma",
- "nordicfamily",
- "out_of_office",
- "peacemaker",
- "perkele",
- "pesapallo",
- "polarbear",
- "pusa_hispida_saimensis",
- "reindeer",
- "sami",
- "sauna_f",
- "sauna_m",
- "sauna_whisk",
- "sisu",
- "stuck",
- "suomimainittu",
- "superfood",
- "swan",
- "the_cap",
- "the_conductor",
- "the_king",
- "the_voice",
- "theoriginalsanta",
- "tomoffinland",
- "torillatavataan",
- "unbreakable",
- "waiting",
- "white_nights",
- "woollysocks"
- ]
- defp load_finmoji(true) do
- tag = Application.get_env(:pleroma, :emoji)[:finmoji_tag]
-
- Enum.map(@finmoji, fn finmoji ->
- {finmoji, "/finmoji/128px/#{finmoji}-128.png", tag}
- end)
- end
-
- defp load_finmoji(_), do: []
-
- defp load_from_file(file) do
- if File.exists?(file) do
- load_from_file_stream(File.stream!(file))
- else
- []
- end
- end
-
- defp load_from_file_stream(stream) do
- default_tag =
- stream.path
- |> Path.basename(".txt")
- |> get_default_tag()
-
- stream
- |> Stream.map(&String.trim/1)
- |> Stream.map(fn line ->
- case String.split(line, ~r/,\s*/) do
- [name, file, tags] ->
- {name, file, tags}
-
- [name, file] ->
- {name, file, default_tag}
-
- _ ->
- nil
- end
- end)
- |> Enum.to_list()
- end
-
- @spec get_default_tag(String.t()) :: String.t()
- defp get_default_tag(file_name) when file_name in ["emoji", "custom_emoji"] do
- Keyword.get(
- Application.get_env(:pleroma, :emoji),
- String.to_existing_atom(file_name <> "_tag")
- )
- end
-
- defp get_default_tag(_), do: Application.get_env(:pleroma, :emoji)[:custom_tag]
-
- defp load_from_globs(globs) do
- static_path = Path.join(:code.priv_dir(:pleroma), "static")
-
- paths =
- Enum.map(globs, fn glob ->
- static_part =
- Path.dirname(glob)
- |> String.replace_trailing("**", "")
-
- Path.join(static_path, glob)
- |> Path.wildcard()
- |> Enum.map(fn path ->
- custom_folder =
- path
- |> Path.relative_to(Path.join(static_path, static_part))
- |> Path.dirname()
-
- [path, custom_folder]
- end)
- end)
- |> Enum.concat()
-
- Enum.map(paths, fn [path, custom_folder] ->
- tag =
- case custom_folder do
- "." -> Keyword.get(Application.get_env(:pleroma, :emoji), :custom_tag)
- tag -> tag
- end
-
- shortcode = Path.basename(path, Path.extname(path))
- external_path = Path.join("/", Path.relative_to(path, static_path))
- {shortcode, external_path, tag}
- end)