mirror of
https://github.com/algora-io/tv.git
synced 2024-11-26 01:00:20 +02:00
add routes /:channel_handle/{chat,embed}
This commit is contained in:
parent
eccc8c1c42
commit
04cef55c1d
@ -178,6 +178,18 @@ defmodule Algora.Library do
|
|||||||
|> Repo.update!()
|
|> Repo.update!()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_latest_video(%User{} = user) do
|
||||||
|
from(v in Video,
|
||||||
|
join: u in User,
|
||||||
|
on: v.user_id == u.id,
|
||||||
|
where: u.id == ^user.id,
|
||||||
|
select_merge: %{channel_handle: u.handle, channel_name: u.name},
|
||||||
|
order_by: [desc: v.inserted_at],
|
||||||
|
limit: 1
|
||||||
|
)
|
||||||
|
|> Repo.one()
|
||||||
|
end
|
||||||
|
|
||||||
def get_mp4_video(id) do
|
def get_mp4_video(id) do
|
||||||
from(v in Video,
|
from(v in Video,
|
||||||
where: v.format == :mp4 and (v.transmuxed_from_id == ^id or v.id == ^id),
|
where: v.format == :mp4 and (v.transmuxed_from_id == ^id or v.id == ^id),
|
||||||
|
17
lib/algora_web/controllers/chat_popout_controller.ex
Normal file
17
lib/algora_web/controllers/chat_popout_controller.ex
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
defmodule AlgoraWeb.ChatPopoutController do
|
||||||
|
use AlgoraWeb, :controller
|
||||||
|
|
||||||
|
alias Algora.{Accounts, Library}
|
||||||
|
|
||||||
|
def get(conn, %{"channel_handle" => channel_handle}) do
|
||||||
|
user = Accounts.get_user_by!(handle: channel_handle)
|
||||||
|
|
||||||
|
case Library.get_latest_video(user) do
|
||||||
|
nil ->
|
||||||
|
redirect(conn, to: ~p"/#{user.handle}")
|
||||||
|
|
||||||
|
video ->
|
||||||
|
redirect(conn, to: ~p"/#{user.handle}/#{video.id}/chat")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
17
lib/algora_web/controllers/embed_popout_controller.ex
Normal file
17
lib/algora_web/controllers/embed_popout_controller.ex
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
defmodule AlgoraWeb.EmbedPopoutController do
|
||||||
|
use AlgoraWeb, :controller
|
||||||
|
|
||||||
|
alias Algora.{Accounts, Library}
|
||||||
|
|
||||||
|
def get(conn, %{"channel_handle" => channel_handle}) do
|
||||||
|
user = Accounts.get_user_by!(handle: channel_handle)
|
||||||
|
|
||||||
|
case Library.get_latest_video(user) do
|
||||||
|
nil ->
|
||||||
|
redirect(conn, to: ~p"/#{user.handle}")
|
||||||
|
|
||||||
|
video ->
|
||||||
|
redirect(conn, to: ~p"/#{user.handle}/#{video.id}/embed")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -45,6 +45,27 @@ defmodule AlgoraWeb.Router do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scope "/", AlgoraWeb do
|
||||||
|
pipe_through [:browser, :embed]
|
||||||
|
|
||||||
|
get "/:channel_handle/chat", ChatPopoutController, :get
|
||||||
|
get "/:channel_handle/embed", EmbedPopoutController, :get
|
||||||
|
|
||||||
|
# TODO: consolidate live_sessions
|
||||||
|
|
||||||
|
live_session :chat,
|
||||||
|
layout: {AlgoraWeb.Layouts, :live_chat},
|
||||||
|
root_layout: {AlgoraWeb.Layouts, :root_bare} do
|
||||||
|
live "/:channel_handle/:video_id/chat", ChatLive, :show
|
||||||
|
end
|
||||||
|
|
||||||
|
live_session :embed,
|
||||||
|
layout: {AlgoraWeb.Layouts, :live_bare},
|
||||||
|
root_layout: {AlgoraWeb.Layouts, :root_bare} do
|
||||||
|
live "/:channel_handle/:video_id/embed", EmbedLive, :show
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scope "/", AlgoraWeb do
|
scope "/", AlgoraWeb do
|
||||||
pipe_through :browser
|
pipe_through :browser
|
||||||
|
|
||||||
@ -71,22 +92,4 @@ defmodule AlgoraWeb.Router do
|
|||||||
live "/:channel_handle/:video_id", VideoLive, :show
|
live "/:channel_handle/:video_id", VideoLive, :show
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/", AlgoraWeb do
|
|
||||||
pipe_through [:browser, :embed]
|
|
||||||
|
|
||||||
# TODO: consolidate live_sessions
|
|
||||||
|
|
||||||
live_session :chat,
|
|
||||||
layout: {AlgoraWeb.Layouts, :live_chat},
|
|
||||||
root_layout: {AlgoraWeb.Layouts, :root_bare} do
|
|
||||||
live "/:channel_handle/:video_id/chat", ChatLive, :show
|
|
||||||
end
|
|
||||||
|
|
||||||
live_session :embed,
|
|
||||||
layout: {AlgoraWeb.Layouts, :live_bare},
|
|
||||||
root_layout: {AlgoraWeb.Layouts, :root_bare} do
|
|
||||||
live "/:channel_handle/:video_id/embed", EmbedLive, :show
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user