X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fmastodon_api%2Fmastodon_api_controller.ex;h=a01a199fb8a2f1d83c76f8c206ee618cf3127483;hb=b4f055b60416986220d905bbf688f8417cd8a270;hp=fa7f24f2dc0ebf5751ec6b48840bfb7c100870ff;hpb=ac2893a945a753ad05d46234ba80e14f3ce62c97;p=akkoma diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index fa7f24f2d..a01a199fb 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -77,7 +77,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end def home_timeline(%{assigns: %{user: user}} = conn, params) do - activities = ActivityPub.fetch_activities([user.ap_id | user.following], Map.put(params, "type", "Create")) + params = params + |> Map.put("type", ["Create", "Announce"]) + + activities = ActivityPub.fetch_activities([user.ap_id | user.following], params) |> Enum.reverse conn @@ -87,7 +90,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do def public_timeline(%{assigns: %{user: user}} = conn, params) do params = params - |> Map.put("type", "Create") + |> Map.put("type", ["Create", "Announce"]) |> Map.put("local_only", !!params["local"]) activities = ActivityPub.fetch_public_activities(params) @@ -102,7 +105,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do def user_statuses(%{assigns: %{user: user}} = conn, params) do with %User{ap_id: ap_id} <- Repo.get(User, params["id"]) do params = params - |> Map.put("type", "Create") + |> Map.put("type", ["Create", "Announce"]) |> Map.put("actor_id", ap_id) activities = ActivityPub.fetch_activities([], params) @@ -133,15 +136,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 +290,43 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end + def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do + if params["resolve"] == "true" do + User.get_or_fetch_by_nickname(query) + end + + 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 favourites(%{assigns: %{user: user}} = conn, params) do + params = conn + |> Map.put("type", "Create") + |> Map.put("favorited_by", user.ap_id) + + activities = ActivityPub.fetch_activities([], params) + |> Enum.reverse + + conn + |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) + 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