X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fchat_channel.ex;h=840414933463d2d74482ec48b29b62de0402cded;hb=6cb31edd76fd42a0e33bc365d982cd02e3578d6c;hp=c2277d73dd2da2933a9924d5a963be82ca95d16a;hpb=69f1024bb0c6fef509cb38aabcbb1482055cde05;p=akkoma diff --git a/lib/pleroma/web/chat_channel.ex b/lib/pleroma/web/chat_channel.ex index c2277d73d..840414933 100644 --- a/lib/pleroma/web/chat_channel.ex +++ b/lib/pleroma/web/chat_channel.ex @@ -1,5 +1,10 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Web.ChatChannel do use Phoenix.Channel + alias Pleroma.User alias Pleroma.Web.ChatChannel.ChatChannelState def join("chat:public", _message, socket) do @@ -8,25 +13,31 @@ defmodule Pleroma.Web.ChatChannel do end def handle_info(:after_join, socket) do - push socket, "messages", %{messages: ChatChannelState.messages()} + push(socket, "messages", %{messages: ChatChannelState.messages()}) {:noreply, socket} end - def handle_in("new_msg", %{"text" => text}, socket) do - author = socket.assigns[:user] - author = Pleroma.Web.MastodonAPI.AccountView.render("account.json", user: author) - message= ChatChannelState.add_message(%{text: text, author: author}) + def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} = socket) do + text = String.trim(text) + + if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do + author = User.get_cached_by_nickname(user_name) + author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author) + message = ChatChannelState.add_message(%{text: text, author: author}) + + broadcast!(socket, "new_msg", message) + end - broadcast! socket, "new_msg", message {:noreply, socket} end end defmodule Pleroma.Web.ChatChannel.ChatChannelState do use Agent + @max_messages 20 - def start_link do + def start_link(_) do Agent.start_link(fn -> %{max_id: 1, messages: []} end, name: __MODULE__) end @@ -39,7 +50,7 @@ defmodule Pleroma.Web.ChatChannel.ChatChannelState do end) end - def messages() do - Agent.get(__MODULE__, fn state -> state[:messages] |> Enum.reverse end) + def messages do + Agent.get(__MODULE__, fn state -> state[:messages] |> Enum.reverse() end) end end