Allow sorting timelines by status publication date
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
4440a1974c
commit
82af8b1e92
2 changed files with 38 additions and 5 deletions
|
@ -1113,6 +1113,11 @@
|
||||||
description: "Only display posts from own domain on local timeline"
|
description: "Only display posts from own domain on local timeline"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :order_by_published_at,
|
||||||
|
type: :boolean,
|
||||||
|
description: "Order statuses in timelines basing on their declared publication date, instead of insertion date."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1421,17 +1421,43 @@ defp maybe_set_thread_muted_field(query, opts) do
|
||||||
|> Activity.with_set_thread_muted_field(opts[:muting_user] || opts[:user])
|
|> Activity.with_set_thread_muted_field(opts[:muting_user] || opts[:user])
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_order(query, %{order: :desc}) do
|
defp maybe_order(query, %{skip_preload: false, order: :asc}, %{order_by_published_at: true}) do
|
||||||
|
query
|
||||||
|
|> order_by(
|
||||||
|
[activity, object],
|
||||||
|
fragment(
|
||||||
|
"case when ?->>'type' = 'Create' then (?->>'published')::timestamptz else ? end asc",
|
||||||
|
activity.data,
|
||||||
|
object.data,
|
||||||
|
activity.inserted_at
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_order(query, %{skip_preload: false}, %{order_by_published_at: true}) do
|
||||||
|
query
|
||||||
|
|> order_by(
|
||||||
|
[activity, object],
|
||||||
|
fragment(
|
||||||
|
"case when ?->>'type' = 'Create' then (?->>'published')::timestamptz else ? end desc",
|
||||||
|
activity.data,
|
||||||
|
object.data,
|
||||||
|
activity.inserted_at
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_order(query, %{order: :desc}, _config) do
|
||||||
query
|
query
|
||||||
|> order_by(desc: :id)
|
|> order_by(desc: :id)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_order(query, %{order: :asc}) do
|
defp maybe_order(query, %{order: :asc}, _config) do
|
||||||
query
|
query
|
||||||
|> order_by(asc: :id)
|
|> order_by(asc: :id)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_order(query, _), do: query
|
defp maybe_order(query, _, _), do: query
|
||||||
|
|
||||||
defp normalize_fetch_activities_query_opts(opts) do
|
defp normalize_fetch_activities_query_opts(opts) do
|
||||||
Enum.reduce([:tag, :tag_all, :tag_reject], opts, fn key, opts ->
|
Enum.reduce([:tag, :tag_all, :tag_reject], opts, fn key, opts ->
|
||||||
|
@ -1451,6 +1477,7 @@ defp normalize_fetch_activities_query_opts(opts) do
|
||||||
opts
|
opts
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|> Map.put(:skip_preload, Map.get(opts, :skip_preload, false))
|
||||||
end
|
end
|
||||||
|
|
||||||
defp fetch_activities_query_ap_ids_ops(opts) do
|
defp fetch_activities_query_ap_ids_ops(opts) do
|
||||||
|
@ -1482,7 +1509,8 @@ def fetch_activities_query(recipients, opts \\ %{}) do
|
||||||
fetch_activities_query_ap_ids_ops(opts)
|
fetch_activities_query_ap_ids_ops(opts)
|
||||||
|
|
||||||
config = %{
|
config = %{
|
||||||
skip_thread_containment: Config.get([:instance, :skip_thread_containment])
|
skip_thread_containment: Config.get([:instance, :skip_thread_containment]),
|
||||||
|
order_by_published_at: Config.get([:instance, :order_by_published_at])
|
||||||
}
|
}
|
||||||
|
|
||||||
query =
|
query =
|
||||||
|
@ -1491,7 +1519,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
|
||||||
|> maybe_preload_bookmarks(opts)
|
|> maybe_preload_bookmarks(opts)
|
||||||
|> maybe_preload_report_notes(opts)
|
|> maybe_preload_report_notes(opts)
|
||||||
|> maybe_set_thread_muted_field(opts)
|
|> maybe_set_thread_muted_field(opts)
|
||||||
|> maybe_order(opts)
|
|> maybe_order(opts, config)
|
||||||
|> restrict_recipients(recipients, opts[:user])
|
|> restrict_recipients(recipients, opts[:user])
|
||||||
|> restrict_replies(opts)
|
|> restrict_replies(opts)
|
||||||
|> restrict_since(opts)
|
|> restrict_since(opts)
|
||||||
|
|
Loading…
Reference in a new issue