summaryrefslogtreecommitdiff
path: root/lib/lsg_web/live
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lsg_web/live')
-rw-r--r--lib/lsg_web/live/chat_live.ex120
-rw-r--r--lib/lsg_web/live/chat_live.html.heex91
2 files changed, 0 insertions, 211 deletions
diff --git a/lib/lsg_web/live/chat_live.ex b/lib/lsg_web/live/chat_live.ex
deleted file mode 100644
index 276b362..0000000
--- a/lib/lsg_web/live/chat_live.ex
+++ /dev/null
@@ -1,120 +0,0 @@
-defmodule NolaWeb.ChatLive do
- use Phoenix.LiveView
- use Phoenix.HTML
- require Logger
-
- def mount(%{"network" => network, "chan" => chan}, %{"account" => account_id}, socket) do
- chan = NolaWeb.reformat_chan(chan)
- connection = IRC.Connection.get_network(network, chan)
- account = IRC.Account.get(account_id)
- membership = IRC.Membership.of_account(IRC.Account.get("DRgpD4fLf8PDJMLp8Dtb"))
- if account && connection && Enum.member?(membership, {connection.network, chan}) do
- {:ok, _} = Registry.register(IRC.PubSub, "#{connection.network}:events", plugin: __MODULE__)
- for t <- ["messages", "triggers", "outputs", "events"] do
- {:ok, _} = Registry.register(IRC.PubSub, "#{connection.network}/#{chan}:#{t}", plugin: __MODULE__)
- end
-
- IRC.PuppetConnection.start(account, connection)
-
- users = IRC.UserTrack.channel(connection.network, chan)
- |> Enum.map(fn(tuple) -> IRC.UserTrack.User.from_tuple(tuple) end)
- |> Enum.reduce(Map.new, fn(user = %{id: id}, acc) ->
- Map.put(acc, id, user)
- end)
-
- backlog = case Nola.IRC.BufferPlugin.select_buffer(connection.network, chan) do
- {backlog, _} ->
- {backlog, _} = Enum.reduce(backlog, {backlog, nil}, &reduce_contextual_event/2)
- Enum.reverse(backlog)
- _ -> []
- end
-
- socket = socket
- |> assign(:connection_id, connection.id)
- |> assign(:network, connection.network)
- |> assign(:chan, chan)
- |> assign(:title, "live")
- |> assign(:channel, chan)
- |> assign(:account_id, account.id)
- |> assign(:backlog, backlog)
- |> assign(:users, users)
- |> assign(:counter, 0)
-
- {:ok, socket}
- else
- {:ok, redirect(socket, to: "/")}
- end
- end
-
- def handle_event("send", %{"message" => %{"text" => text}}, socket) do
- account = IRC.Account.get(socket.assigns.account_id)
- IRC.send_message_as(account, socket.assigns.network, socket.assigns.channel, text, true)
- {:noreply, assign(socket, :counter, socket.assigns.counter + 1)}
- end
-
- def handle_info({:irc, :event, event = %{type: :join, user_id: id}}, socket) do
- if user = IRC.UserTrack.lookup(id) do
- socket = socket
- |> assign(:users, Map.put(socket.assigns.users, id, user))
- |> append_to_backlog(event)
- {:noreply, socket}
- else
- {:noreply, socket}
- end
- end
-
- def handle_info({:irc, :event, event = %{type: :nick, user_id: id, nick: nick}}, socket) do
- socket = socket
- |> assign(:users, update_in(socket.assigns.users, [id, :nick], nick))
- |> append_to_backlog(event)
- {:noreply, socket}
- end
-
- def handle_info({:irc, :event, event = %{type: :quit, user_id: id}}, socket) do
- socket = socket
- |> assign(:users, Map.delete(socket.assigns.users, id))
- |> append_to_backlog(event)
- {:noreply, socket}
- end
-
- def handle_info({:irc, :event, event = %{type: :part, user_id: id}}, socket) do
- socket = socket
- |> assign(:users, Map.delete(socket.assigns.users, id))
- |> append_to_backlog(event)
- {:noreply, socket}
- end
-
- def handle_info({:irc, :trigger, _, message}, socket) do
- handle_info({:irc, nil, message}, socket)
- end
-
- def handle_info({:irc, :text, message}, socket) do
- IO.inspect({:live_message, message})
- socket = socket
- |> append_to_backlog(message)
- {:noreply, socket}
- end
-
- def handle_info(info, socket) do
- Logger.debug("Unhandled info: #{inspect info}")
- {:noreply, socket}
- end
-
- defp append_to_backlog(socket, line) do
- {add, _} = reduce_contextual_event(line, {[], List.last(socket.assigns.backlog)})
- assign(socket, :backlog, socket.assigns.backlog ++ add)
- end
-
- defp reduce_contextual_event(line, {acc, nil}) do
- {[line | acc], line}
- end
- defp reduce_contextual_event(line, {acc, last}) do
- if NaiveDateTime.to_date(last.at) != NaiveDateTime.to_date(line.at) do
- {[%{type: :day_changed, date: NaiveDateTime.to_date(line.at), at: nil}, line | acc], line}
- else
- {[line | acc], line}
- end
-
- end
-
-end
diff --git a/lib/lsg_web/live/chat_live.html.heex b/lib/lsg_web/live/chat_live.html.heex
deleted file mode 100644
index 29cd6a1..0000000
--- a/lib/lsg_web/live/chat_live.html.heex
+++ /dev/null
@@ -1,91 +0,0 @@
-<div class="chat" data-turbo="false">
-
- <div class="py-4 px-4 bg-gradient-to-b from-black to-gray-900">
- <div class="grid grid-cols-2">
- <h1 class="text-gray-50 tracking-tight font-extrabold text-xl">
- <%= @network %>
- <span class="font-bold"><%= @chan %></span>
- </h1>
- <div class="text-right">
- <a href="/" class="text-gray-400"><%= @account_id %></a>
- </div>
- </div>
- </div>
-
- <div class="body">
-
- <div class="log">
- <p class="disconnected text-center text-6xl tracking-tight font-extrabold text-red-800 w-full my-24 mx-auto overflow-y-auto">
- Disconnected <span class="text-mono">:'(</span>
- </p>
- <p class="phx-errored text-center text-6xl tracking-tight font-extrabold text-red-800 w-full my-24 mx-auto overflow-y-auto">
- Oh no error <span class="text-mono">>:(</span>
- </p>
-
- <ul class="pt-4 pl-4">
- <%= for message <- @backlog do %>
- <%= if is_map(message) && Map.get(message, :__struct__) == IRC.Message do %>
- <li class="flex gap-2 place-items-center message"
- data-account-id={message.account.id}>
- <NolaWeb.MessageComponent.content
- message={message}
- self={message.account.id == @account_id}
- text={message.text}
- />
- </li>
- <% end %>
-
- <%= if is_binary(message) do %>
- <li class="notice"><%= message %></li>
- <% end %>
-
- <%= if is_map(message) && Map.get(message, :type) do %>
- <li class="flex gap-2 place-items-center event">
- <NolaWeb.Component.naive_date_time_utc datetime={message.at} format="time-24-with-seconds" />
- <span class="inline-block font-bold flex-none cursor-default text-gray-700">*&nbsp;*&nbsp;*</span>
- <span class="inline-block flex-grow cursor-default text-gray-700">
- <NolaWeb.EventComponent.content event={message}
- self={@users[message.user_id] && @users[message.user_id].account == @account_id}
- user={@users[message.user_id]}
- />
- </span>
- </li>
- <% end %>
- <% end %>
- </ul>
- </div>
-
- <aside>
- <%= for {_, user} <- @users do %>
- <details class="user dropdown">
- <summary><%= user.nick %></summary>
- <div class="content">
- <h3 class="text-xl font-bold"><%= user.nick %></h3>
-
- <ul class="mt-4 space-y-2">
- <li class="">User: <span class="font-bold"><%= user.username %></span></li>
- <li class="">Name: <%= user.realname || user.nick %></li>
- <li class="">Host: <span class="font-mono"><%= user.host %></span></li>
- </ul>
-
- <div class="mt-4 font-xs text-gray-300 text-center">
- UID: <%= user.id %>
- <br />
- AID: <%= user.account %>
- </div>
- </div>
- </details>
- <% end %>
- </aside>
-
- </div>
-
- <.form let={f} id={"form-#{@counter}"} for={:message} phx-submit="send" class="w-full px-4 pt-4">
- <div>
- <div class="mt-1 flex rounded-md shadow-sm border border-gray-300">
- <%= text_input f, :text, class: "focus:ring-indigo-500 focus:border-indigo-500 block w-full border rounded-md pl-4 sm:text-sm border-gray-300", autofocus: true, 'phx-hook': "AutoFocus", autocomplete: "off", placeholder: "Don't be shy, say something…" %>
- <%= submit content_tag(:span, "Send"), class: "-ml-px relative inline-flex items-center space-x-2 px-4 py-2 border border-gray-300 text-sm font-medium rounded-r-md text-gray-700 bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500"%>
- </div>
- </div>
- </.form>
-</div>