@@ -6,6 +6,7 @@ import {SeriesModel} from '../../models/SeriesModel';
66
77export class MALAPI extends APIModel {
88 plugin : MediaDbPlugin ;
9+ typeMappings : Map < string , string > ;
910
1011 constructor ( plugin : MediaDbPlugin ) {
1112 super ( ) ;
@@ -15,6 +16,11 @@ export class MALAPI extends APIModel {
1516 this . apiDescription = 'A free API for Anime. Some results may take a long time to load.' ;
1617 this . apiUrl = 'https://jikan.moe/' ;
1718 this . types = [ 'movie' , 'series' , 'anime' ] ;
19+ this . typeMappings = new Map < string , string > ( ) ;
20+ this . typeMappings . set ( 'movie' , 'movie' ) ;
21+ this . typeMappings . set ( 'special' , 'special' ) ;
22+ this . typeMappings . set ( 'tv' , 'series' ) ;
23+ this . typeMappings . set ( 'ova' , 'ova' ) ;
1824 }
1925
2026 async searchByTitle ( title : string ) : Promise < MediaTypeModel [ ] > {
@@ -34,18 +40,22 @@ export class MALAPI extends APIModel {
3440 let ret : MediaTypeModel [ ] = [ ] ;
3541
3642 for ( const result of data . data ) {
37- if ( result . type . toLowerCase ( ) === 'movie' || result . type . toLowerCase ( ) === 'special' ) {
43+ const type = this . typeMappings . get ( result . type . toLowerCase ( ) ) ;
44+ if ( type === undefined ) {
45+ continue ;
46+ }
47+ if ( type === 'movie' || type === 'special' ) {
3848 ret . push ( new MovieModel ( {
39- type : result . type ,
49+ type : type ,
4050 title : result . title ,
4151 englishTitle : result . title_english ?? result . title ,
4252 year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
4353 dataSource : this . apiName ,
4454 id : result . mal_id ,
4555 } as MovieModel ) ) ;
46- } else if ( result . type . toLowerCase ( ) === 'tv ' || result . type . toLowerCase ( ) === 'ova' ) {
56+ } else if ( type === 'series ' || type === 'ova' ) {
4757 ret . push ( new SeriesModel ( {
48- type : result . type ,
58+ type : type ,
4959 title : result . title ,
5060 englishTitle : result . title_english ?? result . title ,
5161 year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
@@ -71,9 +81,14 @@ export class MALAPI extends APIModel {
7181 console . log ( data ) ;
7282 const result = data . data ;
7383
74- if ( result . type . toLowerCase ( ) === 'movie' || result . type . toLowerCase ( ) === 'special' ) {
84+ const type = this . typeMappings . get ( result . type . toLowerCase ( ) ) ;
85+ if ( type === undefined ) {
86+ throw Error ( `${ result . type . toLowerCase ( ) } is an unsupported type.` ) ;
87+ }
88+
89+ if ( type === 'movie' || type === 'special' ) {
7590 const model = new MovieModel ( {
76- type : result . type ,
91+ type : type ,
7792 title : result . title ,
7893 englishTitle : result . title_english ?? result . title ,
7994 year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
@@ -96,9 +111,9 @@ export class MALAPI extends APIModel {
96111 } as MovieModel ) ;
97112
98113 return model ;
99- } else if ( result . type . toLowerCase ( ) === 'tv ' || result . type . toLowerCase ( ) === 'ova' ) {
114+ } else if ( type === 'series ' || type === 'ova' ) {
100115 const model = new SeriesModel ( {
101- type : result . type ,
116+ type : type ,
102117 title : result . title ,
103118 englishTitle : result . title_english ?? result . title ,
104119 year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
0 commit comments