mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-10 07:25:48 +01:00
✨ Add Jellyseerr full support
This commit is contained in:
@@ -254,6 +254,7 @@ export function AddAppShelfItemForm(props: { setOpened: (b: boolean) => void } &
|
|||||||
form.values.type === 'Radarr' ||
|
form.values.type === 'Radarr' ||
|
||||||
form.values.type === 'Lidarr' ||
|
form.values.type === 'Lidarr' ||
|
||||||
form.values.type === 'Overseerr' ||
|
form.values.type === 'Overseerr' ||
|
||||||
|
form.values.type === 'Jellyseerr' ||
|
||||||
form.values.type === 'Readarr') && (
|
form.values.type === 'Readarr') && (
|
||||||
<>
|
<>
|
||||||
<TextInput
|
<TextInput
|
||||||
|
|||||||
@@ -186,12 +186,12 @@ export function MediaDisplay({ media }: { media: IMedia }) {
|
|||||||
</Text>
|
</Text>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Group grow>
|
<Group grow>
|
||||||
{media.plexUrl && (
|
{(media.plexUrl || media.mediaUrl) && (
|
||||||
<Button
|
<Button
|
||||||
component="a"
|
component="a"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
variant="outline"
|
variant="outline"
|
||||||
href={media.plexUrl}
|
href={media.plexUrl ?? media.mediaUrl}
|
||||||
size="sm"
|
size="sm"
|
||||||
rightIcon={<IconPlayerPlay size={15} />}
|
rightIcon={<IconPlayerPlay size={15} />}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { IModule } from '../ModuleTypes';
|
|||||||
|
|
||||||
export const OverseerrModule: IModule = {
|
export const OverseerrModule: IModule = {
|
||||||
title: 'Overseerr',
|
title: 'Overseerr',
|
||||||
description: 'Allows you to search and add media from Overseerr',
|
description: 'Allows you to search and add media from Overseerr/Jellyseerr',
|
||||||
icon: IconEyeglass,
|
icon: IconEyeglass,
|
||||||
component: OverseerrMediaDisplay,
|
component: OverseerrMediaDisplay,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export default function SearchBar(props: any) {
|
|||||||
const { config } = useConfig();
|
const { config } = useConfig();
|
||||||
const isModuleEnabled = config.modules?.[SearchModule.title]?.enabled ?? false;
|
const isModuleEnabled = config.modules?.[SearchModule.title]?.enabled ?? false;
|
||||||
const isOverseerrEnabled = config.modules?.[OverseerrModule.title]?.enabled ?? false;
|
const isOverseerrEnabled = config.modules?.[OverseerrModule.title]?.enabled ?? false;
|
||||||
const OverseerrService = config.services.find((service) => service.type === 'Overseerr');
|
const OverseerrService = config.services.find((service) => service.type === 'Overseerr' || service.type === 'Jellyseerr');
|
||||||
const queryUrl = config.settings.searchUrl ?? 'https://www.google.com/search?q=';
|
const queryUrl = config.settings.searchUrl ?? 'https://www.google.com/search?q=';
|
||||||
|
|
||||||
const [OverseerrResults, setOverseerrResults] = useState<any[]>([]);
|
const [OverseerrResults, setOverseerrResults] = useState<any[]>([]);
|
||||||
@@ -61,7 +61,7 @@ export default function SearchBar(props: any) {
|
|||||||
if (OverseerrService === undefined && isOverseerrEnabled) {
|
if (OverseerrService === undefined && isOverseerrEnabled) {
|
||||||
showNotification({
|
showNotification({
|
||||||
title: 'Overseerr integration',
|
title: 'Overseerr integration',
|
||||||
message: 'Module enabled but no service is configured with the type "Overseerr"',
|
message: 'Module enabled but no service is configured with the type "Overseerr" / "Jellyseerr"',
|
||||||
color: 'red',
|
color: 'red',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
const { id, type } = req.query as { id: string; type: string };
|
const { id, type } = req.query as { id: string; type: string };
|
||||||
const configName = getCookie('config-name', { req });
|
const configName = getCookie('config-name', { req });
|
||||||
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
||||||
const service = config.services.find((service) => service.type === 'Overseerr');
|
const service = config.services.find((service) => service.type === 'Overseerr' || service.type === 'Jellyseerr');
|
||||||
if (!id) {
|
if (!id) {
|
||||||
return res.status(400).json({ error: 'No id provided' });
|
return res.status(400).json({ error: 'No id provided' });
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ async function Post(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
const { seasons, type } = req.body as { seasons?: number[]; type: MediaType };
|
const { seasons, type } = req.body as { seasons?: number[]; type: MediaType };
|
||||||
const configName = getCookie('config-name', { req });
|
const configName = getCookie('config-name', { req });
|
||||||
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
||||||
const service = config.services.find((service) => service.type === 'Overseerr');
|
const service = config.services.find((service) => service.type === 'Overseerr' || service.type === 'Jellyseerr');
|
||||||
if (!id) {
|
if (!id) {
|
||||||
return res.status(400).json({ error: 'No id provided' });
|
return res.status(400).json({ error: 'No id provided' });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) {
|
|||||||
const configName = getCookie('config-name', { req });
|
const configName = getCookie('config-name', { req });
|
||||||
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
const { config }: { config: Config } = getConfig(configName?.toString() ?? 'default').props;
|
||||||
const { query } = req.query;
|
const { query } = req.query;
|
||||||
const service = config.services.find((service) => service.type === 'Overseerr');
|
const service = config.services.find((service) => service.type === 'Overseerr' || service.type === 'Jellyseerr');
|
||||||
// If query is an empty string, return an empty array
|
// If query is an empty string, return an empty array
|
||||||
if (query === '' || query === undefined) {
|
if (query === '' || query === undefined) {
|
||||||
return res.status(200).json([]);
|
return res.status(200).json([]);
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ export const ServiceTypeList = [
|
|||||||
'Sonarr',
|
'Sonarr',
|
||||||
'Transmission',
|
'Transmission',
|
||||||
'Overseerr',
|
'Overseerr',
|
||||||
|
'Jellyseerr',
|
||||||
];
|
];
|
||||||
export type ServiceType =
|
export type ServiceType =
|
||||||
| 'Other'
|
| 'Other'
|
||||||
@@ -84,6 +85,7 @@ export type ServiceType =
|
|||||||
| 'Readarr'
|
| 'Readarr'
|
||||||
| 'Sonarr'
|
| 'Sonarr'
|
||||||
| 'Overseerr'
|
| 'Overseerr'
|
||||||
|
| 'Jellyseerr'
|
||||||
| 'Transmission';
|
| 'Transmission';
|
||||||
|
|
||||||
export function tryMatchPort(name: string | undefined, form?: any) {
|
export function tryMatchPort(name: string | undefined, form?: any) {
|
||||||
|
|||||||
Reference in New Issue
Block a user