forked from AkkomaGang/akkoma
emoji packs pagination
This commit is contained in:
parent
d772361e62
commit
3becdafd33
4 changed files with 53 additions and 6 deletions
|
@ -16,7 +16,7 @@ defmodule Pleroma.Emoji.Pack do
|
||||||
|
|
||||||
alias Pleroma.Emoji
|
alias Pleroma.Emoji
|
||||||
|
|
||||||
@spec create(String.t()) :: :ok | {:error, File.posix()} | {:error, :empty_values}
|
@spec create(String.t()) :: {:ok, t()} | {:error, File.posix()} | {:error, :empty_values}
|
||||||
def create(name) do
|
def create(name) do
|
||||||
with :ok <- validate_not_empty([name]),
|
with :ok <- validate_not_empty([name]),
|
||||||
dir <- Path.join(emoji_path(), name),
|
dir <- Path.join(emoji_path(), name),
|
||||||
|
@ -120,8 +120,8 @@ def list_remote(url) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec list_local() :: {:ok, map()}
|
@spec list_local(keyword()) :: {:ok, map()}
|
||||||
def list_local do
|
def list_local(opts) do
|
||||||
with {:ok, results} <- list_packs_dir() do
|
with {:ok, results} <- list_packs_dir() do
|
||||||
packs =
|
packs =
|
||||||
results
|
results
|
||||||
|
@ -132,6 +132,17 @@ def list_local do
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|> Enum.reject(&is_nil/1)
|
|> Enum.reject(&is_nil/1)
|
||||||
|
|
||||||
|
packs =
|
||||||
|
case opts[:page] do
|
||||||
|
1 ->
|
||||||
|
Enum.take(packs, opts[:page_size])
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
packs
|
||||||
|
|> Enum.take(opts[:page] * opts[:page_size])
|
||||||
|
|> Enum.take(-opts[:page_size])
|
||||||
|
end
|
||||||
|> Map.new(fn pack -> {pack.name, validate_pack(pack)} end)
|
|> Map.new(fn pack -> {pack.name, validate_pack(pack)} end)
|
||||||
|
|
||||||
{:ok, packs}
|
{:ok, packs}
|
||||||
|
@ -146,7 +157,7 @@ def get_archive(name) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec download(String.t(), String.t(), String.t()) :: :ok | {:error, atom()}
|
@spec download(String.t(), String.t(), String.t()) :: {:ok, t()} | {:error, atom()}
|
||||||
def download(name, url, as) do
|
def download(name, url, as) do
|
||||||
uri = url |> String.trim() |> URI.parse()
|
uri = url |> String.trim() |> URI.parse()
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,20 @@ def index_operation do
|
||||||
tags: ["Emoji Packs"],
|
tags: ["Emoji Packs"],
|
||||||
summary: "Lists local custom emoji packs",
|
summary: "Lists local custom emoji packs",
|
||||||
operationId: "PleromaAPI.EmojiPackController.index",
|
operationId: "PleromaAPI.EmojiPackController.index",
|
||||||
|
parameters: [
|
||||||
|
Operation.parameter(
|
||||||
|
:page,
|
||||||
|
:query,
|
||||||
|
%Schema{type: :integer, default: 1},
|
||||||
|
"Page"
|
||||||
|
),
|
||||||
|
Operation.parameter(
|
||||||
|
:page_size,
|
||||||
|
:query,
|
||||||
|
%Schema{type: :integer, default: 50},
|
||||||
|
"Number of statuses to return"
|
||||||
|
)
|
||||||
|
],
|
||||||
responses: %{
|
responses: %{
|
||||||
200 => emoji_packs_response()
|
200 => emoji_packs_response()
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,13 +37,13 @@ def remote(conn, %{url: url}) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def index(conn, _params) do
|
def index(conn, params) do
|
||||||
emoji_path =
|
emoji_path =
|
||||||
[:instance, :static_dir]
|
[:instance, :static_dir]
|
||||||
|> Pleroma.Config.get!()
|
|> Pleroma.Config.get!()
|
||||||
|> Path.join("emoji")
|
|> Path.join("emoji")
|
||||||
|
|
||||||
with {:ok, packs} <- Pack.list_local() do
|
with {:ok, packs} <- Pack.list_local(page: params.page, page_size: params.page_size) do
|
||||||
json(conn, packs)
|
json(conn, packs)
|
||||||
else
|
else
|
||||||
{:error, :create_dir, e} ->
|
{:error, :create_dir, e} ->
|
||||||
|
|
|
@ -39,6 +39,28 @@ test "GET /api/pleroma/emoji/packs", %{conn: conn} do
|
||||||
non_shared = resp["test_pack_nonshared"]
|
non_shared = resp["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
|
||||||
|
|
||||||
|
resp =
|
||||||
|
conn
|
||||||
|
|> get("/api/pleroma/emoji/packs?page_size=1")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
[pack1] = Map.keys(resp)
|
||||||
|
|
||||||
|
resp =
|
||||||
|
conn
|
||||||
|
|> get("/api/pleroma/emoji/packs?page_size=1&page=2")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
[pack2] = Map.keys(resp)
|
||||||
|
|
||||||
|
resp =
|
||||||
|
conn
|
||||||
|
|> get("/api/pleroma/emoji/packs?page_size=1&page=3")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
[pack3] = Map.keys(resp)
|
||||||
|
assert [pack1, pack2, pack3] |> Enum.uniq() |> length() == 3
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /api/pleroma/emoji/packs/remote" do
|
describe "GET /api/pleroma/emoji/packs/remote" do
|
||||||
|
|
Loading…
Reference in a new issue