Set search config to 'english'.
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
index fa7f24f2dc0ebf5751ec6b48840bfb7c100870ff..fcc87d414543d7e42ca895ac2a6755965388da95 100644 (file)
@@ -133,15 +133,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   end
 
   def post_status(%{assigns: %{user: user}} = conn, %{"status" => status} = params) do
-    l = status |> String.trim |> String.length
-
     params = params
     |> Map.put("in_reply_to_status_id", params["in_reply_to_id"])
 
-    if l > 0 && l < 5000 do
-      {:ok, activity} = TwitterAPI.create_status(user, params)
-      render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
-    end
+    {:ok, activity} = CommonAPI.post(user, params)
+    render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
   end
 
   def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
@@ -291,6 +287,27 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
+  def search(%{assigns: %{user: user}} = conn, %{"q" => query}) do
+    q = from u in User,
+      where: fragment("(to_tsvector('english', ?) || to_tsvector('english', ?)) @@ plainto_tsquery('english', ?)", u.nickname, u.name, ^query),
+      limit: 20
+    accounts = Repo.all(q)
+
+    q = from a in Activity,
+      where: fragment("?->>'type' = 'Create'", a.data),
+      where: fragment("to_tsvector('english', ?->'object'->>'content') @@ plainto_tsquery('english', ?)", a.data, ^query),
+      limit: 20
+    statuses = Repo.all(q)
+
+    res = %{
+      "accounts" => AccountView.render("accounts.json", users: accounts, for: user, as: :user),
+      "statuses" => StatusView.render("index.json", activities: statuses, for: user, as: :activity),
+      "hashtags" => []
+    }
+
+    json(conn, res)
+  end
+
   def relationship_noop(%{assigns: %{user: user}} = conn, %{"id" => id}) do
     Logger.debug("Unimplemented, returning unmodified relationship")
     with %User{} = target <- Repo.get(User, id) do