forked from AkkomaGang/akkoma
Merge branch 'fix/1557-gets-local-pack' into 'develop'
get-packs for local generated pack Closes #1557 See merge request pleroma/pleroma!2604
This commit is contained in:
commit
1d30608e20
4 changed files with 47 additions and 17 deletions
|
@ -15,7 +15,7 @@ def run(["ls-packs" | args]) do
|
||||||
{options, [], []} = parse_global_opts(args)
|
{options, [], []} = parse_global_opts(args)
|
||||||
|
|
||||||
url_or_path = options[:manifest] || default_manifest()
|
url_or_path = options[:manifest] || default_manifest()
|
||||||
manifest = fetch_manifest(url_or_path)
|
manifest = fetch_and_decode(url_or_path)
|
||||||
|
|
||||||
Enum.each(manifest, fn {name, info} ->
|
Enum.each(manifest, fn {name, info} ->
|
||||||
to_print = [
|
to_print = [
|
||||||
|
@ -42,12 +42,12 @@ def run(["get-packs" | args]) do
|
||||||
|
|
||||||
url_or_path = options[:manifest] || default_manifest()
|
url_or_path = options[:manifest] || default_manifest()
|
||||||
|
|
||||||
manifest = fetch_manifest(url_or_path)
|
manifest = fetch_and_decode(url_or_path)
|
||||||
|
|
||||||
for pack_name <- pack_names do
|
for pack_name <- pack_names do
|
||||||
if Map.has_key?(manifest, pack_name) do
|
if Map.has_key?(manifest, pack_name) do
|
||||||
pack = manifest[pack_name]
|
pack = manifest[pack_name]
|
||||||
src_url = pack["src"]
|
src = pack["src"]
|
||||||
|
|
||||||
IO.puts(
|
IO.puts(
|
||||||
IO.ANSI.format([
|
IO.ANSI.format([
|
||||||
|
@ -57,11 +57,11 @@ def run(["get-packs" | args]) do
|
||||||
:normal,
|
:normal,
|
||||||
" from ",
|
" from ",
|
||||||
:underline,
|
:underline,
|
||||||
src_url
|
src
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|
||||||
binary_archive = Tesla.get!(client(), src_url).body
|
{:ok, binary_archive} = fetch(src)
|
||||||
archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16()
|
archive_sha = :crypto.hash(:sha256, binary_archive) |> Base.encode16()
|
||||||
|
|
||||||
sha_status_text = ["SHA256 of ", :bright, pack_name, :normal, " source file is ", :bright]
|
sha_status_text = ["SHA256 of ", :bright, pack_name, :normal, " source file is ", :bright]
|
||||||
|
@ -74,8 +74,8 @@ def run(["get-packs" | args]) do
|
||||||
raise "Bad SHA256 for #{pack_name}"
|
raise "Bad SHA256 for #{pack_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# The url specified in files should be in the same directory
|
# The location specified in files should be in the same directory
|
||||||
files_url =
|
files_loc =
|
||||||
url_or_path
|
url_or_path
|
||||||
|> Path.dirname()
|
|> Path.dirname()
|
||||||
|> Path.join(pack["files"])
|
|> Path.join(pack["files"])
|
||||||
|
@ -88,11 +88,11 @@ def run(["get-packs" | args]) do
|
||||||
:normal,
|
:normal,
|
||||||
" from ",
|
" from ",
|
||||||
:underline,
|
:underline,
|
||||||
files_url
|
files_loc
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|
||||||
files = Tesla.get!(client(), files_url).body |> Jason.decode!()
|
files = fetch_and_decode(files_loc)
|
||||||
|
|
||||||
IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name]))
|
IO.puts(IO.ANSI.format(["Unpacking ", :bright, pack_name]))
|
||||||
|
|
||||||
|
@ -237,16 +237,20 @@ def run(["gen-pack" | args]) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp fetch_manifest(from) do
|
defp fetch_and_decode(from) do
|
||||||
Jason.decode!(
|
with {:ok, json} <- fetch(from) do
|
||||||
if String.starts_with?(from, "http") do
|
Jason.decode!(json)
|
||||||
Tesla.get!(client(), from).body
|
|
||||||
else
|
|
||||||
File.read!(from)
|
|
||||||
end
|
end
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp fetch("http" <> _ = from) do
|
||||||
|
with {:ok, %{body: body}} <- Tesla.get(client(), from) do
|
||||||
|
{:ok, body}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp fetch(path), do: File.read(path)
|
||||||
|
|
||||||
defp parse_global_opts(args) do
|
defp parse_global_opts(args) do
|
||||||
OptionParser.parse(
|
OptionParser.parse(
|
||||||
args,
|
args,
|
||||||
|
|
3
test/instance_static/local_pack/files.json
Normal file
3
test/instance_static/local_pack/files.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"blank": "blank.png"
|
||||||
|
}
|
10
test/instance_static/local_pack/manifest.json
Normal file
10
test/instance_static/local_pack/manifest.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"local": {
|
||||||
|
"src_sha256": "384025A1AC6314473863A11AC7AB38A12C01B851A3F82359B89B4D4211D3291D",
|
||||||
|
"src": "test/fixtures/emoji/packs/blank.png.zip",
|
||||||
|
"license": "Apache 2.0",
|
||||||
|
"homepage": "https://example.com",
|
||||||
|
"files": "files.json",
|
||||||
|
"description": "Some local pack"
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,6 +73,19 @@ test "download pack from default manifest" do
|
||||||
on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end)
|
on_exit(fn -> File.rm_rf!("test/instance_static/emoji/finmoji") end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "install local emoji pack" do
|
||||||
|
assert capture_io(fn ->
|
||||||
|
Emoji.run([
|
||||||
|
"get-packs",
|
||||||
|
"local",
|
||||||
|
"--manifest",
|
||||||
|
"test/instance_static/local_pack/manifest.json"
|
||||||
|
])
|
||||||
|
end) =~ "Writing pack.json for"
|
||||||
|
|
||||||
|
on_exit(fn -> File.rm_rf!("test/instance_static/emoji/local") end)
|
||||||
|
end
|
||||||
|
|
||||||
test "pack not found" do
|
test "pack not found" do
|
||||||
mock(fn
|
mock(fn
|
||||||
%{
|
%{
|
||||||
|
|
Loading…
Reference in a new issue