Stuff stuff stuff #44

Merged
PouuleT merged 24 commits from update-node into master 2021-08-30 12:59:08 +00:00
5 changed files with 78 additions and 74 deletions
Showing only changes of commit 13e5775c34 - Show all commits

View File

@ -59,13 +59,13 @@ func (m *Movie) MarshalJSON() ([]byte, error) {
// Append the Subtitles // Append the Subtitles
for _, s := range m.pMovie.Subtitles { for _, s := range m.pMovie.Subtitles {
subtitleURL, _ := m.client.DownloadURLWithToken(s) sub := subtitles.Subtitle{Subtitle: s.Subtitle}
movieToMarshal.Subtitles = append(movieToMarshal.Subtitles, if !sub.Embedded {
subtitles.Subtitle{ subtitleURL, _ := m.client.DownloadURLWithToken(s)
Subtitle: s.Subtitle, sub.URL = subtitleURL
URL: subtitleURL, sub.VVTFile = fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang)
VVTFile: fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang), }
}) movieToMarshal.Subtitles = append(movieToMarshal.Subtitles, sub)
} }
} }

View File

@ -46,15 +46,15 @@ func (e *Episode) MarshalJSON() ([]byte, error) {
// Append the Subtitles // Append the Subtitles
for _, s := range pEpisode.Subtitles { for _, s := range pEpisode.Subtitles {
subtitleURL, _ := e.show.client.DownloadURLWithToken(s) sub := subtitles.Subtitle{Subtitle: s.Subtitle}
subs = append(subs, subtitles.Subtitle{ if !sub.Embedded {
Subtitle: &polochon.Subtitle{ subtitleURL, _ := e.show.client.DownloadURLWithToken(s)
File: polochon.File{Size: s.Size}, sub.URL = subtitleURL
Lang: s.Lang, sub.VVTFile = fmt.Sprintf(
}, "/shows/%s/seasons/%d/episodes/%d/subtitles/%s",
URL: subtitleURL, e.ShowImdbID, e.Season, e.Episode, s.Lang)
VVTFile: fmt.Sprintf("/shows/%s/seasons/%d/episodes/%d/subtitles/%s", e.ShowImdbID, e.Season, e.Episode, s.Lang), }
}) subs = append(subs, sub)
} }
} }
} }

View File

@ -35,14 +35,7 @@ export const SubtitlesButton = ({
const count = subtitles && subtitles.size !== 0 ? subtitles.size : 0; const count = subtitles && subtitles.size !== 0 ? subtitles.size : 0;
let searching = fetchingSubtitles; const searching = fetchingSubtitles.length > 0;
if (count > 0) {
subtitles.forEach((subtitle) => {
if (subtitle.searching === true) {
searching = true;
}
});
}
return ( return (
<span className="mr-1 mb-1"> <span className="mr-1 mb-1">
@ -87,31 +80,35 @@ export const SubtitlesButton = ({
SubtitlesButton.propTypes = { SubtitlesButton.propTypes = {
subtitles: PropTypes.object, subtitles: PropTypes.object,
inLibrary: PropTypes.bool.isRequired, inLibrary: PropTypes.bool.isRequired,
fetchingSubtitles: PropTypes.bool.isRequired, fetchingSubtitles: PropTypes.array.isRequired,
search: PropTypes.func.isRequired, search: PropTypes.func.isRequired,
}; };
export const SubtitleEntry = ({ subtitle, search }) => { export const SubtitleEntry = ({ subtitle, search }) => {
const lang = upperCaseFirst(subtitle.lang.split("_")[0]); const lang = upperCaseFirst(subtitle.lang.split("_")[0]);
const size = subtitle.size ? subtitle.size : 0; const size = subtitle.size ? subtitle.size : 0;
const embedded = subtitle.embedded ? subtitle.embedded : false;
const handleRefresh = () => { const handleRefresh = () => {
search(subtitle.lang); search(subtitle.lang);
}; };
return ( return (
<Dropdown.Item as="span"> <Dropdown.Item as="span" disabled={embedded}>
<div className="d-flex justify-content-between align-items-center"> <div className="d-flex justify-content-between align-items-center">
<a href={subtitle.url ? subtitle.url : ""} className="link-unstyled"> <a href={subtitle.url ? subtitle.url : ""} className="link-unstyled">
{lang} {lang}
{embedded && <small className="ml-2">(Inside the video)</small>}
{size !== 0 && <span> ({prettySize(size)})</span>} {size !== 0 && <span> ({prettySize(size)})</span>}
</a> </a>
<div {!embedded && (
onClick={handleRefresh} <div
className={`clickable fa ${ onClick={handleRefresh}
subtitle.searching ? "fa-spin" : "" className={`clickable fa ${
} fa-refresh`} subtitle.searching ? "fa-spin" : ""
/> } fa-refresh`}
/>
)}
</div> </div>
</Dropdown.Item> </Dropdown.Item>
); );

View File

@ -13,7 +13,7 @@ const defaultState = {
const formatMovie = (movie) => { const formatMovie = (movie) => {
movie.fetchingDetails = false; movie.fetchingDetails = false;
movie.fetchingSubtitles = false; movie.fetchingSubtitles = [];
movie.torrents = formatTorrents(movie); movie.torrents = formatTorrents(movie);
movie.subtitles = formatSubtitles(movie.subtitles); movie.subtitles = formatSubtitles(movie.subtitles);
return movie; return movie;
@ -89,28 +89,28 @@ export default (state = defaultState, action) =>
draft.lastFetchUrl = action.payload.url; draft.lastFetchUrl = action.payload.url;
break; break;
case "MOVIE_SUBTITLES_UPDATE_PENDING": case "MOVIE_SUBTITLES_UPDATE_PENDING": {
draft.movies.get(action.payload.main.imdbId).fetchingSubtitles = true; let imdbId = action.payload.main.imdbId;
if ( let lang = action.payload.main.lang;
draft.movies draft.movies.get(imdbId).fetchingSubtitles.push(lang);
.get(action.payload.main.imdbId) if (draft.movies.get(imdbId).subtitles.get(lang)) {
.subtitles.get(action.payload.main.lang) draft.movies.get(imdbId).subtitles.get(lang).searching = true;
) {
draft.movies
.get(action.payload.main.imdbId)
.subtitles.get(action.payload.main.lang).searching = true;
} }
break; break;
}
case "MOVIE_SUBTITLES_UPDATE_FULFILLED": case "MOVIE_SUBTITLES_UPDATE_FULFILLED": {
draft.movies.get(action.payload.main.imdbId).fetchingSubtitles = false; let imdbId = action.payload.main.imdbId;
draft.movies let lang = action.payload.main.lang;
.get(action.payload.main.imdbId) let data = action.payload.response.data;
.subtitles.set( draft.movies.get(imdbId).fetchingSubtitles = draft.movies
action.payload.response.data.lang, .get(imdbId)
formatSubtitle(action.payload.response.data) .fetchingSubtitles.filter((l) => l != lang);
); if (data) {
draft.movies.get(imdbId).subtitles.set(lang, formatSubtitle(data));
}
break; break;
}
case "SELECT_MOVIE": case "SELECT_MOVIE":
draft.selectedImdbId = action.payload.imdbId; draft.selectedImdbId = action.payload.imdbId;

View File

@ -15,7 +15,8 @@ const formatEpisode = (episode) => {
// Set the default fetching data // Set the default fetching data
episode.fetching = false; episode.fetching = false;
episode.fetchingSubtitles = false; // Holds the languages of the subtitles currently fetching
episode.fetchingSubtitles = [];
}; };
export default (state = defaultState, action) => export default (state = defaultState, action) =>
@ -100,36 +101,42 @@ export default (state = defaultState, action) =>
break; break;
} }
case "EPISODE_SUBTITLES_UPDATE_PENDING": case "EPISODE_SUBTITLES_UPDATE_PENDING": {
let season = action.payload.main.season;
let episode = action.payload.main.episode;
let lang = action.payload.main.lang;
draft.show.seasons draft.show.seasons
.get(action.payload.main.season) .get(season)
.get(action.payload.main.episode).fetchingSubtitles = true; .get(episode)
if ( .fetchingSubtitles.push(lang);
if (draft.show.seasons.get(season).get(episode).subtitles.get(lang)) {
draft.show.seasons draft.show.seasons
.get(action.payload.main.season) .get(season)
.get(action.payload.main.episode) .get(episode)
.subtitles.get(action.payload.main.lang) .subtitles.get(lang).searching = true;
) {
draft.show.seasons
.get(action.payload.main.season)
.get(action.payload.main.episode)
.subtitles.get(action.payload.main.lang).searching = true;
} }
break; break;
}
case "EPISODE_SUBTITLES_UPDATE_FULFILLED": { case "EPISODE_SUBTITLES_UPDATE_FULFILLED": {
draft.show.seasons let season = action.payload.main.season;
.get(action.payload.main.season) let episode = action.payload.main.episode;
.get(action.payload.main.episode).fetchingSubtitles = false; let lang = action.payload.main.lang;
draft.show.seasons let data = action.payload.response.data;
.get(action.payload.main.season) draft.show.seasons.get(season).get(episode).fetchingSubtitles =
.get(action.payload.main.episode) draft.show.seasons
.subtitles.set( .get(season)
action.payload.main.lang, .get(episode)
formatSubtitle(action.payload.response.data) .fetchingSubtitles.filter((l) => l != lang);
); if (data) {
draft.show.seasons
.get(season)
.get(episode)
.subtitles.set(lang, formatSubtitle(data));
}
break; break;
} }
default: default:
return draft; return draft;
} }