forked from AkkomaGang/akkoma
StatusView: Return direct conversation id.
This commit is contained in:
parent
677df5ceb3
commit
7483679a7b
3 changed files with 42 additions and 2 deletions
|
@ -65,6 +65,14 @@ def for_user(user, params \\ %{}) do
|
||||||
|> Pleroma.Pagination.fetch_paginated(params)
|
|> Pleroma.Pagination.fetch_paginated(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def for_user_and_conversation(user, conversation) do
|
||||||
|
from(p in __MODULE__,
|
||||||
|
where: p.user_id == ^user.id,
|
||||||
|
where: p.conversation_id == ^conversation.id
|
||||||
|
)
|
||||||
|
|> Repo.one()
|
||||||
|
end
|
||||||
|
|
||||||
def for_user_with_last_activity_id(user, params \\ %{}) do
|
def for_user_with_last_activity_id(user, params \\ %{}) do
|
||||||
for_user(user, params)
|
for_user(user, params)
|
||||||
|> Enum.map(fn participation ->
|
|> Enum.map(fn participation ->
|
||||||
|
|
|
@ -6,6 +6,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
|
||||||
use Pleroma.Web, :view
|
use Pleroma.Web, :view
|
||||||
|
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
|
alias Pleroma.Conversation
|
||||||
|
alias Pleroma.Conversation.Participation
|
||||||
alias Pleroma.HTML
|
alias Pleroma.HTML
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
|
@ -225,6 +227,19 @@ def render("status.json", %{activity: %{data: %{"object" => _object}} = activity
|
||||||
object.data["url"] || object.data["external_url"] || object.data["id"]
|
object.data["url"] || object.data["external_url"] || object.data["id"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
direct_conversation_id =
|
||||||
|
with {_, true} <- {:include_id, opts[:with_direct_conversation_id]},
|
||||||
|
{_, %User{} = for_user} <- {:for_user, opts[:for]},
|
||||||
|
%{data: %{"context" => context}} when is_binary(context) <- activity,
|
||||||
|
%Conversation{} = conversation <- Conversation.get_for_ap_id(context),
|
||||||
|
%Participation{id: participation_id} <-
|
||||||
|
Participation.for_user_and_conversation(for_user, conversation) do
|
||||||
|
participation_id
|
||||||
|
else
|
||||||
|
_e ->
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
%{
|
%{
|
||||||
id: to_string(activity.id),
|
id: to_string(activity.id),
|
||||||
uri: object.data["id"],
|
uri: object.data["id"],
|
||||||
|
@ -262,7 +277,8 @@ def render("status.json", %{activity: %{data: %{"object" => _object}} = activity
|
||||||
conversation_id: get_context_id(activity),
|
conversation_id: get_context_id(activity),
|
||||||
in_reply_to_account_acct: reply_to_user && reply_to_user.nickname,
|
in_reply_to_account_acct: reply_to_user && reply_to_user.nickname,
|
||||||
content: %{"text/plain" => content_plaintext},
|
content: %{"text/plain" => content_plaintext},
|
||||||
spoiler_text: %{"text/plain" => summary_plaintext}
|
spoiler_text: %{"text/plain" => summary_plaintext},
|
||||||
|
direct_conversation_id: direct_conversation_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,6 +23,21 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "returns the direct conversation id when given the `with_conversation_id` option" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!", "visibility" => "direct"})
|
||||||
|
|
||||||
|
status =
|
||||||
|
StatusView.render("status.json",
|
||||||
|
activity: activity,
|
||||||
|
with_direct_conversation_id: true,
|
||||||
|
for: user
|
||||||
|
)
|
||||||
|
|
||||||
|
assert status[:pleroma][:direct_conversation_id]
|
||||||
|
end
|
||||||
|
|
||||||
test "returns a temporary ap_id based user for activities missing db users" do
|
test "returns a temporary ap_id based user for activities missing db users" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
|
@ -133,7 +148,8 @@ test "a note activity" do
|
||||||
conversation_id: convo_id,
|
conversation_id: convo_id,
|
||||||
in_reply_to_account_acct: nil,
|
in_reply_to_account_acct: nil,
|
||||||
content: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["content"])},
|
content: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["content"])},
|
||||||
spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["summary"])}
|
spoiler_text: %{"text/plain" => HtmlSanitizeEx.strip_tags(object_data["summary"])},
|
||||||
|
direct_conversation_id: nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue