From c117b37cd9fae5d148ad959cb02006e156abac8c Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Wed, 1 Jun 2022 14:48:05 +0200 Subject: [PATCH 1/6] feat(tv): tv seasons tv seasons --- overseerr-api.yml | 38 ++++++++++++++++++++++++++++++ server/api/themoviedb/index.ts | 27 +++++++++++++++++++++ server/models/Tv.ts | 8 +++++++ server/routes/tv.ts | 29 ++++++++++++++++++++++- src/components/TvDetails/index.tsx | 8 +++++++ 5 files changed, 109 insertions(+), 1 deletion(-) diff --git a/overseerr-api.yml b/overseerr-api.yml index 551f7dd91..c6611f79a 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -1031,6 +1031,13 @@ components: type: array items: $ref: '#/components/schemas/WatchProviders' + TvSeasons: + type: object + properties: + seasons: + type: array + items: + $ref: '#/components/schemas/Season' MediaRequest: type: object properties: @@ -5082,6 +5089,37 @@ paths: application/json: schema: $ref: '#/components/schemas/TvDetails' + /tv/{tvId}/seasons: + get: + summary: Get TV seasons + description: Returns TV seasons based on the provided tvId in a JSON object. + tags: + - tv + parameters: + - in: path + name: tvId + required: true + schema: + type: number + example: 76479 + - in: query + name: page + schema: + type: number + example: 1 + default: 1 + - in: query + name: language + schema: + type: string + example: en + responses: + '200': + description: TV seasons + content: + application/json: + schema: + $ref: '#/components/schemas/TvSeasons' /tv/{tvId}/season/{seasonId}: get: summary: Get season details and episode list diff --git a/server/api/themoviedb/index.ts b/server/api/themoviedb/index.ts index b5060c030..bef79ce50 100644 --- a/server/api/themoviedb/index.ts +++ b/server/api/themoviedb/index.ts @@ -18,6 +18,7 @@ import { TmdbSearchTvResponse, TmdbSeasonWithEpisodes, TmdbTvDetails, + TmdbTvSeasonResult, TmdbUpcomingMoviesResponse, } from './interfaces'; @@ -271,6 +272,32 @@ class TheMovieDb extends ExternalAPI { } }; + public getTvSeasons = async ({ + tvId, + page = 1, + language = 'en', + }: { + tvId: number; + page: number; + language?: string; + }): Promise => { + try { + const data = await this.get( + `/tv/${tvId}`, + { + params: { + page, + language, + }, + }, + 43200 + ); + return data.seasons; + } catch (e) { + throw new Error(`[TMDb] Failed to fetch TV show seasons: ${e.message}`); + } + }; + public getTvSeason = async ({ tvId, seasonNumber, diff --git a/server/models/Tv.ts b/server/models/Tv.ts index b596b1d2b..8599ac342 100644 --- a/server/models/Tv.ts +++ b/server/models/Tv.ts @@ -48,6 +48,10 @@ interface Season { seasonNumber: number; } +export interface TvSeasons { + seasons: Season[]; +} + export interface SeasonWithEpisodes extends Season { episodes: Episode[]; externalIds: ExternalIds; @@ -223,3 +227,7 @@ export const mapTvDetails = ( mediaInfo: media, watchProviders: mapWatchProviders(show['watch/providers']?.results ?? {}), }); + +export const mapTvSeasons = (seasons: TmdbTvSeasonResult[]): TvSeasons => ({ + seasons: seasons.map(mapSeasonResult), +}); diff --git a/server/routes/tv.ts b/server/routes/tv.ts index 201e7afe3..7083aa9b3 100644 --- a/server/routes/tv.ts +++ b/server/routes/tv.ts @@ -5,7 +5,11 @@ import { MediaType } from '../constants/media'; import Media from '../entity/Media'; import logger from '../logger'; import { mapTvResult } from '../models/Search'; -import { mapSeasonWithEpisodes, mapTvDetails } from '../models/Tv'; +import { + mapSeasonWithEpisodes, + mapTvDetails, + mapTvSeasons, +} from '../models/Tv'; const tvRoutes = Router(); @@ -33,6 +37,29 @@ tvRoutes.get('/:id', async (req, res, next) => { } }); +tvRoutes.get('/:id/seasons', async (req, res, next) => { + const tmdb = new TheMovieDb(); + try { + const seasons = await tmdb.getTvSeasons({ + tvId: Number(req.params.id), + page: Number(req.query.page), + language: req.locale ?? (req.query.language as string), + }); + + return res.status(200).json(mapTvSeasons(seasons)); + } catch (e) { + logger.debug('Something went wrong retrieving seasons', { + label: 'API', + errorMessage: e.message, + tvId: req.params.id, + }); + return next({ + status: 500, + message: 'Unable to retrieve seasons.', + }); + } +}); + tvRoutes.get('/:id/season/:seasonNumber', async (req, res, next) => { const tmdb = new TheMovieDb(); diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index a4d6bcef1..f11eabb8e 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -672,6 +672,14 @@ const TvDetails: React.FC = ({ tv }) => { + + {data.credits.cast.length > 0 && ( <>
From 30c48f16ca0a74e7551b533bd75bc43304f946b1 Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Sun, 5 Jun 2022 17:46:26 +0200 Subject: [PATCH 2/6] feat(user email setting): added field to save user email fix #122 --- .idea/.gitignore | 8 +++ .idea/codeStyles/Project.xml | 67 +++++++++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 ++ .idea/dataSources.xml | 12 ++++ .idea/jellyseerr.iml | 12 ++++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ .../interfaces/api/userSettingsInterfaces.ts | 1 + server/routes/user/usersettings.ts | 1 + 9 files changed, 120 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/dataSources.xml create mode 100644 .idea/jellyseerr.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 000000000..ff5d00b02 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..79ee123c2 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 000000000..a12bac1c9 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:$PROJECT_DIR$/config/db/db.sqlite3 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/jellyseerr.iml b/.idea/jellyseerr.iml new file mode 100644 index 000000000..0c8867d7e --- /dev/null +++ b/.idea/jellyseerr.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..bb19e753c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/server/interfaces/api/userSettingsInterfaces.ts b/server/interfaces/api/userSettingsInterfaces.ts index a3e132d65..d0a0ff9f8 100644 --- a/server/interfaces/api/userSettingsInterfaces.ts +++ b/server/interfaces/api/userSettingsInterfaces.ts @@ -2,6 +2,7 @@ import { NotificationAgentKey } from '../../lib/settings'; export interface UserSettingsGeneralResponse { username?: string; + email?: string; discordId?: string; locale?: string; region?: string; diff --git a/server/routes/user/usersettings.ts b/server/routes/user/usersettings.ts index 0c53c94a0..10555821e 100644 --- a/server/routes/user/usersettings.ts +++ b/server/routes/user/usersettings.ts @@ -51,6 +51,7 @@ userSettingsRoutes.get<{ id: string }, UserSettingsGeneralResponse>( return res.status(200).json({ username: user.username, + email: user.email, discordId: user.settings?.discordId, locale: user.settings?.locale, region: user.settings?.region, From a8bc0c068b305710a224fa56a3725cc7e0758eb7 Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Sun, 5 Jun 2022 18:11:20 +0200 Subject: [PATCH 3/6] feat: email #122 --- server/routes/user/usersettings.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/routes/user/usersettings.ts b/server/routes/user/usersettings.ts index 10555821e..a05311a22 100644 --- a/server/routes/user/usersettings.ts +++ b/server/routes/user/usersettings.ts @@ -121,6 +121,7 @@ userSettingsRoutes.post< user.settings.locale = req.body.locale; user.settings.region = req.body.region; user.settings.originalLanguage = req.body.originalLanguage; + user.email = req.body.email ?? user.email; } await userRepository.save(user); @@ -131,6 +132,7 @@ userSettingsRoutes.post< locale: user.settings.locale, region: user.settings.region, originalLanguage: user.settings.originalLanguage, + email: user.email, }); } catch (e) { next({ status: 500, message: e.message }); From b22f20b6fa5f68398850ccbf9b6e1cc233b3c8f4 Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Sun, 5 Jun 2022 18:25:15 +0200 Subject: [PATCH 4/6] feat(user settings): added email field to user profiel settings #122 --- .../UserGeneralSettings/index.tsx | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx b/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx index ba01428f9..5c6e4d2d0 100644 --- a/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx +++ b/src/components/UserProfile/UserSettings/UserGeneralSettings/index.tsx @@ -30,6 +30,7 @@ const messages = defineMessages({ general: 'General', generalsettings: 'General Settings', displayName: 'Display Name', + email: 'Email', save: 'Save Changes', saving: 'Saving…', mediaServerUser: '{mediaServerName} User', @@ -121,6 +122,7 @@ const UserGeneralSettings: React.FC = () => { { try { await axios.post(`/api/v1/user/${user?.id}/settings/main`, { username: values.displayName, + email: values.email, discordId: values.discordId, locale: values.locale, region: values.region, @@ -245,6 +248,24 @@ const UserGeneralSettings: React.FC = () => { )}
+
+ +
+
+ +
+ {errors.email && touched.email && ( +
{errors.email}
+ )} +
+
- - {data.credits.cast.length > 0 && ( <>
From 23779f4c7b1ba91bc2a2963302c00956be3678fb Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Sun, 5 Jun 2022 18:43:52 +0200 Subject: [PATCH 6/6] style: removed .idea folder --- .idea/.gitignore | 8 ---- .idea/codeStyles/Project.xml | 67 ---------------------------- .idea/codeStyles/codeStyleConfig.xml | 5 --- .idea/dataSources.xml | 12 ----- .idea/jellyseerr.iml | 12 ----- .idea/modules.xml | 8 ---- .idea/vcs.xml | 6 --- 7 files changed, 118 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/dataSources.xml delete mode 100644 .idea/jellyseerr.iml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81b..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index ff5d00b02..000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c2..000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index a12bac1c9..000000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - sqlite.xerial - true - org.sqlite.JDBC - jdbc:sqlite:$PROJECT_DIR$/config/db/db.sqlite3 - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/.idea/jellyseerr.iml b/.idea/jellyseerr.iml deleted file mode 100644 index 0c8867d7e..000000000 --- a/.idea/jellyseerr.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index bb19e753c..000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f4..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file