diff --git a/public/locales/en/modules/media-requests-list.json b/public/locales/en/modules/media-requests-list.json index f372514bb..a1a2b6ab2 100644 --- a/public/locales/en/modules/media-requests-list.json +++ b/public/locales/en/modules/media-requests-list.json @@ -3,7 +3,10 @@ "name": "Media Requests", "description": "See a list of all media requests from your Overseerr or Jellyseerr instance", "settings": { - "title": "Media requests list" + "title": "Media requests list", + "replaceLinksWithExternalHost": { + "label": "Replace links with external host" + } } }, "noRequests": "No requests found. Please ensure that you've configured your apps correctly.", diff --git a/src/pages/api/modules/media-requests/index.ts b/src/pages/api/modules/media-requests/index.ts index 567b2f422..5cd58c167 100644 --- a/src/pages/api/modules/media-requests/index.ts +++ b/src/pages/api/modules/media-requests/index.ts @@ -5,6 +5,7 @@ import { getConfig } from '../../../../tools/config/getConfig'; import { MediaRequest } from '../../../../widgets/media-requests/media-request-types'; import { ConfigAppType } from '../../../../types/app'; +import { MediaRequestListWidget } from '../../../../widgets/media-requests/MediaRequestListTile'; const Get = async (request: NextApiRequest, response: NextApiResponse) => { const configName = getCookie('config-name', { req: request }); @@ -24,6 +25,15 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { }) .then(async (response) => { const body = (await response.json()) as OverseerrResponse; + const mediaWidget = config.widgets.find( + (x) => x.type === 'media-requests-list') as MediaRequestListWidget | undefined; + if (!mediaWidget) { + Consola.log('No media-requests-list found'); + return Promise.resolve([]); + } + const appUrl = mediaWidget.properties.replaceLinksWithExternalHost + ? app.behaviour.externalUrl + : app.url; const requests = await Promise.all( body.results.map(async (item): Promise => { @@ -42,12 +52,12 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { name: genericItem.name, userName: item.requestedBy.displayName, userProfilePicture: constructAvatarUrl(app, item), - userLink: `${app.url}/users/${item.requestedBy.id}`, + userLink: `${appUrl}/users/${item.requestedBy.id}`, airDate: genericItem.airDate, status: item.status, backdropPath: `https://image.tmdb.org/t/p/original/${genericItem.backdropPath}`, posterPath: `https://image.tmdb.org/t/p/w600_and_h900_bestv2/${genericItem.posterPath}`, - href: `${app.behaviour.externalUrl}/movie/${item.media.tmdbId}`, + href: `${appUrl}/movie/${item.media.tmdbId}`, }; }) ); diff --git a/src/widgets/media-requests/MediaRequestListTile.tsx b/src/widgets/media-requests/MediaRequestListTile.tsx index c9f15e1b0..493091068 100644 --- a/src/widgets/media-requests/MediaRequestListTile.tsx +++ b/src/widgets/media-requests/MediaRequestListTile.tsx @@ -24,7 +24,12 @@ import { MediaRequest, MediaRequestStatus } from './media-request-types'; const definition = defineWidget({ id: 'media-requests-list', icon: IconGitPullRequest, - options: {}, + options: { + replaceLinksWithExternalHost: { + type: 'switch', + defaultValue: true, + }, + }, component: MediaRequestListTile, gridstack: { minWidth: 3,