forked from AkkomaGang/akkoma
MastoAPI: Fetch statuses in search.
This commit is contained in:
parent
ccde03285d
commit
266d9c008d
2 changed files with 19 additions and 2 deletions
|
@ -6,7 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
alias Pleroma.Web.MastodonAPI.{StatusView, AccountView}
|
alias Pleroma.Web.MastodonAPI.{StatusView, AccountView}
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Pleroma.Web.TwitterAPI.TwitterAPI
|
alias Pleroma.Web.TwitterAPI.TwitterAPI
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.{CommonAPI, OStatus}
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
import Logger
|
import Logger
|
||||||
|
|
||||||
|
@ -361,11 +361,19 @@ def blocks(%{assigns: %{user: user}} = conn, _) do
|
||||||
def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
|
def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
|
||||||
accounts = User.search(query, params["resolve"] == "true")
|
accounts = User.search(query, params["resolve"] == "true")
|
||||||
|
|
||||||
|
fetched = if Regex.match?(~r/https?:/, query) do
|
||||||
|
with {:ok, activities} <- OStatus.fetch_activity_from_url(query) do
|
||||||
|
activities
|
||||||
|
else
|
||||||
|
_e -> []
|
||||||
|
end
|
||||||
|
end || []
|
||||||
|
|
||||||
q = from a in Activity,
|
q = from a in Activity,
|
||||||
where: fragment("?->>'type' = 'Create'", a.data),
|
where: fragment("?->>'type' = 'Create'", a.data),
|
||||||
where: fragment("to_tsvector('english', ?->'object'->>'content') @@ plainto_tsquery('english', ?)", a.data, ^query),
|
where: fragment("to_tsvector('english', ?->'object'->>'content') @@ plainto_tsquery('english', ?)", a.data, ^query),
|
||||||
limit: 20
|
limit: 20
|
||||||
statuses = Repo.all(q)
|
statuses = Repo.all(q) ++ fetched
|
||||||
|
|
||||||
res = %{
|
res = %{
|
||||||
"accounts" => AccountView.render("accounts.json", users: accounts, for: user, as: :user),
|
"accounts" => AccountView.render("accounts.json", users: accounts, for: user, as: :user),
|
||||||
|
|
|
@ -386,6 +386,15 @@ test "search", %{conn: conn} do
|
||||||
assert status["id"] == to_string(activity.id)
|
assert status["id"] == to_string(activity.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "search fetches remote statuses", %{conn: conn} do
|
||||||
|
conn = conn
|
||||||
|
|> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"})
|
||||||
|
assert results = json_response(conn, 200)
|
||||||
|
|
||||||
|
[status] = results["statuses"]
|
||||||
|
assert status["uri"] == "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
|
||||||
|
end
|
||||||
|
|
||||||
test "search fetches remote accounts", %{conn: conn} do
|
test "search fetches remote accounts", %{conn: conn} do
|
||||||
conn = conn
|
conn = conn
|
||||||
|> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"})
|
|> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"})
|
||||||
|
|
Loading…
Reference in a new issue