Stuff stuff stuff #44
@ -59,13 +59,13 @@ func (m *Movie) MarshalJSON() ([]byte, error) {
|
||||
|
||||
// Append the Subtitles
|
||||
for _, s := range m.pMovie.Subtitles {
|
||||
sub := subtitles.Subtitle{Subtitle: s.Subtitle}
|
||||
if !sub.Embedded {
|
||||
subtitleURL, _ := m.client.DownloadURLWithToken(s)
|
||||
movieToMarshal.Subtitles = append(movieToMarshal.Subtitles,
|
||||
subtitles.Subtitle{
|
||||
Subtitle: s.Subtitle,
|
||||
URL: subtitleURL,
|
||||
VVTFile: fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang),
|
||||
})
|
||||
sub.URL = subtitleURL
|
||||
sub.VVTFile = fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang)
|
||||
}
|
||||
movieToMarshal.Subtitles = append(movieToMarshal.Subtitles, sub)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,15 +46,15 @@ func (e *Episode) MarshalJSON() ([]byte, error) {
|
||||
|
||||
// Append the Subtitles
|
||||
for _, s := range pEpisode.Subtitles {
|
||||
sub := subtitles.Subtitle{Subtitle: s.Subtitle}
|
||||
if !sub.Embedded {
|
||||
subtitleURL, _ := e.show.client.DownloadURLWithToken(s)
|
||||
subs = append(subs, subtitles.Subtitle{
|
||||
Subtitle: &polochon.Subtitle{
|
||||
File: polochon.File{Size: s.Size},
|
||||
Lang: s.Lang,
|
||||
},
|
||||
URL: subtitleURL,
|
||||
VVTFile: fmt.Sprintf("/shows/%s/seasons/%d/episodes/%d/subtitles/%s", e.ShowImdbID, e.Season, e.Episode, s.Lang),
|
||||
})
|
||||
sub.URL = subtitleURL
|
||||
sub.VVTFile = fmt.Sprintf(
|
||||
"/shows/%s/seasons/%d/episodes/%d/subtitles/%s",
|
||||
e.ShowImdbID, e.Season, e.Episode, s.Lang)
|
||||
}
|
||||
subs = append(subs, sub)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,14 +35,7 @@ export const SubtitlesButton = ({
|
||||
|
||||
const count = subtitles && subtitles.size !== 0 ? subtitles.size : 0;
|
||||
|
||||
let searching = fetchingSubtitles;
|
||||
if (count > 0) {
|
||||
subtitles.forEach((subtitle) => {
|
||||
if (subtitle.searching === true) {
|
||||
searching = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
const searching = fetchingSubtitles.length > 0;
|
||||
|
||||
return (
|
||||
<span className="mr-1 mb-1">
|
||||
@ -87,31 +80,35 @@ export const SubtitlesButton = ({
|
||||
SubtitlesButton.propTypes = {
|
||||
subtitles: PropTypes.object,
|
||||
inLibrary: PropTypes.bool.isRequired,
|
||||
fetchingSubtitles: PropTypes.bool.isRequired,
|
||||
fetchingSubtitles: PropTypes.array.isRequired,
|
||||
search: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export const SubtitleEntry = ({ subtitle, search }) => {
|
||||
const lang = upperCaseFirst(subtitle.lang.split("_")[0]);
|
||||
const size = subtitle.size ? subtitle.size : 0;
|
||||
const embedded = subtitle.embedded ? subtitle.embedded : false;
|
||||
|
||||
const handleRefresh = () => {
|
||||
search(subtitle.lang);
|
||||
};
|
||||
|
||||
return (
|
||||
<Dropdown.Item as="span">
|
||||
<Dropdown.Item as="span" disabled={embedded}>
|
||||
<div className="d-flex justify-content-between align-items-center">
|
||||
<a href={subtitle.url ? subtitle.url : ""} className="link-unstyled">
|
||||
{lang}
|
||||
{embedded && <small className="ml-2">(Inside the video)</small>}
|
||||
{size !== 0 && <span> ({prettySize(size)})</span>}
|
||||
</a>
|
||||
{!embedded && (
|
||||
<div
|
||||
onClick={handleRefresh}
|
||||
className={`clickable fa ${
|
||||
subtitle.searching ? "fa-spin" : ""
|
||||
} fa-refresh`}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</Dropdown.Item>
|
||||
);
|
||||
|
@ -13,7 +13,7 @@ const defaultState = {
|
||||
|
||||
const formatMovie = (movie) => {
|
||||
movie.fetchingDetails = false;
|
||||
movie.fetchingSubtitles = false;
|
||||
movie.fetchingSubtitles = [];
|
||||
movie.torrents = formatTorrents(movie);
|
||||
movie.subtitles = formatSubtitles(movie.subtitles);
|
||||
return movie;
|
||||
@ -89,28 +89,28 @@ export default (state = defaultState, action) =>
|
||||
draft.lastFetchUrl = action.payload.url;
|
||||
break;
|
||||
|
||||
case "MOVIE_SUBTITLES_UPDATE_PENDING":
|
||||
draft.movies.get(action.payload.main.imdbId).fetchingSubtitles = true;
|
||||
if (
|
||||
draft.movies
|
||||
.get(action.payload.main.imdbId)
|
||||
.subtitles.get(action.payload.main.lang)
|
||||
) {
|
||||
draft.movies
|
||||
.get(action.payload.main.imdbId)
|
||||
.subtitles.get(action.payload.main.lang).searching = true;
|
||||
case "MOVIE_SUBTITLES_UPDATE_PENDING": {
|
||||
let imdbId = action.payload.main.imdbId;
|
||||
let lang = action.payload.main.lang;
|
||||
draft.movies.get(imdbId).fetchingSubtitles.push(lang);
|
||||
if (draft.movies.get(imdbId).subtitles.get(lang)) {
|
||||
draft.movies.get(imdbId).subtitles.get(lang).searching = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "MOVIE_SUBTITLES_UPDATE_FULFILLED":
|
||||
draft.movies.get(action.payload.main.imdbId).fetchingSubtitles = false;
|
||||
draft.movies
|
||||
.get(action.payload.main.imdbId)
|
||||
.subtitles.set(
|
||||
action.payload.response.data.lang,
|
||||
formatSubtitle(action.payload.response.data)
|
||||
);
|
||||
case "MOVIE_SUBTITLES_UPDATE_FULFILLED": {
|
||||
let imdbId = action.payload.main.imdbId;
|
||||
let lang = action.payload.main.lang;
|
||||
let data = action.payload.response.data;
|
||||
draft.movies.get(imdbId).fetchingSubtitles = draft.movies
|
||||
.get(imdbId)
|
||||
.fetchingSubtitles.filter((l) => l != lang);
|
||||
if (data) {
|
||||
draft.movies.get(imdbId).subtitles.set(lang, formatSubtitle(data));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "SELECT_MOVIE":
|
||||
draft.selectedImdbId = action.payload.imdbId;
|
||||
|
@ -15,7 +15,8 @@ const formatEpisode = (episode) => {
|
||||
|
||||
// Set the default fetching data
|
||||
episode.fetching = false;
|
||||
episode.fetchingSubtitles = false;
|
||||
// Holds the languages of the subtitles currently fetching
|
||||
episode.fetchingSubtitles = [];
|
||||
};
|
||||
|
||||
export default (state = defaultState, action) =>
|
||||
@ -100,36 +101,42 @@ export default (state = defaultState, action) =>
|
||||
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
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode).fetchingSubtitles = true;
|
||||
if (
|
||||
.get(season)
|
||||
.get(episode)
|
||||
.fetchingSubtitles.push(lang);
|
||||
if (draft.show.seasons.get(season).get(episode).subtitles.get(lang)) {
|
||||
draft.show.seasons
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode)
|
||||
.subtitles.get(action.payload.main.lang)
|
||||
) {
|
||||
draft.show.seasons
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode)
|
||||
.subtitles.get(action.payload.main.lang).searching = true;
|
||||
.get(season)
|
||||
.get(episode)
|
||||
.subtitles.get(lang).searching = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "EPISODE_SUBTITLES_UPDATE_FULFILLED": {
|
||||
let season = action.payload.main.season;
|
||||
let episode = action.payload.main.episode;
|
||||
let lang = action.payload.main.lang;
|
||||
let data = action.payload.response.data;
|
||||
draft.show.seasons.get(season).get(episode).fetchingSubtitles =
|
||||
draft.show.seasons
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode).fetchingSubtitles = false;
|
||||
.get(season)
|
||||
.get(episode)
|
||||
.fetchingSubtitles.filter((l) => l != lang);
|
||||
if (data) {
|
||||
draft.show.seasons
|
||||
.get(action.payload.main.season)
|
||||
.get(action.payload.main.episode)
|
||||
.subtitles.set(
|
||||
action.payload.main.lang,
|
||||
formatSubtitle(action.payload.response.data)
|
||||
);
|
||||
.get(season)
|
||||
.get(episode)
|
||||
.subtitles.set(lang, formatSubtitle(data));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
return draft;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user