From 92d80d403d2c79e707fa118de99f098e8981f472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Tue, 24 Aug 2021 14:06:29 -1000 Subject: [PATCH] Refresh the video after getting a new video event --- frontend/js/components/websocket.js | 12 ++++++++++-- frontend/js/reducers/show.js | 29 ++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/frontend/js/components/websocket.js b/frontend/js/components/websocket.js index 6438570..c6ac543 100644 --- a/frontend/js/components/websocket.js +++ b/frontend/js/components/websocket.js @@ -1,8 +1,8 @@ import { useEffect, useState, useCallback } from "react"; import { useDispatch, useSelector } from "react-redux"; import { setFetchedTorrents } from "../actions/torrents"; -import { newMovieEvent } from "../actions/movies"; -import { newEpisodeEvent } from "../actions/shows"; +import { newMovieEvent, getMovieDetails } from "../actions/movies"; +import { newEpisodeEvent, getEpisodeDetails } from "../actions/shows"; export const WsHandler = () => { const dispatch = useDispatch(); @@ -67,8 +67,16 @@ export const WsHandler = () => { case "newVideo": if (data.message.type === "movie") { dispatch(newMovieEvent(data.message.data)); + dispatch(getMovieDetails(data.message.data.imdb_id)); } else if (data.message.type === "episode") { dispatch(newEpisodeEvent(data.message.data)); + dispatch( + getEpisodeDetails( + data.message.data.show_imdb_id, + data.message.data.season, + data.message.data.episode + ) + ); } break; } diff --git a/frontend/js/reducers/show.js b/frontend/js/reducers/show.js index f12a214..fdbff1e 100644 --- a/frontend/js/reducers/show.js +++ b/frontend/js/reducers/show.js @@ -84,19 +84,30 @@ export default (state = defaultState, action) => draft.show.tracked_episode = action.payload.episode; // eslint-disable-line camelcase break; - case "EPISODE_GET_DETAILS_PENDING": - draft.show.seasons - .get(action.payload.main.season) - .get(action.payload.main.episode).fetching = true; + case "EPISODE_GET_DETAILS_PENDING": { + const imdbId = action.payload.main.imdbId; + if (!draft.show || draft.show.imdb_id !== imdbId) { + break; + } + + const season = action.payload.main.season; + const episode = action.payload.main.episode; + draft.show.seasons.get(season).get(episode).fetching = true; break; + } case "EPISODE_GET_DETAILS_FULFILLED": { - let episode = action.payload.response.data; - if (!episode) { - return draft; + const imdbId = action.payload.main.imdbId; + if (!draft.show || draft.show.imdb_id !== imdbId) { + break; } - formatEpisode(episode); - draft.show.seasons.get(episode.season).set(episode.episode, episode); + + const season = action.payload.main.season; + const episode = action.payload.main.episode; + + let data = action.payload.response.data; + formatEpisode(data); + draft.show.seasons.get(season).set(episode, data); break; }