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
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)
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)
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
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