diff options
| author | Roger Braun <roger@rogerbraun.net> | 2017-09-16 14:33:47 +0200 | 
|---|---|---|
| committer | Roger Braun <roger@rogerbraun.net> | 2017-09-16 14:33:47 +0200 | 
| commit | 5d1f8dcd1c3137976e382bf99058e202ed62477e (patch) | |
| tree | 9408e4faea3731c9902fb0c81794c561e780a243 /lib | |
| parent | 44693c100df496719f68f456e20ee377655d714b (diff) | |
| download | pleroma-5d1f8dcd1c3137976e382bf99058e202ed62477e.tar.gz pleroma-5d1f8dcd1c3137976e382bf99058e202ed62477e.zip | |
TwitterAPI: Add search.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 27 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 5 | 
3 files changed, 33 insertions, 0 deletions
| diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index e8460db16..04f4e213c 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -119,6 +119,7 @@ defmodule Pleroma.Web.Router do        post "/account/register", TwitterAPI.Controller, :register      end +    get "/search", TwitterAPI.Controller, :search      get "/externalprofile/show", TwitterAPI.Controller, :external_profile    end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 017130370..e849c9db0 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do    alias Pleroma.Web.TwitterAPI.UserView    alias Pleroma.Web.{OStatus, CommonAPI}    alias Pleroma.Formatter +  import Ecto.Query    @httpoison Application.get_env(:pleroma, :httpoison) @@ -192,6 +193,32 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do      end    end +  defp parse_int(string, default \\ nil) +  defp parse_int(string, default) when is_binary(string) do +    with {n, _} <- Integer.parse(string) do +      n +    else +      _e -> default +    end +  end +  defp parse_int(_, default), do: default + +  def search(user, %{"q" => query} = params) do +    limit = parse_int(params["rpp"], 20) +    page = parse_int(params["page"], 1) +    offset = (page - 1) * limit + +    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: ^limit, +      offset: ^offset, +      order_by: [desc: :id] + +    activities = Repo.all(q) +    activities_to_statuses(activities, %{for: user}) +  end +    defp activities_to_statuses(activities, opts) do      Enum.map(activities, fn(activity) ->        activity_to_status(activity, opts) diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 62a2b4f50..bca74850c 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -263,6 +263,11 @@ defmodule Pleroma.Web.TwitterAPI.Controller do      end    end +  def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do +    conn +    |> json(TwitterAPI.search(user, params)) +  end +    defp bad_request_reply(conn, error_message) do      json = error_json(conn, error_message)      json_reply(conn, 400, json) | 
