From c974f6544f6315a49e51632c862f1e66b750ffff Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 18 Feb 2018 15:20:36 +0100 Subject: [PATCH] Show users their own posts in timeline. --- lib/pleroma/web/activity_pub/activity_pub.ex | 11 ++++++++--- lib/pleroma/web/common_api/utils.ex | 4 ++-- .../web/mastodon_api/mastodon_api_controller.ex | 1 + lib/pleroma/web/twitter_api/twitter_api.ex | 5 ++++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d171913f8..406207f62 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -151,11 +151,16 @@ defp restrict_tag(query, %{"tag" => tag}) do end defp restrict_tag(query, _), do: query - defp restrict_recipients(query, []), do: query - defp restrict_recipients(query, recipients) do + defp restrict_recipients(query, [], user), do: query + defp restrict_recipients(query, recipients, nil) do from activity in query, where: fragment("? && ?", ^recipients, activity.recipients) end + defp restrict_recipients(query, recipients, user) do + from activity in query, + where: fragment("? && ?", ^recipients, activity.recipients), + or_where: activity.actor == ^user.ap_id + end defp restrict_local(query, %{"local_only" => true}) do from activity in query, where: activity.local == true @@ -216,7 +221,7 @@ def fetch_activities(recipients, opts \\ %{}) do order_by: [fragment("? desc nulls last", activity.id)] base_query - |> restrict_recipients(recipients) + |> restrict_recipients(recipients, opts["user"]) |> restrict_tag(opts) |> restrict_since(opts) |> restrict_local(opts) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index ea95c134c..75c63e5f4 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -27,7 +27,7 @@ def attachments_from_ids(ids) do def to_for_user_and_mentions(user, mentions, inReplyTo, "public") do to = ["https://www.w3.org/ns/activitystreams#Public"] - mentioned_users = Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end) ++ [user.ap_id] + mentioned_users = Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end) cc = [user.follower_address | mentioned_users] if inReplyTo do {to, Enum.uniq([inReplyTo.data["actor"] | cc])} @@ -47,7 +47,7 @@ def to_for_user_and_mentions(user, mentions, inReplyTo, "private") do end def to_for_user_and_mentions(user, mentions, inReplyTo, "direct") do - mentioned_users = Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end) ++ [user.ap_id] + mentioned_users = Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end) if inReplyTo do {Enum.uniq([inReplyTo.data["actor"] | mentioned_users]), []} else diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index e16a2a092..f52ac58de 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -150,6 +150,7 @@ def home_timeline(%{assigns: %{user: user}} = conn, params) do params = params |> Map.put("type", ["Create", "Announce"]) |> Map.put("blocking_user", user) + |> Map.put("user", user) activities = ActivityPub.fetch_activities([user.ap_id | user.following], params) |> Enum.reverse diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index faecebde0..57795edba 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -13,7 +13,10 @@ def create_status(%User{} = user, %{"status" => _} = data) do end def fetch_friend_statuses(user, opts \\ %{}) do - opts = Map.put(opts, "blocking_user", user) + opts = opts + |> Map.put("blocking_user", user) + |> Map.put("user", user) + ActivityPub.fetch_activities([user.ap_id | user.following], opts) |> activities_to_statuses(%{for: user}) end