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 @@
|
|||
shortcode_globs: ["/emoji/custom/**/*.png"],
|
||||
groups: [
|
||||
# Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
|
||||
Finmoji: "/finmoji/128px/*-128.png",
|
||||
Custom: ["/emoji/*.png", "/emoji/custom/*.png"]
|
||||
Finmoji: ["/finmoji/128px/*-128.png", "/instance/static/emoji/finmoji/128px/*-128.png"],
|
||||
Custom: ["/emoji/*.png", "/emoji/custom/*.png", "/instance/static/emoji/**/*.png"]
|
||||
]
|
||||
|
||||
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
|
||||
|
||||
require Logger
|
||||
|
||||
@type pattern :: Regex.t() | module() | String.t()
|
||||
@type patterns :: pattern() | [pattern()]
|
||||
@type group_patterns :: keyword(patterns())
|
||||
|
@ -79,96 +81,50 @@ def code_change(_old_vsn, state, _extra) 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))
|
||||
|
|
Before (image error) Size: 71 KiB |
Before (image error) Size: 72 KiB |
Before (image error) Size: 77 KiB |
Before (image error) Size: 225 KiB |
Before (image error) Size: 87 KiB |
Before (image error) Size: 42 KiB |
Before (image error) Size: 57 KiB |
Before (image error) Size: 92 KiB |
Before (image error) Size: 40 KiB |
Before (image error) Size: 43 KiB |
Before (image error) Size: 60 KiB |
Before (image error) Size: 62 KiB |
Before (image error) Size: 74 KiB |
Before (image error) Size: 60 KiB |
Before (image error) Size: 44 KiB |
Before (image error) Size: 94 KiB |
Before (image error) Size: 46 KiB |
Before (image error) Size: 30 KiB |
Before (image error) Size: 39 KiB |
Before (image error) Size: 51 KiB |
Before (image error) Size: 58 KiB |
Before (image error) Size: 236 KiB |
Before (image error) Size: 37 KiB |
Before (image error) Size: 127 KiB |
Before (image error) Size: 76 KiB |
Before (image error) Size: 51 KiB |
Before (image error) Size: 58 KiB |
Before (image error) Size: 62 KiB |
Before (image error) Size: 118 KiB |
Before (image error) Size: 125 KiB |
Before (image error) Size: 50 KiB |
Before (image error) Size: 60 KiB |
Before (image error) Size: 104 KiB |
Before (image error) Size: 113 KiB |
Before (image error) Size: 165 KiB |
Before (image error) Size: 97 KiB |
Before (image error) Size: 69 KiB |
Before (image error) Size: 58 KiB |
Before (image error) Size: 51 KiB |
Before (image error) Size: 40 KiB |
Before (image error) Size: 69 KiB |
Before (image error) Size: 44 KiB |
Before (image error) Size: 43 KiB |
Before (image error) Size: 53 KiB |
Before (image error) Size: 36 KiB |
Before (image error) Size: 34 KiB |
Before (image error) Size: 96 KiB |
Before (image error) Size: 73 KiB |
Before (image error) Size: 44 KiB |
Before (image error) Size: 66 KiB |
Before (image error) Size: 126 KiB |
Before (image error) Size: 41 KiB |
Before (image error) Size: 35 KiB |
Before (image error) Size: 33 KiB |
Before (image error) Size: 89 KiB |
Before (image error) Size: 75 KiB |
Before (image error) Size: 58 KiB |
Before (image error) Size: 68 KiB |
Before (image error) Size: 134 KiB |
Before (image error) Size: 76 KiB |
Before (image error) Size: 17 KiB |
Before (image error) Size: 49 KiB |
Before (image error) Size: 128 KiB |
Before (image error) Size: 7.8 KiB |
Before (image error) Size: 6.2 KiB |
Before (image error) Size: 8.5 KiB |
Before (image error) Size: 11 KiB |
Before (image error) Size: 8.9 KiB |
Before (image error) Size: 4.2 KiB |
Before (image error) Size: 6.2 KiB |
Before (image error) Size: 8.3 KiB |
Before (image error) Size: 4.5 KiB |
Before (image error) Size: 4.2 KiB |
Before (image error) Size: 6.2 KiB |
Before (image error) Size: 7.5 KiB |
Before (image error) Size: 5.9 KiB |
Before (image error) Size: 4 KiB |
Before (image error) Size: 4 KiB |
Before (image error) Size: 9.3 KiB |
Before (image error) Size: 4.3 KiB |
Before (image error) Size: 2.7 KiB |
Before (image error) Size: 4.5 KiB |
Before (image error) Size: 4.9 KiB |
Before (image error) Size: 7.3 KiB |
Before (image error) Size: 12 KiB |
Before (image error) Size: 3.1 KiB |
Before (image error) Size: 8.6 KiB |
Before (image error) Size: 6.8 KiB |
Before (image error) Size: 5.2 KiB |
Before (image error) Size: 5.1 KiB |
Before (image error) Size: 7.1 KiB |
Before (image error) Size: 11 KiB |
Before (image error) Size: 12 KiB |
Before (image error) Size: 4.8 KiB |
Before (image error) Size: 6.2 KiB |
Before (image error) Size: 7.2 KiB |
Before (image error) Size: 11 KiB |