From 5bdb9bdbaa5a79b6a1be5393c4a4a7f76549305a Mon Sep 17 00:00:00 2001 From: mProjectsCode Date: Fri, 13 May 2022 21:19:21 +0200 Subject: [PATCH] small fix for type name consistency --- src/api/apis/MALAPI.ts | 31 +++++++++++++++++++++++-------- src/api/apis/OMDbAPI.ts | 26 ++++++++++++++++++++------ src/utils/Utils.ts | 2 +- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/api/apis/MALAPI.ts b/src/api/apis/MALAPI.ts index 2e105bd..8057ab7 100644 --- a/src/api/apis/MALAPI.ts +++ b/src/api/apis/MALAPI.ts @@ -6,6 +6,7 @@ import {SeriesModel} from '../../models/SeriesModel'; export class MALAPI extends APIModel { plugin: MediaDbPlugin; + typeMappings: Map; constructor(plugin: MediaDbPlugin) { super(); @@ -15,6 +16,11 @@ export class MALAPI extends APIModel { this.apiDescription = 'A free API for Anime. Some results may take a long time to load.'; this.apiUrl = 'https://jikan.moe/'; this.types = ['movie', 'series', 'anime']; + this.typeMappings = new Map(); + this.typeMappings.set('movie', 'movie'); + this.typeMappings.set('special', 'special'); + this.typeMappings.set('tv', 'series'); + this.typeMappings.set('ova', 'ova'); } async searchByTitle(title: string): Promise { @@ -34,18 +40,22 @@ export class MALAPI extends APIModel { let ret: MediaTypeModel[] = []; for (const result of data.data) { - if (result.type.toLowerCase() === 'movie' || result.type.toLowerCase() === 'special') { + const type = this.typeMappings.get(result.type.toLowerCase()); + if (type === undefined) { + continue; + } + if (type === 'movie' || type === 'special') { ret.push(new MovieModel({ - type: result.type, + type: type, title: result.title, englishTitle: result.title_english ?? result.title, year: result.year ?? result.aired?.prop?.from?.year ?? '', dataSource: this.apiName, id: result.mal_id, } as MovieModel)); - } else if (result.type.toLowerCase() === 'tv' || result.type.toLowerCase() === 'ova') { + } else if (type === 'series' || type === 'ova') { ret.push(new SeriesModel({ - type: result.type, + type: type, title: result.title, englishTitle: result.title_english ?? result.title, year: result.year ?? result.aired?.prop?.from?.year ?? '', @@ -71,9 +81,14 @@ export class MALAPI extends APIModel { console.log(data); const result = data.data; - if (result.type.toLowerCase() === 'movie' || result.type.toLowerCase() === 'special') { + const type = this.typeMappings.get(result.type.toLowerCase()); + if (type === undefined) { + throw Error(`${result.type.toLowerCase()} is an unsupported type.`); + } + + if (type === 'movie' || type === 'special') { const model = new MovieModel({ - type: result.type, + type: type, title: result.title, englishTitle: result.title_english ?? result.title, year: result.year ?? result.aired?.prop?.from?.year ?? '', @@ -96,9 +111,9 @@ export class MALAPI extends APIModel { } as MovieModel); return model; - } else if (result.type.toLowerCase() === 'tv' || result.type.toLowerCase() === 'ova') { + } else if (type === 'series' || type === 'ova') { const model = new SeriesModel({ - type: result.type, + type: type, title: result.title, englishTitle: result.title_english ?? result.title, year: result.year ?? result.aired?.prop?.from?.year ?? '', diff --git a/src/api/apis/OMDbAPI.ts b/src/api/apis/OMDbAPI.ts index af22a5a..4480302 100644 --- a/src/api/apis/OMDbAPI.ts +++ b/src/api/apis/OMDbAPI.ts @@ -7,6 +7,7 @@ import {GameModel} from '../../models/GameModel'; export class OMDbAPI extends APIModel { plugin: MediaDbPlugin; + typeMappings: Map; constructor(plugin: MediaDbPlugin) { super(); @@ -16,6 +17,10 @@ export class OMDbAPI extends APIModel { this.apiDescription = 'A free API for Movies, Series and Games.'; this.apiUrl = 'http://www.omdbapi.com/'; this.types = ['movie', 'series']; + this.typeMappings = new Map(); + this.typeMappings.set('movie', 'movie'); + this.typeMappings.set('series', 'series'); + this.typeMappings.set('game', 'game'); } async searchByTitle(title: string): Promise { @@ -46,6 +51,10 @@ export class OMDbAPI extends APIModel { let ret: MediaTypeModel[] = []; for (const result of data.Search) { + const type = this.typeMappings.get(result.type.toLowerCase()); + if (type === undefined) { + continue; + } if (result.Type === 'movie') { ret.push(new MovieModel({ type: 'movie', @@ -99,9 +108,14 @@ export class OMDbAPI extends APIModel { throw Error(`Received error from ${this.apiName}: ${result.Error}`); } - if (result.Type === 'movie') { + const type = this.typeMappings.get(result.type.toLowerCase()); + if (type === undefined) { + throw Error(`${result.type.toLowerCase()} is an unsupported type.`); + } + + if (type === 'movie') { const model = new MovieModel({ - type: 'movie', + type: type, title: result.Title, englishTitle: result.Title, year: result.Year, @@ -124,9 +138,9 @@ export class OMDbAPI extends APIModel { } as MovieModel); return model; - } else if (result.Type === 'series') { + } else if (type === 'series') { const model = new SeriesModel({ - type: 'series', + type: type, title: result.Title, englishTitle: result.Title, year: result.Year, @@ -152,9 +166,9 @@ export class OMDbAPI extends APIModel { } as SeriesModel); return model; - } else if (result.Type === 'game') { + } else if (type === 'game') { const model = new GameModel({ - type: 'game', + type: type, title: result.Title, englishTitle: result.Title, year: result.Year, diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 906970f..aa385df 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -13,7 +13,7 @@ export function getFileName(item: MediaTypeModel) { } export function replaceIllegalFileNameCharactersInString(string: string) { - return string.replace(/[\\,#%&{}/*<>$"@.]*/g, '').replace(/:+/g, ' -'); + return string.replace(/[\\,#%&{}/*<>$"@.?]*/g, '').replace(/:+/g, ' -'); } export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string {