forked from AkkomaGang/akkoma
adding overall count for packs and files
This commit is contained in:
parent
4975ed86bc
commit
3e3f9253e6
4 changed files with 56 additions and 20 deletions
|
@ -458,7 +458,17 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
||||||
* Params:
|
* Params:
|
||||||
* `page`: page number for packs (default 1)
|
* `page`: page number for packs (default 1)
|
||||||
* `page_size`: page size for packs (default 50)
|
* `page_size`: page size for packs (default 50)
|
||||||
* Response: JSON, "ok" and 200 status and the JSON hashmap of pack name to pack contents
|
* Response: `packs` key with JSON hashmap of pack name to pack contents and `count` key for count of packs.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"packs": {
|
||||||
|
"pack_name": {...}, // pack contents
|
||||||
|
...
|
||||||
|
},
|
||||||
|
"count": 0 // packs count
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## `GET /api/pleroma/emoji/packs/:name`
|
## `GET /api/pleroma/emoji/packs/:name`
|
||||||
|
|
||||||
|
@ -469,7 +479,15 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
||||||
* Params:
|
* Params:
|
||||||
* `page`: page number for files (default 1)
|
* `page`: page number for files (default 1)
|
||||||
* `page_size`: page size for files (default 50)
|
* `page_size`: page size for files (default 50)
|
||||||
* Response: JSON, pack json with `files` and `pack` keys with 200 status or 404 if the pack does not exist
|
* Response: JSON, pack json with `files`, `files_count` and `pack` keys with 200 status or 404 if the pack does not exist.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"files": {...},
|
||||||
|
"files_count": 0, // emoji count in pack
|
||||||
|
"pack": {...}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## `GET /api/pleroma/emoji/packs/:name/archive`
|
## `GET /api/pleroma/emoji/packs/:name/archive`
|
||||||
### Requests a local pack archive from the instance
|
### Requests a local pack archive from the instance
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
defmodule Pleroma.Emoji.Pack do
|
defmodule Pleroma.Emoji.Pack do
|
||||||
@derive {Jason.Encoder, only: [:files, :pack]}
|
@derive {Jason.Encoder, only: [:files, :pack, :files_count]}
|
||||||
defstruct files: %{},
|
defstruct files: %{},
|
||||||
|
files_count: 0,
|
||||||
pack_file: nil,
|
pack_file: nil,
|
||||||
path: nil,
|
path: nil,
|
||||||
pack: %{},
|
pack: %{},
|
||||||
|
@ -8,6 +9,7 @@ defmodule Pleroma.Emoji.Pack do
|
||||||
|
|
||||||
@type t() :: %__MODULE__{
|
@type t() :: %__MODULE__{
|
||||||
files: %{String.t() => Path.t()},
|
files: %{String.t() => Path.t()},
|
||||||
|
files_count: non_neg_integer(),
|
||||||
pack_file: Path.t(),
|
pack_file: Path.t(),
|
||||||
path: Path.t(),
|
path: Path.t(),
|
||||||
pack: map(),
|
pack: map(),
|
||||||
|
@ -137,10 +139,10 @@ def list_remote(url) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec list_local(keyword()) :: {:ok, map()}
|
@spec list_local(keyword()) :: {:ok, map(), non_neg_integer()}
|
||||||
def list_local(opts) do
|
def list_local(opts) do
|
||||||
with {:ok, results} <- list_packs_dir() do
|
with {:ok, results} <- list_packs_dir() do
|
||||||
packs =
|
all_packs =
|
||||||
results
|
results
|
||||||
|> Enum.map(fn name ->
|
|> Enum.map(fn name ->
|
||||||
case load_pack(name) do
|
case load_pack(name) do
|
||||||
|
@ -149,10 +151,13 @@ def list_local(opts) do
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|> Enum.reject(&is_nil/1)
|
|> Enum.reject(&is_nil/1)
|
||||||
|
|
||||||
|
packs =
|
||||||
|
all_packs
|
||||||
|> paginate(opts[:page], opts[:page_size])
|
|> paginate(opts[:page], opts[:page_size])
|
||||||
|> Map.new(fn pack -> {pack.name, validate_pack(pack)} end)
|
|> Map.new(fn pack -> {pack.name, validate_pack(pack)} end)
|
||||||
|
|
||||||
{:ok, packs}
|
{:ok, packs, length(all_packs)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -215,7 +220,12 @@ def load_pack(name) do
|
||||||
|> Map.put(:path, Path.dirname(pack_file))
|
|> Map.put(:path, Path.dirname(pack_file))
|
||||||
|> Map.put(:name, name)
|
|> Map.put(:name, name)
|
||||||
|
|
||||||
{:ok, pack}
|
files_count =
|
||||||
|
pack.files
|
||||||
|
|> Map.keys()
|
||||||
|
|> length()
|
||||||
|
|
||||||
|
{:ok, Map.put(pack, :files_count, files_count)}
|
||||||
else
|
else
|
||||||
{:error, :not_found}
|
{:error, :not_found}
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,8 +43,8 @@ def index(conn, params) do
|
||||||
|> Pleroma.Config.get!()
|
|> Pleroma.Config.get!()
|
||||||
|> Path.join("emoji")
|
|> Path.join("emoji")
|
||||||
|
|
||||||
with {:ok, packs} <- Pack.list_local(page: params.page, page_size: params.page_size) do
|
with {:ok, packs, count} <- Pack.list_local(page: params.page, page_size: params.page_size) do
|
||||||
json(conn, packs)
|
json(conn, %{packs: packs, count: count})
|
||||||
else
|
else
|
||||||
{:error, :create_dir, e} ->
|
{:error, :create_dir, e} ->
|
||||||
conn
|
conn
|
||||||
|
|
|
@ -30,13 +30,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do
|
||||||
test "GET /api/pleroma/emoji/packs", %{conn: conn} do
|
test "GET /api/pleroma/emoji/packs", %{conn: conn} do
|
||||||
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
shared = resp["test_pack"]
|
assert resp["count"] == 3
|
||||||
|
shared = resp["packs"]["test_pack"]
|
||||||
assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"}
|
assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"}
|
||||||
assert Map.has_key?(shared["pack"], "download-sha256")
|
assert Map.has_key?(shared["pack"], "download-sha256")
|
||||||
assert shared["pack"]["can-download"]
|
assert shared["pack"]["can-download"]
|
||||||
assert shared["pack"]["share-files"]
|
assert shared["pack"]["share-files"]
|
||||||
|
|
||||||
non_shared = resp["test_pack_nonshared"]
|
non_shared = resp["packs"]["test_pack_nonshared"]
|
||||||
assert non_shared["pack"]["share-files"] == false
|
assert non_shared["pack"]["share-files"] == false
|
||||||
assert non_shared["pack"]["can-download"] == false
|
assert non_shared["pack"]["can-download"] == false
|
||||||
|
|
||||||
|
@ -45,21 +46,24 @@ test "GET /api/pleroma/emoji/packs", %{conn: conn} do
|
||||||
|> get("/api/pleroma/emoji/packs?page_size=1")
|
|> get("/api/pleroma/emoji/packs?page_size=1")
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
[pack1] = Map.keys(resp)
|
assert resp["count"] == 3
|
||||||
|
[pack1] = Map.keys(resp["packs"])
|
||||||
|
|
||||||
resp =
|
resp =
|
||||||
conn
|
conn
|
||||||
|> get("/api/pleroma/emoji/packs?page_size=1&page=2")
|
|> get("/api/pleroma/emoji/packs?page_size=1&page=2")
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
[pack2] = Map.keys(resp)
|
assert resp["count"] == 3
|
||||||
|
[pack2] = Map.keys(resp["packs"])
|
||||||
|
|
||||||
resp =
|
resp =
|
||||||
conn
|
conn
|
||||||
|> get("/api/pleroma/emoji/packs?page_size=1&page=3")
|
|> get("/api/pleroma/emoji/packs?page_size=1&page=3")
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
[pack3] = Map.keys(resp)
|
assert resp["count"] == 3
|
||||||
|
[pack3] = Map.keys(resp["packs"])
|
||||||
assert [pack1, pack2, pack3] |> Enum.uniq() |> length() == 3
|
assert [pack1, pack2, pack3] |> Enum.uniq() |> length() == 3
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -683,7 +687,8 @@ test "creating and deleting a pack", %{admin_conn: admin_conn} do
|
||||||
|
|
||||||
assert Jason.decode!(File.read!("#{@emoji_path}/test_created/pack.json")) == %{
|
assert Jason.decode!(File.read!("#{@emoji_path}/test_created/pack.json")) == %{
|
||||||
"pack" => %{},
|
"pack" => %{},
|
||||||
"files" => %{}
|
"files" => %{},
|
||||||
|
"files_count" => 0
|
||||||
}
|
}
|
||||||
|
|
||||||
assert admin_conn
|
assert admin_conn
|
||||||
|
@ -741,14 +746,14 @@ test "filesystem import", %{admin_conn: admin_conn, conn: conn} do
|
||||||
|
|
||||||
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
refute Map.has_key?(resp, "test_pack_for_import")
|
refute Map.has_key?(resp["packs"], "test_pack_for_import")
|
||||||
|
|
||||||
assert admin_conn
|
assert admin_conn
|
||||||
|> get("/api/pleroma/emoji/packs/import")
|
|> get("/api/pleroma/emoji/packs/import")
|
||||||
|> json_response_and_validate_schema(200) == ["test_pack_for_import"]
|
|> json_response_and_validate_schema(200) == ["test_pack_for_import"]
|
||||||
|
|
||||||
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
||||||
assert resp["test_pack_for_import"]["files"] == %{"blank" => "blank.png"}
|
assert resp["packs"]["test_pack_for_import"]["files"] == %{"blank" => "blank.png"}
|
||||||
|
|
||||||
File.rm!("#{@emoji_path}/test_pack_for_import/pack.json")
|
File.rm!("#{@emoji_path}/test_pack_for_import/pack.json")
|
||||||
refute File.exists?("#{@emoji_path}/test_pack_for_import/pack.json")
|
refute File.exists?("#{@emoji_path}/test_pack_for_import/pack.json")
|
||||||
|
@ -768,7 +773,7 @@ test "filesystem import", %{admin_conn: admin_conn, conn: conn} do
|
||||||
|
|
||||||
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
assert resp["test_pack_for_import"]["files"] == %{
|
assert resp["packs"]["test_pack_for_import"]["files"] == %{
|
||||||
"blank" => "blank.png",
|
"blank" => "blank.png",
|
||||||
"blank2" => "blank.png",
|
"blank2" => "blank.png",
|
||||||
"foo" => "blank.png"
|
"foo" => "blank.png"
|
||||||
|
@ -779,6 +784,7 @@ test "filesystem import", %{admin_conn: admin_conn, conn: conn} do
|
||||||
test "shows pack.json", %{conn: conn} do
|
test "shows pack.json", %{conn: conn} do
|
||||||
assert %{
|
assert %{
|
||||||
"files" => files,
|
"files" => files,
|
||||||
|
"files_count" => 2,
|
||||||
"pack" => %{
|
"pack" => %{
|
||||||
"can-download" => true,
|
"can-download" => true,
|
||||||
"description" => "Test description",
|
"description" => "Test description",
|
||||||
|
@ -795,7 +801,8 @@ test "shows pack.json", %{conn: conn} do
|
||||||
assert files == %{"blank" => "blank.png", "blank2" => "blank2.png"}
|
assert files == %{"blank" => "blank.png", "blank2" => "blank2.png"}
|
||||||
|
|
||||||
assert %{
|
assert %{
|
||||||
"files" => files
|
"files" => files,
|
||||||
|
"files_count" => 2
|
||||||
} =
|
} =
|
||||||
conn
|
conn
|
||||||
|> get("/api/pleroma/emoji/packs/test_pack?page_size=1")
|
|> get("/api/pleroma/emoji/packs/test_pack?page_size=1")
|
||||||
|
@ -804,7 +811,8 @@ test "shows pack.json", %{conn: conn} do
|
||||||
assert files |> Map.keys() |> length() == 1
|
assert files |> Map.keys() |> length() == 1
|
||||||
|
|
||||||
assert %{
|
assert %{
|
||||||
"files" => files
|
"files" => files,
|
||||||
|
"files_count" => 2
|
||||||
} =
|
} =
|
||||||
conn
|
conn
|
||||||
|> get("/api/pleroma/emoji/packs/test_pack?page_size=1&page=2")
|
|> get("/api/pleroma/emoji/packs/test_pack?page_size=1&page=2")
|
||||||
|
|
Loading…
Reference in a new issue