@@ -6,6 +6,7 @@ import {SeriesModel} from '../../models/SeriesModel';
6
6
7
7
export class MALAPI extends APIModel {
8
8
plugin : MediaDbPlugin ;
9
+ typeMappings : Map < string , string > ;
9
10
10
11
constructor ( plugin : MediaDbPlugin ) {
11
12
super ( ) ;
@@ -15,6 +16,11 @@ export class MALAPI extends APIModel {
15
16
this . apiDescription = 'A free API for Anime. Some results may take a long time to load.' ;
16
17
this . apiUrl = 'https://jikan.moe/' ;
17
18
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' ) ;
18
24
}
19
25
20
26
async searchByTitle ( title : string ) : Promise < MediaTypeModel [ ] > {
@@ -34,18 +40,22 @@ export class MALAPI extends APIModel {
34
40
let ret : MediaTypeModel [ ] = [ ] ;
35
41
36
42
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' ) {
38
48
ret . push ( new MovieModel ( {
39
- type : result . type ,
49
+ type : type ,
40
50
title : result . title ,
41
51
englishTitle : result . title_english ?? result . title ,
42
52
year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
43
53
dataSource : this . apiName ,
44
54
id : result . mal_id ,
45
55
} as MovieModel ) ) ;
46
- } else if ( result . type . toLowerCase ( ) === 'tv ' || result . type . toLowerCase ( ) === 'ova' ) {
56
+ } else if ( type === 'series ' || type === 'ova' ) {
47
57
ret . push ( new SeriesModel ( {
48
- type : result . type ,
58
+ type : type ,
49
59
title : result . title ,
50
60
englishTitle : result . title_english ?? result . title ,
51
61
year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
@@ -71,9 +81,14 @@ export class MALAPI extends APIModel {
71
81
console . log ( data ) ;
72
82
const result = data . data ;
73
83
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' ) {
75
90
const model = new MovieModel ( {
76
- type : result . type ,
91
+ type : type ,
77
92
title : result . title ,
78
93
englishTitle : result . title_english ?? result . title ,
79
94
year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
@@ -96,9 +111,9 @@ export class MALAPI extends APIModel {
96
111
} as MovieModel ) ;
97
112
98
113
return model ;
99
- } else if ( result . type . toLowerCase ( ) === 'tv ' || result . type . toLowerCase ( ) === 'ova' ) {
114
+ } else if ( type === 'series ' || type === 'ova' ) {
100
115
const model = new SeriesModel ( {
101
- type : result . type ,
116
+ type : type ,
102
117
title : result . title ,
103
118
englishTitle : result . title_english ?? result . title ,
104
119
year : result . year ?? result . aired ?. prop ?. from ?. year ?? '' ,
0 commit comments