Grégoire Delattre ed508bbf3b
Some checks reported errors
continuous-integration/drone/pr Build was killed
continuous-integration/drone/push Build is passing
Fix episode refresh
2020-04-10 18:03:53 +02:00

111 lines
3.1 KiB
JavaScript

import { produce } from "immer";
import { formatTorrents } from "../utils";
const defaultState = {
loading: false,
show: {},
};
const formatEpisode = (episode) => {
// Format the episode's torrents
episode.torrents = formatTorrents(episode);
// Set the default fetching data
episode.fetching = false;
episode.fetchingSubtitles = false;
};
export default (state = defaultState, action) =>
produce(state, (draft) => {
switch (action.type) {
case "SHOW_FETCH_DETAILS_PENDING":
draft.loading = true;
break;
case "SHOW_FETCH_DETAILS_FULFILLED": {
let show = action.payload.response.data;
let episodes = show.episodes;
delete show.episodes;
draft.show = show;
let seasons = {};
let seasonNumbers = [];
if (!episodes) {
episodes = [];
}
episodes.forEach((episode) => {
// Skip special episodes
if (episode.season === 0) {
return;
}
// Format the episode from polochon
formatEpisode(episode);
if (!seasons[episode.season]) {
seasons[episode.season] = [];
seasonNumbers.push(episode.season);
}
seasons[episode.season].push(episode);
});
let seasonMap = new Map();
seasonNumbers.sort().forEach((n) => {
let episodes = [];
seasons[n]
.sort((a, b) => a.episode - b.episode)
.forEach((episode) => {
episodes.push([episode.episode, episode]);
});
seasonMap.set(n, new Map(episodes));
});
draft.show.seasons = seasonMap;
draft.loading = false;
break;
}
case "SHOW_UPDATE_STORE_WISHLIST":
// TODO: check with we give the imdb in the payload
draft.show.tracked_season = action.payload.season; // eslint-disable-line camelcase
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;
break;
case "EPISODE_GET_DETAILS_FULFILLED": {
let episode = action.payload.response.data;
if (!episode) {
return draft;
}
formatEpisode(episode);
draft.show.seasons.get(episode.season).set(episode.episode, episode);
break;
}
case "EPISODE_SUBTITLES_UPDATE_PENDING":
draft.show.seasons
.get(action.payload.main.season)
.get(action.payload.main.episode).fetchingSubtitles = true;
break;
case "EPISODE_SUBTITLES_UPDATE_FULFILLED": {
draft.show.seasons
.get(action.payload.main.season)
.get(action.payload.main.episode).subtitles =
action.payload.response.data;
draft.show.seasons
.get(action.payload.main.season)
.get(action.payload.main.episode).fetchingSubtitles = false;
break;
}
default:
return draft;
}
});