diff --git a/lib/philomena_web/controllers/search_controller.ex b/lib/philomena_web/controllers/search_controller.ex index 694a726e..cb82c7d6 100644 --- a/lib/philomena_web/controllers/search_controller.ex +++ b/lib/philomena_web/controllers/search_controller.ex @@ -44,6 +44,6 @@ defmodule PhilomenaWeb.SearchController do defp search_function(true), do: &Search.search_records_with_hits/2 defp search_function(_custom), do: &Search.search_records/2 - defp custom_ordering?(%{params: %{"sf" => sf}}) when sf != "id", do: true + defp custom_ordering?(%{params: %{"sf" => sf}}) when sf not in ~W(id first_seen_at), do: true defp custom_ordering?(_conn), do: false end diff --git a/lib/philomena_web/image_navigator.ex b/lib/philomena_web/image_navigator.ex index 547fb617..01b782e0 100644 --- a/lib/philomena_web/image_navigator.ex +++ b/lib/philomena_web/image_navigator.ex @@ -9,7 +9,7 @@ defmodule PhilomenaWeb.ImageNavigator do } def find_consecutive(conn, image, compiled_query, compiled_filter) do - conn = update_in(conn.params, &Map.put_new(&1, "sf", "id")) + conn = update_in(conn.params, &Map.put_new(&1, "sf", "first_seen_at")) %{query: compiled_query, sorts: sorts} = ImageSorter.parse_sort(conn.params, compiled_query) @@ -22,7 +22,7 @@ defmodule PhilomenaWeb.ImageNavigator do conn.params["sort"] |> permit_list() |> Enum.flat_map(&permit_value/1) - |> default_value(image.id) + |> default_cursors(conn.params["sf"], image) maybe_search_after( Image, @@ -62,6 +62,13 @@ defmodule PhilomenaWeb.ImageNavigator do [] end + defp default_cursors([], "id", image), do: [image.id] + + defp default_cursors([], "first_seen_at", image), + do: [image.first_seen_at |> DateTime.to_unix(:millisecond), image.id] + + defp default_cursors(list, _sf, _image), do: list + defp apply_direction({"galleries.position", sort_body}, rel) do sort_body = update_in(sort_body.order, fn direction -> @order_for_dir[rel][direction] end) @@ -78,9 +85,6 @@ defmodule PhilomenaWeb.ImageNavigator do defp permit_value(value) when is_binary(value) or is_number(value), do: [value] defp permit_value(_value), do: [] - defp default_value([], term), do: [term] - defp default_value(list, _term), do: list - defp hidden_filter(%{id: id}, param) when param != "1", do: %{term: %{hidden_by_user_ids: id}} defp hidden_filter(_user, _param), do: %{match_none: %{}} end diff --git a/lib/philomena_web/image_sorter.ex b/lib/philomena_web/image_sorter.ex index ed422288..564d3781 100644 --- a/lib/philomena_web/image_sorter.ex +++ b/lib/philomena_web/image_sorter.ex @@ -80,7 +80,7 @@ defmodule PhilomenaWeb.ImageSorter do end defp parse_sf(_params, sd, query) do - %{query: query, sorts: [%{"first_seen_at" => sd}]} + %{query: query, sorts: [%{"first_seen_at" => sd}, %{"id" => sd}]} end defp random_query(seed, sd, query) do