mirror of
https://github.com/fly-apps/live_beats.git
synced 2024-11-24 08:51:00 +00:00
WIP
This commit is contained in:
parent
65f307b1fa
commit
1caf809be7
5 changed files with 38 additions and 12 deletions
|
@ -181,16 +181,16 @@ Hooks.AudioPlayer = {
|
|||
Hooks.Ping = {
|
||||
mounted(){
|
||||
this.handleEvent("pong", () => {
|
||||
console.log("pong")
|
||||
this.el.innerText = `ping: ${Date.now() - this.nowMs}ms`
|
||||
this.timer = setTimeout(() => this.ping(), 1000)
|
||||
let rtt = Date.now() - this.nowMs
|
||||
this.el.innerText = `ping: ${rtt}ms`
|
||||
this.timer = setTimeout(() => this.ping(rtt), 1000)
|
||||
})
|
||||
this.ping()
|
||||
this.ping(null)
|
||||
},
|
||||
destroyed(){ clearTimeout(this.timer) },
|
||||
ping(){
|
||||
ping(rtt){
|
||||
this.nowMs = Date.now()
|
||||
this.pushEvent("ping", {})
|
||||
this.pushEvent("ping", {rtt: rtt})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,10 @@ defmodule LiveBeats.MediaLibrary do
|
|||
Phoenix.PubSub.subscribe(@pubsub, topic(profile.user_id))
|
||||
end
|
||||
|
||||
def broadcast_ping(%Accounts.User{} = user, rtt, region) do
|
||||
broadcast!(user.active_profile_user_id, {:ping, %{rtt: rtt, region: region}})
|
||||
end
|
||||
|
||||
def unsubscribe_to_profile(%Profile{} = profile) do
|
||||
Phoenix.PubSub.unsubscribe(@pubsub, topic(profile.user_id))
|
||||
end
|
||||
|
@ -251,7 +255,9 @@ defmodule LiveBeats.MediaLibrary do
|
|||
end
|
||||
|
||||
def get_current_active_song(%Profile{user_id: user_id}) do
|
||||
Repo.replica().one(from s in Song, where: s.user_id == ^user_id and s.status in [:playing, :paused])
|
||||
Repo.replica().one(
|
||||
from s in Song, where: s.user_id == ^user_id and s.status in [:playing, :paused]
|
||||
)
|
||||
end
|
||||
|
||||
def get_profile!(%Accounts.User{} = user) do
|
||||
|
|
|
@ -31,7 +31,13 @@ defmodule LiveBeatsWeb.Nav do
|
|||
{:cont, assign(socket, active_tab: active_tab)}
|
||||
end
|
||||
|
||||
defp handle_event("ping", _, socket) do
|
||||
defp handle_event("ping", %{"rtt" => rtt}, socket) do
|
||||
%{current_user: current_user} = socket.assigns
|
||||
|
||||
if rtt && current_user && current_user.active_profile_user_id do
|
||||
MediaLibrary.broadcast_ping(current_user, rtt, socket.assigns.region)
|
||||
end
|
||||
|
||||
{:halt, push_event(socket, "pong", %{})}
|
||||
end
|
||||
|
||||
|
|
|
@ -40,7 +40,13 @@ defmodule LiveBeatsWeb.ProfileLive do
|
|||
</.title_bar>
|
||||
|
||||
<Presence.listening_now presences={@presences}>
|
||||
<:title let={user}><%= user.username %></:title>
|
||||
<:title let={%{presence: presence, ping: ping, region: region}}>
|
||||
<%= presence.username %>
|
||||
<%= if ping do %>
|
||||
(<%= ping %>ms)
|
||||
<%= if region do %><img class="inline w-5 h-5 absolute right-1" src={"https://fly.io/ui/images/#{region}.svg"} /><% end %>
|
||||
<% end %>
|
||||
</:title>
|
||||
</Presence.listening_now>
|
||||
|
||||
<div id="dialogs" phx-update="append">
|
||||
|
@ -180,6 +186,11 @@ defmodule LiveBeatsWeb.ProfileLive do
|
|||
{:noreply, update(socket, :songs, &(&1 ++ songs))}
|
||||
end
|
||||
|
||||
def handle_info({MediaLibrary, {:ping, %{user_id: id, rtt: rtt, region: region}}}, socket) do
|
||||
send_update(Presence.Pill, id: id, ping: rtt, region: region)
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_info({MediaLibrary, _}, socket), do: {:noreply, socket}
|
||||
|
||||
def handle_info({Accounts, _}, socket), do: {:noreply, socket}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<.link navigate={home_path(@current_user)}>
|
||||
<.icon name={:status_online} class="w-8 h-8 text-purple-600 -mt-2 inline-block" outlined/>
|
||||
<span class="h-8 w-auto text-2xl ml-1 font-bold">
|
||||
LiveBeats <%= @region %>
|
||||
LiveBeats
|
||||
</span>
|
||||
</.link>
|
||||
</div>
|
||||
|
@ -55,7 +55,7 @@
|
|||
<.link navigate={home_path(@current_user)}>
|
||||
<.icon name={:status_online} class="w-8 h-8 text-purple-600 -mt-2 inline-block" outlined/>
|
||||
<span class="h-8 w-auto text-2xl ml-1 font-bold">
|
||||
LiveBeats <small class="font-normal"><%= @region %></small>
|
||||
LiveBeats
|
||||
</span>
|
||||
</.link>
|
||||
</div>
|
||||
|
@ -165,6 +165,9 @@
|
|||
<%= @inner_content %>
|
||||
</main>
|
||||
<div class="relative">
|
||||
<div id="ping" phx-hook="Ping" class="fixed bottom-0 right-0 bg-gray-900 text-gray-200 px-2 rounded-tl-md text-sm w-24 min-w-max"></div>
|
||||
<div class="fixed bottom-0 right-0 bg-gray-900 text-gray-200 px-2 rounded-tl-md text-sm w-[114px] min-w-max" phx-update="ignore">
|
||||
<span id="ping" phx-hook="Ping"></span>
|
||||
<%= if @region do %><img class="inline w-5 h-5 absolute right-0" src={"https://fly.io/ui/images/#{@region}.svg"} /><% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue