Add tag timelines.
This commit is contained in:
parent
b0363e8055
commit
fc85c9f086
|
@ -111,6 +111,12 @@ defp restrict_since(query, %{"since_id" => since_id}) do
|
||||||
end
|
end
|
||||||
defp restrict_since(query, _), do: query
|
defp restrict_since(query, _), do: query
|
||||||
|
|
||||||
|
defp restrict_tag(query, %{"tag" => tag}) do
|
||||||
|
from activity in query,
|
||||||
|
where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data)
|
||||||
|
end
|
||||||
|
defp restrict_tag(query, _), do: query
|
||||||
|
|
||||||
defp restrict_recipients(query, recipients) do
|
defp restrict_recipients(query, recipients) do
|
||||||
Enum.reduce(recipients, query, fn (recipient, q) ->
|
Enum.reduce(recipients, query, fn (recipient, q) ->
|
||||||
map = %{ to: [recipient] }
|
map = %{ to: [recipient] }
|
||||||
|
@ -148,6 +154,7 @@ def fetch_activities(recipients, opts \\ %{}) do
|
||||||
|
|
||||||
base_query
|
base_query
|
||||||
|> restrict_recipients(recipients)
|
|> restrict_recipients(recipients)
|
||||||
|
|> restrict_tag(opts)
|
||||||
|> restrict_since(opts)
|
|> restrict_since(opts)
|
||||||
|> restrict_local(opts)
|
|> restrict_local(opts)
|
||||||
|> restrict_max(opts)
|
|> restrict_max(opts)
|
||||||
|
|
|
@ -230,6 +230,18 @@ def reblogged_by(conn, %{"id" => id}) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
params = params
|
||||||
|
|> Map.put("type", "Create")
|
||||||
|
|> Map.put("local_only", !!params["local"])
|
||||||
|
|
||||||
|
activities = ActivityPub.fetch_public_activities(params)
|
||||||
|
|> Enum.reverse
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
|
||||||
|
end
|
||||||
|
|
||||||
def empty_array(conn, _) do
|
def empty_array(conn, _) do
|
||||||
Logger.debug("Unimplemented, returning an empty array")
|
Logger.debug("Unimplemented, returning an empty array")
|
||||||
json(conn, [])
|
json(conn, [])
|
||||||
|
|
|
@ -65,6 +65,7 @@ def user_fetcher(username) do
|
||||||
post "/apps", MastodonAPIController, :create_app
|
post "/apps", MastodonAPIController, :create_app
|
||||||
|
|
||||||
get "/timelines/public", MastodonAPIController, :public_timeline
|
get "/timelines/public", MastodonAPIController, :public_timeline
|
||||||
|
get "/timelines/tag/:tag", MastodonAPIController, :hashtag_timeline
|
||||||
|
|
||||||
get "/statuses/:id", MastodonAPIController, :get_status
|
get "/statuses/:id", MastodonAPIController, :get_status
|
||||||
get "/statuses/:id/context", MastodonAPIController, :get_context
|
get "/statuses/:id/context", MastodonAPIController, :get_context
|
||||||
|
|
|
@ -186,7 +186,6 @@ test "gets a users statuses", %{conn: conn} do
|
||||||
test "returns the relationships for the current user", %{conn: conn} do
|
test "returns the relationships for the current user", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
||||||
{:ok, user} = User.follow(user, other_user)
|
{:ok, user} = User.follow(user, other_user)
|
||||||
|
|
||||||
conn = conn
|
conn = conn
|
||||||
|
@ -227,4 +226,18 @@ test "media upload", %{conn: conn} do
|
||||||
|
|
||||||
assert media["type"] == "image"
|
assert media["type"] == "image"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "hashtag timeline", %{conn: conn} do
|
||||||
|
following = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} = TwitterAPI.create_status(following, %{"status" => "test #2hu"})
|
||||||
|
{:ok, [_activity]} = OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873")
|
||||||
|
|
||||||
|
conn = conn
|
||||||
|
|> get("/api/v1/timelines/tag/2hu")
|
||||||
|
|
||||||
|
assert [%{"id" => id}] = json_response(conn, 200)
|
||||||
|
|
||||||
|
assert id == activity.id
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue