Browse Source

ChatMessageReference -> Chat.MessageReference

1570-levenshtein-distance-user-search
lain 4 years ago
parent
commit
ca0e6e702b
14 changed files with 66 additions and 68 deletions
  1. +1
    -1
      lib/pleroma/chat/message_reference.ex
  2. +4
    -4
      lib/pleroma/web/activity_pub/side_effects.ex
  3. +4
    -4
      lib/pleroma/web/mastodon_api/views/notification_view.ex
  4. +15
    -15
      lib/pleroma/web/pleroma_api/controllers/chat_controller.ex
  5. +1
    -1
      lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex
  6. +5
    -5
      lib/pleroma/web/pleroma_api/views/chat_view.ex
  7. +2
    -2
      lib/pleroma/web/streamer/streamer.ex
  8. +3
    -3
      test/chat/message_reference_test.exs
  9. +4
    -4
      test/web/activity_pub/side_effects_test.exs
  10. +4
    -5
      test/web/mastodon_api/views/notification_view_test.exs
  11. +9
    -9
      test/web/pleroma_api/controllers/chat_controller_test.exs
  12. +7
    -8
      test/web/pleroma_api/views/chat/message_reference_view_test.exs
  13. +4
    -4
      test/web/pleroma_api/views/chat_view_test.exs
  14. +3
    -3
      test/web/streamer/streamer_test.exs

lib/pleroma/chat_message_reference.ex → lib/pleroma/chat/message_reference.ex View File

@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.ChatMessageReference do
defmodule Pleroma.Chat.MessageReference do
@moduledoc """
A reference that builds a relation between an AP chat message that a user can see and whether it has been seen
by them, or should be displayed to them. Used to build the chat view that is presented to the user.

+ 4
- 4
lib/pleroma/web/activity_pub/side_effects.ex View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
"""
alias Pleroma.Activity
alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Repo
@@ -111,7 +111,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
Object.decrease_replies_count(in_reply_to)
end

ChatMessageReference.delete_for_object(deleted_object)
MessageReference.delete_for_object(deleted_object)

ActivityPub.stream_out(object)
ActivityPub.stream_out_participations(deleted_object, user)
@@ -146,13 +146,13 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
|> Enum.each(fn [user, other_user] ->
if user.local do
{:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id)
{:ok, cm_ref} = ChatMessageReference.create(chat, object, user.ap_id != actor.ap_id)
{:ok, cm_ref} = MessageReference.create(chat, object, user.ap_id != actor.ap_id)

# We add a cache of the unread value here so that it
# doesn't change when being streamed out
chat =
chat
|> Map.put(:unread, ChatMessageReference.unread_count_for_chat(chat))
|> Map.put(:unread, MessageReference.unread_count_for_chat(chat))

Streamer.stream(
["user", "user:pleroma_chat"],


+ 4
- 4
lib/pleroma/web/mastodon_api/views/notification_view.ex View File

@@ -6,7 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do
use Pleroma.Web, :view

alias Pleroma.Activity
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.User
@@ -15,7 +15,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.NotificationView
alias Pleroma.Web.MastodonAPI.StatusView
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView

@parent_types ~w{Like Announce EmojiReact}

@@ -139,9 +139,9 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do
object = Object.normalize(activity)
author = User.get_cached_by_ap_id(object.data["actor"])
chat = Pleroma.Chat.get(reading_user.id, author.ap_id)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)
render_opts = Map.merge(opts, %{for: reading_user, chat_message_reference: cm_ref})
chat_message_render = ChatMessageReferenceView.render("show.json", render_opts)
chat_message_render = MessageReferenceView.render("show.json", render_opts)

Map.put(response, :chat_message, chat_message_render)
end


+ 15
- 15
lib/pleroma/web/pleroma_api/controllers/chat_controller.ex View File

@@ -6,14 +6,14 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do

alias Pleroma.Activity
alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Object
alias Pleroma.Pagination
alias Pleroma.Plugs.OAuthScopesPlug
alias Pleroma.Repo
alias Pleroma.User
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
alias Pleroma.Web.PleromaAPI.ChatView

import Ecto.Query
@@ -46,13 +46,13 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
message_id: message_id,
id: chat_id
}) do
with %ChatMessageReference{} = cm_ref <-
ChatMessageReference.get_by_id(message_id),
with %MessageReference{} = cm_ref <-
MessageReference.get_by_id(message_id),
^chat_id <- cm_ref.chat_id |> to_string(),
%Chat{user_id: ^user_id} <- Chat.get_by_id(chat_id),
{:ok, _} <- remove_or_delete(cm_ref, user) do
conn
|> put_view(ChatMessageReferenceView)
|> put_view(MessageReferenceView)
|> render("show.json", chat_message_reference: cm_ref)
else
_e ->
@@ -71,7 +71,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do

defp remove_or_delete(cm_ref, _) do
cm_ref
|> ChatMessageReference.delete()
|> MessageReference.delete()
end

def post_chat_message(
@@ -87,9 +87,9 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
media_id: params[:media_id]
),
message <- Object.normalize(activity, false),
cm_ref <- ChatMessageReference.for_chat_and_object(chat, message) do
cm_ref <- MessageReference.for_chat_and_object(chat, message) do
conn
|> put_view(ChatMessageReferenceView)
|> put_view(MessageReferenceView)
|> render("show.json", for: user, chat_message_reference: cm_ref)
end
end
@@ -98,20 +98,20 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
id: chat_id,
message_id: message_id
}) do
with %ChatMessageReference{} = cm_ref <-
ChatMessageReference.get_by_id(message_id),
with %MessageReference{} = cm_ref <-
MessageReference.get_by_id(message_id),
^chat_id <- cm_ref.chat_id |> to_string(),
%Chat{user_id: ^user_id} <- Chat.get_by_id(chat_id),
{:ok, cm_ref} <- ChatMessageReference.mark_as_read(cm_ref) do
{:ok, cm_ref} <- MessageReference.mark_as_read(cm_ref) do
conn
|> put_view(ChatMessageReferenceView)
|> put_view(MessageReferenceView)
|> render("show.json", for: user, chat_message_reference: cm_ref)
end
end

def mark_as_read(%{assigns: %{user: %{id: user_id}}} = conn, %{id: id}) do
with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id),
{_n, _} <- ChatMessageReference.set_all_seen_for_chat(chat) do
{_n, _} <- MessageReference.set_all_seen_for_chat(chat) do
conn
|> put_view(ChatView)
|> render("show.json", chat: chat)
@@ -122,11 +122,11 @@ defmodule Pleroma.Web.PleromaAPI.ChatController do
with %Chat{} = chat <- Repo.get_by(Chat, id: id, user_id: user_id) do
cm_refs =
chat
|> ChatMessageReference.for_chat_query()
|> MessageReference.for_chat_query()
|> Pagination.fetch_paginated(params |> stringify_keys())

conn
|> put_view(ChatMessageReferenceView)
|> put_view(MessageReferenceView)
|> render("index.json", for: user, chat_message_references: cm_refs)
else
_ ->


lib/pleroma/web/pleroma_api/views/chat_message_reference_view.ex → lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex View File

@@ -2,7 +2,7 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceView do
defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do
use Pleroma.Web, :view

alias Pleroma.User

+ 5
- 5
lib/pleroma/web/pleroma_api/views/chat_view.ex View File

@@ -6,24 +6,24 @@ defmodule Pleroma.Web.PleromaAPI.ChatView do
use Pleroma.Web, :view

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.User
alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView

def render("show.json", %{chat: %Chat{} = chat} = opts) do
recipient = User.get_cached_by_ap_id(chat.recipient)

last_message = opts[:last_message] || ChatMessageReference.last_message_for_chat(chat)
last_message = opts[:last_message] || MessageReference.last_message_for_chat(chat)

%{
id: chat.id |> to_string(),
account: AccountView.render("show.json", Map.put(opts, :user, recipient)),
unread: Map.get(chat, :unread) || ChatMessageReference.unread_count_for_chat(chat),
unread: Map.get(chat, :unread) || MessageReference.unread_count_for_chat(chat),
last_message:
last_message &&
ChatMessageReferenceView.render("show.json", chat_message_reference: last_message),
MessageReferenceView.render("show.json", chat_message_reference: last_message),
updated_at: Utils.to_masto_date(chat.updated_at)
}
end


+ 2
- 2
lib/pleroma/web/streamer/streamer.ex View File

@@ -6,7 +6,7 @@ defmodule Pleroma.Web.Streamer do
require Logger

alias Pleroma.Activity
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Config
alias Pleroma.Conversation.Participation
alias Pleroma.Notification
@@ -187,7 +187,7 @@ defmodule Pleroma.Web.Streamer do
end)
end

defp do_stream(topic, {user, %ChatMessageReference{} = cm_ref})
defp do_stream(topic, {user, %MessageReference{} = cm_ref})
when topic in ["user", "user:pleroma_chat"] do
topic = "#{topic}:#{user.id}"



test/chat_message_reference_test.exs → test/chat/message_reference_test.exs View File

@@ -2,11 +2,11 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.ChatMessageReferenceTest do
defmodule Pleroma.Chat.MessageReferenceTest do
use Pleroma.DataCase, async: true

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Web.CommonAPI

import Pleroma.Factory
@@ -21,7 +21,7 @@ defmodule Pleroma.ChatMessageReferenceTest do

{:ok, chat} = Chat.get_or_create(user.id, recipient.ap_id)

message = ChatMessageReference.last_message_for_chat(chat)
message = MessageReference.last_message_for_chat(chat)

assert message.object.data["content"] == "ho"
end

+ 4
- 4
test/web/activity_pub/side_effects_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do

alias Pleroma.Activity
alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Repo
@@ -391,7 +391,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do
end
end

test "it creates a Chat and ChatMessageReferences for the local users and bumps the unread count, except for the author" do
test "it creates a Chat and MessageReferences for the local users and bumps the unread count, except for the author" do
author = insert(:user, local: true)
recipient = insert(:user, local: true)

@@ -431,14 +431,14 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do

chat = Chat.get(author.id, recipient.ap_id)

[cm_ref] = ChatMessageReference.for_chat_query(chat) |> Repo.all()
[cm_ref] = MessageReference.for_chat_query(chat) |> Repo.all()

assert cm_ref.object.data["content"] == "hey"
assert cm_ref.unread == false

chat = Chat.get(recipient.id, author.ap_id)

[cm_ref] = ChatMessageReference.for_chat_query(chat) |> Repo.all()
[cm_ref] = MessageReference.for_chat_query(chat) |> Repo.all()

assert cm_ref.object.data["content"] == "hey"
assert cm_ref.unread == true


+ 4
- 5
test/web/mastodon_api/views/notification_view_test.exs View File

@@ -7,7 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do

alias Pleroma.Activity
alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Repo
@@ -17,7 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.NotificationView
alias Pleroma.Web.MastodonAPI.StatusView
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
import Pleroma.Factory

defp test_notifications_rendering(notifications, user, expected_result) do
@@ -45,15 +45,14 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do
object = Object.normalize(activity)
chat = Chat.get(recipient.id, user.ap_id)

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

expected = %{
id: to_string(notification.id),
pleroma: %{is_seen: false},
type: "pleroma:chat_mention",
account: AccountView.render("show.json", %{user: user, for: recipient}),
chat_message:
ChatMessageReferenceView.render("show.json", %{chat_message_reference: cm_ref}),
chat_message: MessageReferenceView.render("show.json", %{chat_message_reference: cm_ref}),
created_at: Utils.to_masto_date(notification.inserted_at)
}



+ 9
- 9
test/web/pleroma_api/controllers/chat_controller_test.exs View File

@@ -5,7 +5,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do
use Pleroma.Web.ConnCase, async: true

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Object
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
@@ -23,7 +23,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do
{:ok, _create} = CommonAPI.post_chat_message(other_user, user, "sup part 2")
{:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id)
object = Object.normalize(create, false)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

assert cm_ref.unread == true

@@ -34,7 +34,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do

assert result["unread"] == false

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

assert cm_ref.unread == false
end
@@ -50,7 +50,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do
{:ok, _create} = CommonAPI.post_chat_message(other_user, user, "sup part 2")
{:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id)
object = Object.normalize(create, false)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

assert cm_ref.unread == true

@@ -61,7 +61,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do

assert result["unread"] == 0

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

assert cm_ref.unread == false
end
@@ -139,7 +139,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do

chat = Chat.get(user.id, recipient.ap_id)

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

# Deleting your own message removes the message and the reference
result =
@@ -149,12 +149,12 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do
|> json_response_and_validate_schema(200)

assert result["id"] == cm_ref.id
refute ChatMessageReference.get_by_id(cm_ref.id)
refute MessageReference.get_by_id(cm_ref.id)
assert %{data: %{"type" => "Tombstone"}} = Object.get_by_id(object.id)

# Deleting other people's messages just removes the reference
object = Object.normalize(other_message, false)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

result =
conn
@@ -163,7 +163,7 @@ defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do
|> json_response_and_validate_schema(200)

assert result["id"] == cm_ref.id
refute ChatMessageReference.get_by_id(cm_ref.id)
refute MessageReference.get_by_id(cm_ref.id)
assert Object.get_by_id(object.id)
end
end


test/web/pleroma_api/views/chat_message_reference_view_test.exs → test/web/pleroma_api/views/chat/message_reference_view_test.exs View File

@@ -2,15 +2,15 @@
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do
defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceViewTest do
use Pleroma.DataCase

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Object
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView

import Pleroma.Factory

@@ -31,9 +31,9 @@ defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do

object = Object.normalize(activity)

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

chat_message = ChatMessageReferenceView.render("show.json", chat_message_reference: cm_ref)
chat_message = MessageReferenceView.render("show.json", chat_message_reference: cm_ref)

assert chat_message[:id] == cm_ref.id
assert chat_message[:content] == "kippis :firefox:"
@@ -47,10 +47,9 @@ defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do

object = Object.normalize(activity)

cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)

chat_message_two =
ChatMessageReferenceView.render("show.json", chat_message_reference: cm_ref)
chat_message_two = MessageReferenceView.render("show.json", chat_message_reference: cm_ref)

assert chat_message_two[:id] == cm_ref.id
assert chat_message_two[:content] == "gkgkgk"

+ 4
- 4
test/web/pleroma_api/views/chat_view_test.exs View File

@@ -6,12 +6,12 @@ defmodule Pleroma.Web.PleromaAPI.ChatViewTest do
use Pleroma.DataCase

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Object
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.PleromaAPI.ChatMessageReferenceView
alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView
alias Pleroma.Web.PleromaAPI.ChatView

import Pleroma.Factory
@@ -55,9 +55,9 @@ defmodule Pleroma.Web.PleromaAPI.ChatViewTest do

represented_chat = ChatView.render("show.json", chat: chat)

cm_ref = ChatMessageReference.for_chat_and_object(chat, chat_message)
cm_ref = MessageReference.for_chat_and_object(chat, chat_message)

assert represented_chat[:last_message] ==
ChatMessageReferenceView.render("show.json", chat_message_reference: cm_ref)
MessageReferenceView.render("show.json", chat_message_reference: cm_ref)
end
end

+ 3
- 3
test/web/streamer/streamer_test.exs View File

@@ -8,7 +8,7 @@ defmodule Pleroma.Web.StreamerTest do
import Pleroma.Factory

alias Pleroma.Chat
alias Pleroma.ChatMessageReference
alias Pleroma.Chat.MessageReference
alias Pleroma.Conversation.Participation
alias Pleroma.List
alias Pleroma.Object
@@ -155,7 +155,7 @@ defmodule Pleroma.Web.StreamerTest do
{:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey cirno")
object = Object.normalize(create_activity, false)
chat = Chat.get(user.id, other_user.ap_id)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)
cm_ref = %{cm_ref | chat: chat, object: object}

Streamer.get_topic_and_add_socket("user:pleroma_chat", user)
@@ -173,7 +173,7 @@ defmodule Pleroma.Web.StreamerTest do
{:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey cirno")
object = Object.normalize(create_activity, false)
chat = Chat.get(user.id, other_user.ap_id)
cm_ref = ChatMessageReference.for_chat_and_object(chat, object)
cm_ref = MessageReference.for_chat_and_object(chat, object)
cm_ref = %{cm_ref | chat: chat, object: object}

Streamer.get_topic_and_add_socket("user", user)


Loading…
Cancel
Save