From be91a3f20a57f6099bf3c55ef51d13f062ee4a90 Mon Sep 17 00:00:00 2001 From: TOomaAh Date: Mon, 20 Jan 2025 20:57:13 +0100 Subject: [PATCH] fix(tvdb): rename tvdb to medatada --- jellyseerr-api.yml | 44 +++++-- server/api/metadata.ts | 7 +- server/api/tvdb/index.ts | 4 +- server/lib/settings/index.ts | 32 ++++- server/routes/settings/index.ts | 4 +- server/routes/settings/metadata.ts | 32 +++-- src/components/Settings/SettingsMetadata.tsx | 121 ++++++++++++++----- 7 files changed, 168 insertions(+), 76 deletions(-) diff --git a/jellyseerr-api.yml b/jellyseerr-api.yml index 88740f1b2..e59d4995d 100644 --- a/jellyseerr-api.yml +++ b/jellyseerr-api.yml @@ -519,12 +519,32 @@ components: serverID: type: string readOnly: true - TvdbSettings: + MetadataSettings: type: object properties: - use: - type: boolean - example: true + settings: + type: object + properties: + tv: + type: string + enum: [tvdb, tmdb] + example: 'tvdb' + anime: + type: string + enum: [tvdb, tmdb] + example: 'tvdb' + providers: + type: object + properties: + tvdb: + type: object + properties: + apiKey: + type: string + example: '123456789' + pin: + type: string + example: '1234' TautulliSettings: type: object properties: @@ -2574,10 +2594,10 @@ paths: type: string thumb: type: string - /settings/tvdb: + /settings/metadatas: get: - summary: Get TVDB settings - description: Retrieves current TVDB settings. + summary: Get Metadata settings + description: Retrieves current Metadata settings. tags: - settings responses: @@ -2586,10 +2606,10 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TvdbSettings' + $ref: '#/components/schemas/MetadataSettings' put: - summary: Update TVDB settings - description: Updates TVDB settings with the provided values. + summary: Update Metadata settings + description: Updates Metadata settings with the provided values. tags: - settings requestBody: @@ -2597,14 +2617,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TvdbSettings' + $ref: '#/components/schemas/MetadataSettings' responses: '200': description: 'Values were successfully updated' content: application/json: schema: - $ref: '#/components/schemas/TvdbSettings' + $ref: '#/components/schemas/MetadataSettings' /settings/tvdb/test: post: summary: Test TVDB configuration diff --git a/server/api/metadata.ts b/server/api/metadata.ts index ab5df3dcf..b9e33858a 100644 --- a/server/api/metadata.ts +++ b/server/api/metadata.ts @@ -14,16 +14,13 @@ export const getMetadataProvider = async ( return new TheMovieDb(); } - if ( - mediaType == 'tv' && - settings.metadataSettings.tvShow == IndexerType.TVDB - ) { + if (mediaType == 'tv' && settings.metadataType.tv == IndexerType.TVDB) { return await Tvdb.getInstance(); } if ( mediaType == 'anime' && - settings.metadataSettings.anime == IndexerType.TVDB + settings.metadataType.anime == IndexerType.TVDB ) { return await Tvdb.getInstance(); } diff --git a/server/api/tvdb/index.ts b/server/api/tvdb/index.ts index 0ff79bcdb..ffcab177b 100644 --- a/server/api/tvdb/index.ts +++ b/server/api/tvdb/index.ts @@ -87,9 +87,9 @@ class Tvdb extends ExternalAPI implements TvShowIndexer { return this.instance; } - public async test(): Promise { + public async test(): Promise { try { - return await this.get('/en/445009', {}); + await this.login(); } catch (error) { this.handleError('Login failed', error); throw error; diff --git a/server/lib/settings/index.ts b/server/lib/settings/index.ts index 8f8ce2be0..c44810c0e 100644 --- a/server/lib/settings/index.ts +++ b/server/lib/settings/index.ts @@ -106,8 +106,8 @@ export enum IndexerType { } export interface MetadataSettings { - tvShow: IndexerType; - anime: IndexerType; + settings: MetadataTypeSettings; + providers: ProviderSettings; } export interface TvdbSettings { @@ -115,6 +115,14 @@ export interface TvdbSettings { pin?: string; } +export interface ProviderSettings { + tvdb: TvdbSettings; +} +export interface MetadataTypeSettings { + tv: IndexerType; + anime: IndexerType; +} + export interface ProxySettings { enabled: boolean; hostname: string; @@ -428,8 +436,16 @@ class Settings { }, tautulli: {}, metadataSettings: { - tvShow: IndexerType.TMDB, - anime: IndexerType.TVDB, + settings: { + tv: IndexerType.TMDB, + anime: IndexerType.TVDB, + }, + providers: { + tvdb: { + apiKey: '', + pin: '', + }, + }, }, tvdb: { apiKey: '', @@ -645,6 +661,14 @@ class Settings { this.data.tvdb = data; } + get metadataType(): MetadataTypeSettings { + return this.data.metadataSettings.settings; + } + + set metadataType(data: MetadataTypeSettings) { + this.data.metadataSettings.settings = data; + } + get radarr(): RadarrSettings[] { return this.data.radarr; } diff --git a/server/routes/settings/index.ts b/server/routes/settings/index.ts index 96e6a7ee9..683539680 100644 --- a/server/routes/settings/index.ts +++ b/server/routes/settings/index.ts @@ -39,7 +39,7 @@ import { rescheduleJob } from 'node-schedule'; import path from 'path'; import semver from 'semver'; import { URL } from 'url'; -import tvdbRoutes from './metadata'; +import metadataRoutes from './metadata'; import notificationRoutes from './notifications'; import radarrRoutes from './radarr'; import sonarrRoutes from './sonarr'; @@ -50,7 +50,7 @@ settingsRoutes.use('/notifications', notificationRoutes); settingsRoutes.use('/radarr', radarrRoutes); settingsRoutes.use('/sonarr', sonarrRoutes); settingsRoutes.use('/discover', discoverSettingRoutes); -settingsRoutes.use('/tvdb', tvdbRoutes); +settingsRoutes.use('/metadatas', metadataRoutes); const filteredMainSettings = ( user: User, diff --git a/server/routes/settings/metadata.ts b/server/routes/settings/metadata.ts index e93152b87..3b5190dc4 100644 --- a/server/routes/settings/metadata.ts +++ b/server/routes/settings/metadata.ts @@ -1,30 +1,24 @@ import Tvdb from '@server/api/tvdb'; -import { getSettings, type TvdbSettings } from '@server/lib/settings'; +import { getSettings, type MetadataSettings } from '@server/lib/settings'; import logger from '@server/logger'; import { Router } from 'express'; -const tvdbRoutes = Router(); +const metadataRoutes = Router(); -export interface MetadataSettings { - tvdb: boolean; -} - -tvdbRoutes.get('/', (_req, res) => { +metadataRoutes.get('/', (_req, res) => { const settings = getSettings(); - res.status(200).json({ - tvdb: settings.tvdb, - }); + res.status(200).json(settings.metadataSettings); }); -tvdbRoutes.put('/', (req, res) => { +metadataRoutes.put('/', (req, res) => { const settings = getSettings(); - const body = req.body as TvdbSettings; + const body = req.body as MetadataSettings; - settings.tvdb = { - apiKey: body.apiKey, - pin: body.pin, + settings.metadataSettings = { + providers: body.providers, + settings: body.settings, }; settings.save(); @@ -33,11 +27,13 @@ tvdbRoutes.put('/', (req, res) => { }); }); -tvdbRoutes.post('/test', async (req, res, next) => { +metadataRoutes.post('/test', async (req, res, next) => { try { const tvdb = await Tvdb.getInstance(); await tvdb.test(); - return res.status(200).json({ message: 'Successfully connected to Tvdb' }); + + // TODO: add tmdb test + return res.status(200).json({ tvdb: true }); } catch (e) { logger.error('Failed to test Tvdb', { label: 'Tvdb', @@ -48,4 +44,4 @@ tvdbRoutes.post('/test', async (req, res, next) => { } }); -export default tvdbRoutes; +export default metadataRoutes; diff --git a/src/components/Settings/SettingsMetadata.tsx b/src/components/Settings/SettingsMetadata.tsx index 55c1f9148..afb292fb8 100644 --- a/src/components/Settings/SettingsMetadata.tsx +++ b/src/components/Settings/SettingsMetadata.tsx @@ -5,7 +5,6 @@ import SettingsBadge from '@app/components/Settings/SettingsBadge'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import { ArrowDownOnSquareIcon, BeakerIcon } from '@heroicons/react/24/outline'; -import type { MetadataSettings } from '@server/routes/settings/metadata'; import { Field, Form, Formik } from 'formik'; import { useState } from 'react'; import { useIntl } from 'react-intl'; @@ -15,12 +14,42 @@ import useSWR from 'swr'; const messages = defineMessages('components.Settings', { general: 'General', settings: 'Settings', - enable: 'Enable', + apiKey: 'Api Key', + pin: 'Pin', enableTip: 'Enable Tvdb (only for season and episode).' + ' Due to a limitation of the api used, only English is available.', }); +interface providerResponse { + tvdb: boolean; + tmdb: boolean; +} + +enum indexerType { + TMDB, + TVDB, +} + +interface metadataSettings { + settings: metadataTypeSettings; + providers: providerSettings; +} + +interface metadataTypeSettings { + tv: indexerType; + anime: indexerType; +} + +interface providerSettings { + tvdb: tvdbSettings; +} + +interface tvdbSettings { + apiKey: string; + pin: string; +} + const SettingsMetadata = () => { const intl = useIntl(); const [isTesting, setIsTesting] = useState(false); @@ -28,35 +57,41 @@ const SettingsMetadata = () => { const { addToast } = useToasts(); const testConnection = async () => { - const response = await fetch('/api/v1/settings/tvdb/test', { + const response = await fetch('/api/v1/settings/metadats/test', { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); + const body = (await response.json()) as providerResponse; + if (!response.ok) { - throw new Error('Failed to test Tvdb'); + console.log(body); } }; - const saveSettings = async (value: MetadataSettings) => { - const response = await fetch('/api/v1/settings/tvdb', { + const saveSettings = async ( + value: metadataSettings + ): Promise => { + const response = await fetch('/api/v1/settings/metadatas', { method: 'PUT', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ - tvdb: value.tvdb, - }), + body: JSON.stringify(value), }); if (!response.ok) { - throw new Error('Failed to save Tvdb settings'); + throw new Error('Failed to save Metadata settings'); } + + return (await response.json()) as metadataSettings; }; - const { data, error } = useSWR('/api/v1/settings/tvdb'); + const { data, error } = useSWR( + '/api/v1/settings/metadatas' + ); if (!data && !error) { return ; @@ -71,32 +106,43 @@ const SettingsMetadata = () => { ]} />
+ me

{'Metadata'}

{'Settings for metadata indexer'}

{ try { - setIsTesting(true); - await testConnection(); - setIsTesting(false); - } catch (e) { - addToast('Tvdb connection error, check your credentials', { - appearance: 'error', - }); - return; - } - - try { - await saveSettings({ - tvdb: values.enable ?? false, - }); + await saveSettings( + data ?? { + providers: { + tvdb: { + apiKey: '', + pin: '', + }, + }, + settings: { + tv: indexerType.TMDB, + anime: indexerType.TMDB, + }, + } + ); if (data) { - data.tvdb = values.enable; + data.providers = values.providers; + data.settings = values.settings; } } catch (e) { addToast('Failed to save Tvdb settings', { appearance: 'error' }); @@ -111,7 +157,7 @@ const SettingsMetadata = () => {
{ - setFieldValue('enable', !values.enable); + setFieldValue('apiKey', values.providers.tvdb.apiKey); addToast('Tvdb connection successful', { appearance: 'success', }); }} /> + { + setFieldValue('pin', values.providers.tvdb.pin); + }} + />