Remove finmoji and add a way to download emojis in packs
These packs are stored in a git repo on pleroma gitlab
|
@ -100,8 +100,8 @@ config :pleroma, :emoji,
|
||||||
shortcode_globs: ["/emoji/custom/**/*.png"],
|
shortcode_globs: ["/emoji/custom/**/*.png"],
|
||||||
groups: [
|
groups: [
|
||||||
# Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
|
# Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
|
||||||
Finmoji: "/finmoji/128px/*-128.png",
|
Finmoji: ["/finmoji/128px/*-128.png", "/instance/static/emoji/finmoji/128px/*-128.png"],
|
||||||
Custom: ["/emoji/*.png", "/emoji/custom/*.png"]
|
Custom: ["/emoji/*.png", "/emoji/custom/*.png", "/instance/static/emoji/**/*.png"]
|
||||||
]
|
]
|
||||||
|
|
||||||
config :pleroma, :uri_schemes,
|
config :pleroma, :uri_schemes,
|
||||||
|
|
98
lib/mix/tasks/pleroma/emoji.ex
Normal file
|
@ -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
|
|
@ -14,6 +14,8 @@ defmodule Pleroma.Emoji do
|
||||||
"""
|
"""
|
||||||
use GenServer
|
use GenServer
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
@type pattern :: Regex.t() | module() | String.t()
|
@type pattern :: Regex.t() | module() | String.t()
|
||||||
@type patterns :: pattern() | [pattern()]
|
@type patterns :: pattern() | [pattern()]
|
||||||
@type group_patterns :: keyword(patterns())
|
@type group_patterns :: keyword(patterns())
|
||||||
|
@ -79,96 +81,50 @@ defmodule Pleroma.Emoji do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp load do
|
defp load do
|
||||||
finmoji_enabled = Keyword.get(Application.get_env(:pleroma, :instance), :finmoji_enabled)
|
static_path = Path.join(:code.priv_dir(:pleroma), "static")
|
||||||
shortcode_globs = Application.get_env(:pleroma, :emoji)[:shortcode_globs] || []
|
|
||||||
|
|
||||||
emojis =
|
emoji_dir_path =
|
||||||
(load_finmoji(finmoji_enabled) ++
|
Path.join([
|
||||||
load_from_file("config/emoji.txt") ++
|
static_path,
|
||||||
load_from_file("config/custom_emoji.txt") ++
|
Pleroma.Config.get!([:instance, :static_dir]),
|
||||||
load_from_globs(shortcode_globs))
|
"emoji"
|
||||||
|> Enum.reject(fn value -> value == nil end)
|
])
|
||||||
|
|
||||||
|
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
|
:ok
|
||||||
end
|
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
|
defp load_from_file(file) do
|
||||||
if File.exists?(file) do
|
if File.exists?(file) do
|
||||||
load_from_file_stream(File.stream!(file))
|
load_from_file_stream(File.stream!(file))
|
||||||
|
|
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 225 KiB |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 127 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 11 KiB |