diff options
4 files changed, 53 insertions, 6 deletions
diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 14a5185be..5660c4c9d 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Emoji.Pack do    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      with :ok <- validate_not_empty([name]),           dir <- Path.join(emoji_path(), name), @@ -120,8 +120,8 @@ defmodule Pleroma.Emoji.Pack do      end    end -  @spec list_local() :: {:ok, map()} -  def list_local do +  @spec list_local(keyword()) :: {:ok, map()} +  def list_local(opts) do      with {:ok, results} <- list_packs_dir() do        packs =          results @@ -132,6 +132,17 @@ defmodule Pleroma.Emoji.Pack do            end          end)          |> 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)        {:ok, packs} @@ -146,7 +157,7 @@ defmodule Pleroma.Emoji.Pack do      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      uri = url |> String.trim() |> URI.parse() diff --git a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex index 567688ff5..0d842382b 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex @@ -33,6 +33,20 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do        tags: ["Emoji Packs"],        summary: "Lists local custom emoji packs",        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: %{          200 => emoji_packs_response()        } diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex index d1efdeb5d..5654b3fbe 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex @@ -37,13 +37,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do      end    end -  def index(conn, _params) do +  def index(conn, params) do      emoji_path =        [:instance, :static_dir]        |> Pleroma.Config.get!()        |> 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)      else        {:error, :create_dir, e} -> diff --git a/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs index ee3d281a0..aafca6359 100644 --- a/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -39,6 +39,28 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do      non_shared = resp["test_pack_nonshared"]      assert non_shared["pack"]["share-files"] == 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    describe "GET /api/pleroma/emoji/packs/remote" do  | 
