Skip to content

Commit 8d382ad

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 4e6f175 + d8f4016 commit 8d382ad

File tree

8 files changed

+70
-41
lines changed

8 files changed

+70
-41
lines changed

lib/media_server_web/components/poster_component.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule MediaServerWeb.Components.PosterComponent do
66
<div class="group relative">
77
88
<div class="w-full bg-gray-200 aspect-[4/6] rounded-md overflow-hidden group-hover:opacity-75 lg:aspect-none">
9-
<img class="h-full object-cover" src={assigns.img_src}>
9+
<img class="h-full object-cover" src={assigns.img_src}>
1010
</div>
1111
1212
<div class="mt-2 flex">
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
defmodule MediaServerWeb.SeasonsLive.Show do
2+
use MediaServerWeb, :live_view
3+
4+
alias MediaServerWeb.Repositories.Series
5+
alias MediaServerWeb.Repositories.Episodes
6+
7+
@impl true
8+
def handle_params(%{"serie" => id, "season" => number}, _url, socket) do
9+
serie = Series.get_serie(id)
10+
11+
{
12+
:noreply,
13+
socket
14+
|> assign(:page_title, "#{serie["title"]}: Season #{number}")
15+
|> assign(:episodes, Episodes.get_all(id, number))
16+
}
17+
end
18+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<div class="max-w-4xl mx-auto py-6 px-4">
2+
<ul role="list" class="-my-5 divide-y divide-gray-200">
3+
4+
<%= for item <- @episodes do %>
5+
6+
<li class="py-4">
7+
<div class="sm:flex">
8+
<div class="mb-4 flex-shrink-0 sm:mb-0 sm:mr-4">
9+
10+
<%= if List.first(item["images"]) do %>
11+
<img class="h-48 w-full sm:w-72 object-cover" src={MediaServerWeb.Repositories.Episodes.get_screenshot(item)}>
12+
<% else %>
13+
<svg class="h-48 w-full sm:w-72 border border-gray-300 bg-white text-gray-300" preserveAspectRatio="none" stroke="currentColor" fill="none" viewBox="0 0 200 200" aria-hidden="true">
14+
<path vector-effect="non-scaling-stroke" stroke-width="1" d="M0 0l200 200M0 200L200 0" />
15+
</svg>
16+
<% end %>
17+
</div>
18+
<div>
19+
<h4 class="text-md font-bold"><%= "Season #{item["seasonNumber"]} - Episode #{item["episodeNumber"]}" %></h4>
20+
<p class="mt-1">
21+
<%= item["title"] %>
22+
</p>
23+
<p class="mt-2">
24+
<%= item["overview"] %>
25+
</p>
26+
27+
<%= live_redirect "Play", id: "play-#{ item["id"] }", to: Routes.watch_episode_show_path(@socket, :show, item["id"]), class: "mt-4 inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-slate-600 hover:bg-slate-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-slate-500" %>
28+
</div>
29+
</div>
30+
</li>
31+
32+
<% end %>
33+
</ul>
34+
</div>

lib/media_server_web/live/series_live/show.ex

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ defmodule MediaServerWeb.SeriesLive.Show do
22
use MediaServerWeb, :live_view
33

44
alias MediaServerWeb.Repositories.Series
5-
alias MediaServerWeb.Repositories.Episodes
65

76
@impl true
87
def handle_params(%{"serie" => id}, _url, socket) do
@@ -13,7 +12,6 @@ defmodule MediaServerWeb.SeriesLive.Show do
1312
socket
1413
|> assign(:page_title, serie["title"])
1514
|> assign(:serie, serie)
16-
|> assign(:episodes, Episodes.get_all(id))
1715
}
1816
end
1917
end

lib/media_server_web/live/series_live/show.html.heex

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -25,49 +25,23 @@
2525

2626

2727
<div class="mt-10">
28-
<div class="pb-5 border-b border-gray-200">
29-
<h3 class="text-lg leading-6 font-medium text-gray-900">
30-
Episodes
31-
</h3>
32-
</div>
33-
3428
<div class="flow-root mt-6">
3529
<ul role="list" class="-my-5 divide-y divide-gray-200">
3630

37-
<%= for item <- @episodes do %>
31+
<div class="mt-3 grid grid-cols-2 gap-y-10 gap-x-6 sm:grid-cols-2 lg:grid-cols-6 xl:gap-x-8">
3832

39-
<li class="py-4">
40-
<div class="sm:flex">
41-
<div class="mb-4 flex-shrink-0 sm:mb-0 sm:mr-4">
42-
43-
<%= if List.first(item["images"]) do %>
44-
<img class="h-48 w-full sm:w-72 object-cover" src={MediaServerWeb.Repositories.Episodes.get_screenshot(item)}>
45-
<% else %>
46-
<svg class="h-48 w-full sm:w-72 border border-gray-300 bg-white text-gray-300" preserveAspectRatio="none" stroke="currentColor" fill="none" viewBox="0 0 200 200" aria-hidden="true">
47-
<path vector-effect="non-scaling-stroke" stroke-width="1" d="M0 0l200 200M0 200L200 0" />
48-
</svg>
49-
<% end %>
50-
</div>
51-
<div>
52-
<h4 class="text-md font-bold"><%= "Season #{item["seasonNumber"]} - Episode #{item["episodeNumber"]}" %></h4>
53-
<p class="mt-1">
54-
<%= item["title"] %>
55-
</p>
56-
<p class="mt-2">
57-
<%= item["overview"] %>
58-
</p>
33+
<%= for item <- @serie["seasons"] |> Enum.filter(fn x -> x["statistics"]["episodeFileCount"] > 0 end) do %>
5934

60-
<%= live_redirect "Play", id: "play-#{ item["id"] }", to: Routes.watch_episode_show_path(@socket, :show, item["id"]), class: "mt-4 inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-slate-600 hover:bg-slate-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-slate-500" %>
35+
<%= MediaServerWeb.Components.PosterComponent.render(%{
36+
img_src: "",
37+
title: "Season #{ item["seasonNumber"] }",
38+
link: Routes.seasons_show_path(@socket, :show, @serie["id"], item["seasonNumber"])
39+
}) %>
40+
<% end %>
6141
</div>
62-
</div>
63-
</li>
64-
65-
<% end %>
6642
</ul>
6743
</div>
68-
6944
</div>
70-
7145
</div>
7246
</div>
7347
</div>

lib/media_server_web/repositories/episodes.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ defmodule MediaServerWeb.Repositories.Episodes do
33
"#{Application.get_env(:media_server, :series_base_url)}/api/v3/#{url}?apikey=#{Application.get_env(:media_server, :series_api_key)}"
44
end
55

6-
def get_all(series_id) do
6+
def get_all(series_id, season_number) do
77
{:ok, %HTTPoison.Response{status_code: 200, body: body}} =
88
HTTPoison.get("#{get_url("episode")}&seriesId=#{series_id}")
99

10-
Enum.filter(Jason.decode!(body), fn x -> x["hasFile"] end) |> add_images_to_episodes()
10+
Enum.filter(Jason.decode!(body), fn x ->
11+
x["seasonNumber"] === String.to_integer season_number
12+
end)
13+
|> Enum.filter(fn x -> x["hasFile"] end)
14+
|> add_images_to_episodes()
1115
end
1216

1317
def get_episode(id) do

lib/media_server_web/router.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ defmodule MediaServerWeb.Router do
2525

2626
live "/series", SeriesLive.Index, :index
2727
live "/series/:serie", SeriesLive.Show, :show
28+
live "/series/:serie/seasons/:season", SeasonsLive.Show, :show
2829

2930
get "/episodes/:episode/stream", StreamEpisodeController, :show
3031

test/media_server_web/live/series_live_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ defmodule MediaServerWeb.SeriesLiveTest do
4141

4242
EpisodesFixtures.get_episodes(serie["id"])
4343
|> Enum.each(fn episode ->
44-
{:ok, show_live, _html} = live(conn, Routes.series_show_path(conn, :show, serie["id"]))
44+
{:ok, show_live, _html} = live(conn, Routes.seasons_show_path(conn, :show, serie["id"], episode["seasonNumber"]))
4545

4646
assert show_live |> element("#play-#{episode["id"]}", "Play") |> render_click()
4747
end)
@@ -50,7 +50,7 @@ defmodule MediaServerWeb.SeriesLiveTest do
5050
test "it should merge episode images with serie episode", %{conn: _conn} do
5151
serie = SeriesFixtures.get_serie()
5252

53-
episodes = Episodes.get_all(serie["id"])
53+
episodes = Episodes.get_all(serie["id"], "1")
5454

5555
assert episodes === [
5656
%{

0 commit comments

Comments
 (0)