154 lines
3.4 KiB
TypeScript
154 lines
3.4 KiB
TypeScript
import TheMovieDb from '@server/api/themoviedb';
|
|
import Tvdb from '@server/api/tvdb';
|
|
import {
|
|
getSettings,
|
|
MetadataProviderType,
|
|
type MetadataSettings,
|
|
} from '@server/lib/settings';
|
|
import logger from '@server/logger';
|
|
import { Router } from 'express';
|
|
|
|
function getTestResultString(testValue: number): string {
|
|
if (testValue === -1) return 'not tested';
|
|
if (testValue === 0) return 'failed';
|
|
return 'ok';
|
|
}
|
|
|
|
const metadataRoutes = Router();
|
|
|
|
metadataRoutes.get('/', (_req, res) => {
|
|
const settings = getSettings();
|
|
res.status(200).json({
|
|
tv: settings.metadataSettings.tv,
|
|
anime: settings.metadataSettings.anime,
|
|
});
|
|
});
|
|
|
|
metadataRoutes.put('/', async (req, res) => {
|
|
const settings = getSettings();
|
|
const body = req.body as MetadataSettings;
|
|
|
|
let tvdbTest = -1;
|
|
let tmdbTest = -1;
|
|
|
|
try {
|
|
if (
|
|
body.tv === MetadataProviderType.TVDB ||
|
|
body.anime === MetadataProviderType.TVDB
|
|
) {
|
|
tvdbTest = 0;
|
|
const tvdb = await Tvdb.getInstance();
|
|
await tvdb.test();
|
|
tvdbTest = 1;
|
|
}
|
|
} catch (e) {
|
|
logger.error('Failed to test metadata provider', {
|
|
label: 'Metadata',
|
|
message: e.message,
|
|
});
|
|
}
|
|
|
|
try {
|
|
if (
|
|
body.tv === MetadataProviderType.TMDB ||
|
|
body.anime === MetadataProviderType.TMDB
|
|
) {
|
|
tmdbTest = 0;
|
|
const tmdb = new TheMovieDb();
|
|
await tmdb.getTvShow({ tvId: 1054 });
|
|
tmdbTest = 1;
|
|
}
|
|
} catch (e) {
|
|
logger.error('Failed to test metadata provider', {
|
|
label: 'MetadataProvider',
|
|
message: e.message,
|
|
});
|
|
}
|
|
|
|
// If a test failed, return the test results
|
|
if (tvdbTest === 0 || tmdbTest === 0) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
tests: {
|
|
tvdb: getTestResultString(tvdbTest),
|
|
tmdb: getTestResultString(tmdbTest),
|
|
},
|
|
});
|
|
}
|
|
|
|
settings.metadataSettings = {
|
|
tv: body.tv,
|
|
anime: body.anime,
|
|
};
|
|
await settings.save();
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
tv: body.tv,
|
|
anime: body.anime,
|
|
tests: {
|
|
tvdb: getTestResultString(tvdbTest),
|
|
tmdb: getTestResultString(tmdbTest),
|
|
},
|
|
});
|
|
});
|
|
|
|
metadataRoutes.post('/test', async (req, res) => {
|
|
let tvdbTest = -1;
|
|
let tmdbTest = -1;
|
|
|
|
try {
|
|
const body = req.body as { tmdb: boolean; tvdb: boolean };
|
|
|
|
try {
|
|
if (body.tmdb) {
|
|
tmdbTest = 0;
|
|
const tmdb = new TheMovieDb();
|
|
await tmdb.getTvShow({ tvId: 1054 });
|
|
tmdbTest = 1;
|
|
}
|
|
} catch (e) {
|
|
logger.error('Failed to test metadata provider', {
|
|
label: 'MetadataProvider',
|
|
message: e.message,
|
|
});
|
|
}
|
|
|
|
try {
|
|
if (body.tvdb) {
|
|
tvdbTest = 0;
|
|
const tvdb = await Tvdb.getInstance();
|
|
await tvdb.test();
|
|
tvdbTest = 1;
|
|
}
|
|
} catch (e) {
|
|
logger.error('Failed to test metadata provider', {
|
|
label: 'MetadataProvider',
|
|
message: e.message,
|
|
});
|
|
}
|
|
|
|
const success = !(tvdbTest === 0 || tmdbTest === 0);
|
|
const statusCode = success ? 200 : 500;
|
|
|
|
return res.status(statusCode).json({
|
|
success: success,
|
|
tests: {
|
|
tmdb: getTestResultString(tmdbTest),
|
|
tvdb: getTestResultString(tvdbTest),
|
|
},
|
|
});
|
|
} catch (e) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
tests: {
|
|
tmdb: getTestResultString(tmdbTest),
|
|
tvdb: getTestResultString(tvdbTest),
|
|
},
|
|
error: e.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
export default metadataRoutes;
|