aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEkaterina Vaartis <vaartis@cock.li>2019-04-17 23:54:09 +0300
committerEkaterina Vaartis <vaartis@cock.li>2019-04-20 11:17:17 +0300
commitc26724cc5580a13d9e7e7468860eff8e49e02ba2 (patch)
tree2cff62eec405e0e30ed0501f8951c4b1bd06b17a /lib
parent6ca82c18a738205483dbbef2fd4de662d70227fb (diff)
downloadpleroma-c26724cc5580a13d9e7e7468860eff8e49e02ba2.tar.gz
Remove finmoji and add a way to download emojis in packs
These packs are stored in a git repo on pleroma gitlab
Diffstat (limited to 'lib')
-rw-r--r--lib/mix/tasks/pleroma/emoji.ex98
-rw-r--r--lib/pleroma/emoji.ex126
2 files changed, 139 insertions, 85 deletions
diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex
new file mode 100644
index 000000000..ffe733617
--- /dev/null
+++ b/lib/mix/tasks/pleroma/emoji.ex
@@ -0,0 +1,98 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Mix.Tasks.Pleroma.Emoji do
+ use Mix.Task
+
+ @shortdoc "Manages Pleroma instance"
+ @moduledoc """
+ """
+
+ defp fetch_manifest do
+ Tesla.get!("https://git.pleroma.social/vaartis/emoji-index/raw/master/index.json").body
+ |> Poison.decode!()
+ end
+
+ def run(["ls-packs"]) do
+ Application.ensure_all_started(:hackney)
+
+ manifest = fetch_manifest()
+
+ Enum.each(manifest, fn {name, info} ->
+ to_print = [
+ {"Name", name},
+ {"Homepage", info["homepage"]},
+ {"Description", info["description"]},
+ {"License", info["license"]},
+ {"Source", info["src"]}
+ ]
+
+ for {param, value} <- to_print do
+ IO.puts(IO.ANSI.format([:bright, param, :normal, ": ", value]))
+ end
+ end)
+ end
+
+ def run(["get-pack", pack_name]) do
+ Application.ensure_all_started(:hackney)
+
+ manifest = fetch_manifest()
+
+ if Map.has_key?(manifest, pack_name) do
+ pack = manifest[pack_name]
+ src_url = pack["src"]
+
+ IO.puts(
+ IO.ANSI.format([
+ "Downloading pack ",
+ :bright,
+ pack_name,
+ :normal,
+ " from ",
+ :underline,
+ src_url
+ ])
+ )
+
+ binary_archive = Tesla.get!(src_url).body
+
+ IO.puts("Unpacking #{pack_name} pack")
+
+ static_path = Path.join(:code.priv_dir(:pleroma), "static")
+
+ pack_path =
+ Path.join([
+ static_path,
+ Pleroma.Config.get!([:instance, :static_dir]),
+ "emoji",
+ pack_name
+ ])
+
+ files_to_unzip =
+ Enum.map(
+ pack["files"],
+ fn {_, f} -> to_charlist(f) end
+ )
+
+ {:ok, _} =
+ :zip.unzip(binary_archive,
+ cwd: pack_path,
+ file_list: files_to_unzip
+ )
+
+ IO.puts("Wriring emoji.txt for the #{pack_name} pack")
+
+ emoji_txt_str =
+ Enum.map(
+ pack["files"],
+ fn {shortcode, path} -> "#{shortcode}, /instance/static/emoji/#{pack_name}/#{path}" end
+ )
+ |> Enum.join("\n")
+
+ File.write!(Path.join(pack_path, "emoji.txt"), emoji_txt_str)
+ else
+ IO.puts(IO.ANSI.format([:bright, :red, "No pack named \"#{pack_name}\" found"]))
+ end
+ end
+end
diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex
index 87c7f2cec..8ead7ea1e 100644
--- a/lib/pleroma/emoji.ex
+++ b/lib/pleroma/emoji.ex
@@ -14,6 +14,8 @@ defmodule Pleroma.Emoji do
"""
use GenServer
+ require Logger
+
@type pattern :: Regex.t() | module() | String.t()
@type patterns :: pattern() | [pattern()]
@type group_patterns :: keyword(patterns())
@@ -79,96 +81,50 @@ defmodule Pleroma.Emoji do
end
defp load do
- finmoji_enabled = Keyword.get(Application.get_env(:pleroma, :instance), :finmoji_enabled)
- shortcode_globs = Application.get_env(:pleroma, :emoji)[:shortcode_globs] || []
+ static_path = Path.join(:code.priv_dir(:pleroma), "static")
- emojis =
- (load_finmoji(finmoji_enabled) ++
- 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)
+ emoji_dir_path =
+ Path.join([
+ static_path,
+ Pleroma.Config.get!([:instance, :static_dir]),
+ "emoji"
+ ])
+
+ case File.ls(emoji_dir_path) do
+ {:error, :enoent} ->
+ # The custom emoji directory doesn't exist,
+ # don't do anything
+ nil
+
+ {:error, e} ->
+ # There was some other error
+ Logger.error("Could not access the custom emoji directory #{emoji_dir_path}: #{e}")
+
+ {:ok, packs} ->
+ # 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] || []
+
+ emojis =
+ # Add the things fro
+ # Deprecated?
+ (Enum.flat_map(
+ packs,
+ fn pack -> load_from_file(Path.join([emoji_dir_path, pack, "emoji.txt"])) 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)
+
+ true = :ets.insert(@ets, emojis)
+ 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
- Enum.map(@finmoji, fn finmoji ->
- file_name = "/finmoji/128px/#{finmoji}-128.png"
- group = match_extra(@groups, file_name)
- {finmoji, file_name, to_string(group)}
- end)
- end
-
- defp load_finmoji(_), do: []
-
defp load_from_file(file) do
if File.exists?(file) do
load_from_file_stream(File.stream!(file))