diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index b731b979f..5136f17dc 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -12,6 +12,7 @@ export interface PublicSettingsResponse { localLogin: boolean; movie4kEnabled: boolean; series4kEnabled: boolean; + region: string; } export interface CacheItem { diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 52663bda9..02320e00f 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -84,6 +84,7 @@ interface FullPublicSettings extends PublicSettings { localLogin: boolean; movie4kEnabled: boolean; series4kEnabled: boolean; + region: string; } export interface NotificationAgentConfig { @@ -335,6 +336,7 @@ class Settings { series4kEnabled: this.data.sonarr.some( (sonarr) => sonarr.is4k && sonarr.isDefault ), + region: this.data.main.region, }; } diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 58b748010..91cea4886 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -82,17 +82,19 @@ interface MovieDetailsProps { const MovieDetails: React.FC = ({ movie }) => { const settings = useSettings(); - const { hasPermission } = useUser(); + const { user, hasPermission } = useUser(); const router = useRouter(); const intl = useIntl(); const { locale } = useContext(LanguageContext); const [showManager, setShowManager] = useState(false); + const { data, error, revalidate } = useSWR( `/api/v1/movie/${router.query.movieId}?language=${locale}`, { initialData: movie, } ); + const { data: ratingData } = useSWR( `/api/v1/movie/${router.query.movieId}/ratings` ); @@ -156,17 +158,22 @@ const MovieDetails: React.FC = ({ movie }) => { revalidate(); }; + const region = user?.settings?.region + ? user.settings.region + : settings.currentSettings.region + ? settings.currentSettings.region + : 'US'; const movieAttributes: React.ReactNode[] = []; if ( data.releases.results.length && - (data.releases.results.find((r) => r.iso_3166_1 === 'US')?.release_dates[0] - .certification || + (data.releases.results.find((r) => r.iso_3166_1 === region) + ?.release_dates[0].certification || data.releases.results[0].release_dates[0].certification) ) { movieAttributes.push( - {data.releases.results.find((r) => r.iso_3166_1 === 'US') + {data.releases.results.find((r) => r.iso_3166_1 === region) ?.release_dates[0].certification || data.releases.results[0].release_dates[0].certification} diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index 5e3ff0c3d..2139f0e2d 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -80,12 +80,13 @@ interface TvDetailsProps { const TvDetails: React.FC = ({ tv }) => { const settings = useSettings(); - const { hasPermission } = useUser(); + const { user, hasPermission } = useUser(); const router = useRouter(); const intl = useIntl(); const { locale } = useContext(LanguageContext); const [showRequestModal, setShowRequestModal] = useState(false); const [showManager, setShowManager] = useState(false); + const { data, error, revalidate } = useSWR( `/api/v1/tv/${router.query.tvId}?language=${locale}`, { @@ -156,17 +157,22 @@ const TvDetails: React.FC = ({ tv }) => { revalidate(); }; + const region = user?.settings?.region + ? user.settings.region + : settings.currentSettings.region + ? settings.currentSettings.region + : 'US'; const seriesAttributes: React.ReactNode[] = []; if ( data.contentRatings.results.length && data.contentRatings.results.find( - (r) => r.iso_3166_1 === 'US' || data.contentRatings.results[0].rating + (r) => r.iso_3166_1 === region || data.contentRatings.results[0].rating ) ) { seriesAttributes.push( - {data.contentRatings.results.find((r) => r.iso_3166_1 === 'US') + {data.contentRatings.results.find((r) => r.iso_3166_1 === region) ?.rating || data.contentRatings.results[0].rating} ); diff --git a/src/context/SettingsContext.tsx b/src/context/SettingsContext.tsx index 45bb49098..7e709f77a 100644 --- a/src/context/SettingsContext.tsx +++ b/src/context/SettingsContext.tsx @@ -13,6 +13,7 @@ const defaultSettings = { localLogin: false, movie4kEnabled: false, series4kEnabled: false, + region: '', }; export const SettingsContext = React.createContext({ diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts index 755bd3095..570b394b9 100644 --- a/src/hooks/useUser.ts +++ b/src/hooks/useUser.ts @@ -21,6 +21,14 @@ export interface User { createdAt: Date; updatedAt: Date; requestCount: number; + settings?: UserSettings; +} + +export interface UserSettings { + enableNotifications: boolean; + discordId?: string; + region?: string; + originalLanguage?: string; } interface UserHookResponse { diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 246817c6b..81aa6efde 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -144,6 +144,7 @@ CoreApp.getInitialProps = async (initialProps) => { movie4kEnabled: false, series4kEnabled: false, localLogin: true, + region: '', }; let locale = 'en';