From feffccaca894d16aef75ec8583f4361037b85239 Mon Sep 17 00:00:00 2001 From: TheCatLady <52870424+TheCatLady@users.noreply.github.com> Date: Sat, 12 Mar 2022 17:45:27 -0500 Subject: [PATCH] feat: add 'Hide Requested Media' setting --- overseerr-api.yml | 3 +++ server/interfaces/api/settingsInterfaces.ts | 1 + server/lib/settings.ts | 4 ++++ src/components/MediaSlider/index.tsx | 14 +++++++---- src/components/Search/index.tsx | 2 +- src/components/Settings/SettingsMain.tsx | 26 +++++++++++++++++++++ src/context/SettingsContext.tsx | 1 + src/hooks/useDiscover.ts | 17 ++++++++++---- src/i18n/locale/en.json | 1 + src/pages/_app.tsx | 1 + 10 files changed, 60 insertions(+), 10 deletions(-) diff --git a/overseerr-api.yml b/overseerr-api.yml index 25a24667..688179be 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -121,6 +121,9 @@ components: hideAvailable: type: boolean example: false + hideRequested: + type: boolean + example: false partialRequestsEnabled: type: boolean example: false diff --git a/server/interfaces/api/settingsInterfaces.ts b/server/interfaces/api/settingsInterfaces.ts index 0e5ab45a..1689e2aa 100644 --- a/server/interfaces/api/settingsInterfaces.ts +++ b/server/interfaces/api/settingsInterfaces.ts @@ -25,6 +25,7 @@ export interface PublicSettingsResponse { applicationTitle: string; applicationUrl: string; hideAvailable: boolean; + hideRequested: boolean; localLogin: boolean; movie4kEnabled: boolean; series4kEnabled: boolean; diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 5a2d2b8a..2e899b62 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -94,6 +94,7 @@ export interface MainSettings { tv: Quota; }; hideAvailable: boolean; + hideRequested: boolean; localLogin: boolean; newPlexLogin: boolean; region: string; @@ -111,6 +112,7 @@ interface FullPublicSettings extends PublicSettings { applicationTitle: string; applicationUrl: string; hideAvailable: boolean; + hideRequested: boolean; localLogin: boolean; movie4kEnabled: boolean; series4kEnabled: boolean; @@ -287,6 +289,7 @@ class Settings { tv: {}, }, hideAvailable: false, + hideRequested: false, localLogin: true, newPlexLogin: true, region: '', @@ -479,6 +482,7 @@ class Settings { applicationTitle: this.data.main.applicationTitle, applicationUrl: this.data.main.applicationUrl, hideAvailable: this.data.main.hideAvailable, + hideRequested: this.data.main.hideRequested, localLogin: this.data.main.localLogin, movie4kEnabled: this.data.radarr.some( (radarr) => radarr.is4k && radarr.isDefault diff --git a/src/components/MediaSlider/index.tsx b/src/components/MediaSlider/index.tsx index 9a9bc054..c01993af 100644 --- a/src/components/MediaSlider/index.tsx +++ b/src/components/MediaSlider/index.tsx @@ -55,12 +55,18 @@ const MediaSlider = ({ [] as (MovieResult | TvResult | PersonResult)[] ); - if (settings.currentSettings.hideAvailable) { + if ( + settings.currentSettings.hideAvailable || + settings.currentSettings.hideRequested + ) { titles = titles.filter( (i) => - (i.mediaType === 'movie' || i.mediaType === 'tv') && - i.mediaInfo?.status !== MediaStatus.AVAILABLE && - i.mediaInfo?.status !== MediaStatus.PARTIALLY_AVAILABLE + i.mediaType === 'person' || + (i.mediaInfo?.status !== MediaStatus.AVAILABLE && + i.mediaInfo?.status !== MediaStatus.PARTIALLY_AVAILABLE && + (!settings.currentSettings.hideRequested || + (i.mediaInfo?.status !== MediaStatus.PENDING && + i.mediaInfo?.status !== MediaStatus.PROCESSING))) ); } diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 22f143f2..720489c1 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -33,7 +33,7 @@ const Search = () => { { query: router.query.query, }, - { hideAvailable: false } + { hideAvailableOrRequested: true } ); if (error) { diff --git a/src/components/Settings/SettingsMain.tsx b/src/components/Settings/SettingsMain.tsx index 3ac7b09b..69c9fb54 100644 --- a/src/components/Settings/SettingsMain.tsx +++ b/src/components/Settings/SettingsMain.tsx @@ -40,6 +40,7 @@ const messages = defineMessages({ toastSettingsSuccess: 'Settings saved successfully!', toastSettingsFailure: 'Something went wrong while saving settings.', hideAvailable: 'Hide Available Media', + hideRequested: 'Hide Requested Media', csrfProtection: 'Enable CSRF Protection', csrfProtectionTip: 'Set external API access to read-only (requires HTTPS)', csrfProtectionHoverTip: @@ -128,6 +129,7 @@ const SettingsMain = () => { applicationUrl: data?.applicationUrl, csrfProtection: data?.csrfProtection, hideAvailable: data?.hideAvailable, + hideRequested: data?.hideRequested, locale: data?.locale ?? 'en', region: data?.region, originalLanguage: data?.originalLanguage, @@ -144,6 +146,7 @@ const SettingsMain = () => { applicationUrl: values.applicationUrl, csrfProtection: values.csrfProtection, hideAvailable: values.hideAvailable, + hideRequested: values.hideRequested, locale: values.locale, region: values.region, originalLanguage: values.originalLanguage, @@ -398,12 +401,35 @@ const SettingsMain = () => { type="checkbox" id="hideAvailable" name="hideAvailable" + checked={values.hideAvailable || values.hideRequested} + disabled={values.hideRequested} + className={values.hideRequested ? 'opacity-50' : ''} onChange={() => { setFieldValue('hideAvailable', !values.hideAvailable); }} /> +
+ +
+ { + setFieldValue('hideRequested', !values.hideRequested); + }} + /> +
+