diff options
| author | Ekaterina Vaartis <vaartis@cock.li> | 2019-04-18 10:57:20 +0300 | 
|---|---|---|
| committer | Ekaterina Vaartis <vaartis@cock.li> | 2019-04-20 11:17:17 +0300 | 
| commit | 21b39c54a36c265fee89a9c2f2312ad925f82263 (patch) | |
| tree | a4e01bbd62a7edd09bb1feb5d5839281479a548d | |
| parent | c26724cc5580a13d9e7e7468860eff8e49e02ba2 (diff) | |
| download | pleroma-21b39c54a36c265fee89a9c2f2312ad925f82263.tar.gz pleroma-21b39c54a36c265fee89a9c2f2312ad925f82263.zip  | |
Allow using a custom manfest and getting multiple packs at once
A custom manifest can be provided as a command-line options --manifest/-m
| -rw-r--r-- | lib/mix/tasks/pleroma/emoji.ex | 143 | 
1 files changed, 83 insertions, 60 deletions
diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index ffe733617..902bddc65 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -9,15 +9,31 @@ defmodule Mix.Tasks.Pleroma.Emoji do    @moduledoc """    """ -  defp fetch_manifest do -    Tesla.get!("https://git.pleroma.social/vaartis/emoji-index/raw/master/index.json").body -    |> Poison.decode!() +  @default_manifest "https://git.pleroma.social/vaartis/emoji-index/raw/master/index.json" + +  defp fetch_manifest(from) do +    Tesla.get!(from).body |> Poison.decode!() +  end + +  defp parse_global_opts(args) do +    OptionParser.parse( +      args, +      strict: [ +        manifest: :string +      ], +      aliases: [ +        m: :manifest +      ] +    )    end -  def run(["ls-packs"]) do +  def run(["ls-packs" | args]) do      Application.ensure_all_started(:hackney) -    manifest = fetch_manifest() +    {options, [], []} = parse_global_opts(args) + +    manifest = +      fetch_manifest(if options[:manifest], do: options[:manifest], else: @default_manifest)      Enum.each(manifest, fn {name, info} ->        to_print = [ @@ -34,65 +50,72 @@ defmodule Mix.Tasks.Pleroma.Emoji do      end)    end -  def run(["get-pack", pack_name]) do +  def run(["get-packs" | args]) 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 +    {options, pack_names, []} = parse_global_opts(args) + +    manifest = +      fetch_manifest(if options[:manifest], do: options[:manifest], else: @default_manifest) + +    for pack_name <- pack_names do +      if Map.has_key?(manifest, pack_name) do +        pack = manifest[pack_name] +        src_url = pack["src"] + +        IO.puts( +          IO.ANSI.format([ +            "Downloading ", +            :bright, +            pack_name, +            :normal, +            " from ", +            :underline, +            src_url +          ])          ) -      {: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"])) +        binary_archive = Tesla.get!(src_url).body + +        IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name])) + +        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(IO.ANSI.format(["Writing emoji.txt for ", :bright, pack_name])) + +        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  end  | 
