Stuff stuff stuff #44
@ -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 {
|
||||||
|
sub := subtitles.Subtitle{Subtitle: s.Subtitle}
|
||||||
|
if !sub.Embedded {
|
||||||
subtitleURL, _ := m.client.DownloadURLWithToken(s)
|
subtitleURL, _ := m.client.DownloadURLWithToken(s)
|
||||||
movieToMarshal.Subtitles = append(movieToMarshal.Subtitles,
|
sub.URL = subtitleURL
|
||||||
subtitles.Subtitle{
|
sub.VVTFile = fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang)
|
||||||
Subtitle: s.Subtitle,
|
}
|
||||||
URL: subtitleURL,
|
movieToMarshal.Subtitles = append(movieToMarshal.Subtitles, sub)
|
||||||
VVTFile: fmt.Sprintf("/movies/%s/subtitles/%s", m.ImdbID, s.Lang),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
sub := subtitles.Subtitle{Subtitle: s.Subtitle}
|
||||||
|
if !sub.Embedded {
|
||||||
subtitleURL, _ := e.show.client.DownloadURLWithToken(s)
|
subtitleURL, _ := e.show.client.DownloadURLWithToken(s)
|
||||||
subs = append(subs, subtitles.Subtitle{
|
sub.URL = subtitleURL
|
||||||
Subtitle: &polochon.Subtitle{
|
sub.VVTFile = fmt.Sprintf(
|
||||||
File: polochon.File{Size: s.Size},
|
"/shows/%s/seasons/%d/episodes/%d/subtitles/%s",
|
||||||
Lang: s.Lang,
|
e.ShowImdbID, e.Season, e.Episode, s.Lang)
|
||||||
},
|
}
|
||||||
URL: subtitleURL,
|
subs = append(subs, sub)
|
||||||
VVTFile: fmt.Sprintf("/shows/%s/seasons/%d/episodes/%d/subtitles/%s", e.ShowImdbID, e.Season, e.Episode, s.Lang),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
{!embedded && (
|
||||||
<div
|
<div
|
||||||
onClick={handleRefresh}
|
onClick={handleRefresh}
|
||||||
className={`clickable fa ${
|
className={`clickable fa ${
|
||||||
subtitle.searching ? "fa-spin" : ""
|
subtitle.searching ? "fa-spin" : ""
|
||||||
} fa-refresh`}
|
} fa-refresh`}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Dropdown.Item>
|
</Dropdown.Item>
|
||||||
);
|
);
|
||||||
|
@ -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;
|
||||||
|
@ -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": {
|
||||||
|
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
|
draft.show.seasons
|
||||||
.get(action.payload.main.season)
|
.get(season)
|
||||||
.get(action.payload.main.episode).fetchingSubtitles = false;
|
.get(episode)
|
||||||
|
.fetchingSubtitles.filter((l) => l != lang);
|
||||||
|
if (data) {
|
||||||
draft.show.seasons
|
draft.show.seasons
|
||||||
.get(action.payload.main.season)
|
.get(season)
|
||||||
.get(action.payload.main.episode)
|
.get(episode)
|
||||||
.subtitles.set(
|
.subtitles.set(lang, formatSubtitle(data));
|
||||||
action.payload.main.lang,
|
}
|
||||||
formatSubtitle(action.payload.response.data)
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return draft;
|
return draft;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user