- def fetch_friend_statuses(user, opts \\ %{}) do
- ActivityPub.fetch_activities([user.ap_id | user.following], opts)
- |> activities_to_statuses(%{for: user})
- end
-
- def fetch_public_statuses(user, opts \\ %{}) do
- opts = Map.put(opts, "local_only", true)
- ActivityPub.fetch_public_activities(opts)
- |> activities_to_statuses(%{for: user})
- end
-
- def fetch_public_and_external_statuses(user, opts \\ %{}) do
- ActivityPub.fetch_public_activities(opts)
- |> activities_to_statuses(%{for: user})
- end
-
- def fetch_user_statuses(user, opts \\ %{}) do
- ActivityPub.fetch_activities([], opts)
- |> activities_to_statuses(%{for: user})
- end
-
- def fetch_mentions(user, opts \\ %{}) do
- ActivityPub.fetch_activities([user.ap_id], opts)
- |> activities_to_statuses(%{for: user})
- end
-
- def fetch_conversation(user, id) do
- with context when is_binary(context) <- conversation_id_to_context(id),
- activities <- ActivityPub.fetch_activities_for_context(context),
- statuses <- activities |> activities_to_statuses(%{for: user})
- do
- statuses
- else _e ->
- []
- end
- end
-
- def fetch_status(user, id) do
- with %Activity{} = activity <- Repo.get(Activity, id) do
- activity_to_status(activity, %{for: user})
+ def delete(%User{} = user, id) do
+ # TwitterAPI does not have an "unretweet" endpoint; instead this is done
+ # via the "destroy" endpoint. Therefore, we need to handle
+ # when the status to "delete" is actually an Announce (repeat) object.
+ with %Activity{data: %{"type" => type}} <- Repo.get(Activity, id) do
+ case type do
+ "Announce" -> unrepeat(user, id)
+ _ -> CommonAPI.delete(id, user)
+ end