1- import { CheerioAPI , load as parseHTML } from 'cheerio' ;
1+ import { load as parseHTML } from 'cheerio' ;
22import { fetchApi } from '@libs/fetch' ;
33import { Plugin } from '@/types/plugin' ;
4- import { Filters , FilterTypes } from '@libs/filterInputs' ;
4+ import { Filters } from '@libs/filterInputs' ;
55import { defaultCover } from '@libs/defaultCover' ;
66
77class dilartube implements Plugin . PluginBase {
88 id = 'dilartube' ;
99 name = 'dilar tube' ;
10- version = '1.0.1 ' ;
10+ version = '1.0.2 ' ;
1111 icon = 'src/ar/dilartube/icon.png' ;
1212 site = 'https://golden.rest/' ;
1313
@@ -53,7 +53,7 @@ class dilartube implements Plugin.PluginBase {
5353
5454 async popularNovels (
5555 page : number ,
56- { showLatestNovels, filters } : Plugin . PopularNovelsOptions < Filters > ,
56+ { showLatestNovels } : Plugin . PopularNovelsOptions < typeof this . filters > ,
5757 ) : Promise < Plugin . NovelItem [ ] > {
5858 let link = `${ this . site } api/releases?page=${ page } ` ;
5959 if ( showLatestNovels ) {
@@ -82,36 +82,38 @@ class dilartube implements Plugin.PluginBase {
8282 const chapterItems : Plugin . ChapterItem [ ] = [ ] ;
8383 const fullUrl = this . site + 'api/' + novelUrl ;
8484 const chapterUrl = this . site + 'api/' + novelUrl + '/releases' ;
85- const manga = await fetchApi ( fullUrl ) . then ( r => r . json ( ) ) ;
85+ const manga : MangaResponse = await fetchApi ( fullUrl ) . then ( r => r . json ( ) ) ;
8686 const chapters = await fetchApi ( chapterUrl ) . then ( r => r . json ( ) ) ;
8787 const mangaData = manga . mangaData ;
8888 const chapterData = chapters . releases ;
8989
9090 const novel : Plugin . SourceNovel = {
9191 path : novelUrl ,
92- name : mangaData . arabic_title || 'Untitled' ,
92+ name : mangaData . arabic_title ?? mangaData . title ?? 'Untitled' ,
9393 author :
9494 ( mangaData . authors . length > 0 ? mangaData . authors [ 0 ] . name : '' ) ||
9595 'Unknown' ,
9696 summary : mangaData . summary || '' ,
9797 cover : `${ this . site } uploads/manga/cover/${ mangaData . id } /${ mangaData . cover } ` ,
9898 chapters : [ ] ,
9999 } ;
100- const translationStatusId : string = mangaData . translation_status ;
100+ const translationStatusId = mangaData . translation_status . toString ( ) ;
101101 const translationText =
102102 {
103103 '1' : 'مستمره' ,
104104 '0' : 'منتهية' ,
105105 '2' : 'متوقفة' ,
106106 '3' : 'غير مترجمه' ,
107107 } [ translationStatusId ] || 'غير معروف' ;
108- const statusWords = new Set ( [ 'مكتمل' , 'جديد' , 'مستمر' ] ) ;
109- const mainGenres = mangaData . categories
110- . map ( ( category : { name : any } ) => category . name )
108+ // const statusWords = new Set(['مكتمل', 'جديد', 'مستمر']);
109+ const mainGenres = Array . from (
110+ new Set ( mangaData . categories . map ( g => g . name ) ) ,
111+ )
112+ . filter ( Boolean )
111113 . join ( ',' ) ;
112114 novel . genres = `${ translationText } ,${ mainGenres } ` ;
113115
114- const statusId : string = mangaData . story_status ;
116+ const statusId = mangaData . story_status . toString ( ) ;
115117 const statusText =
116118 {
117119 '2' : 'Ongoing' ,
@@ -138,12 +140,18 @@ class dilartube implements Plugin.PluginBase {
138140 const parsedData = JSON . parse ( jsonData as string ) ;
139141
140142 const chapterText = parsedData . readerDataAction . readerData . release . content ;
141- return chapterText ;
143+ // return html with p tags
144+ return chapterText
145+ . split ( / \r ? \n / )
146+ . map ( ( line : string ) => line . trim ( ) )
147+ . filter ( Boolean )
148+ . map ( ( line : string ) => `<p>${ line } </p>` )
149+ . join ( '' ) ;
142150 }
143151
144152 async searchNovels (
145153 searchTerm : string ,
146- page : number ,
154+ // page: number,
147155 ) : Promise < Plugin . NovelItem [ ] > {
148156 const formData = new FormData ( ) ;
149157 formData . append ( 'query' , searchTerm ) ;
@@ -156,6 +164,7 @@ class dilartube implements Plugin.PluginBase {
156164 return this . parseNovels ( data ) ;
157165 }
158166
167+ filters : Filters | undefined = undefined ;
159168 // filters = {
160169 // types: {
161170 // value: [],
@@ -245,8 +254,8 @@ type Manga = {
245254 publisher_name : string | null ;
246255 discord_url : string | null ;
247256 mobile_exclusive : boolean ;
248- authors : any [ ] ;
249- artists : any [ ] ;
257+ // authors: any[];
258+ // artists: any[];
250259 categories : Category [ ] ;
251260 type : Type ;
252261} ;
@@ -327,7 +336,7 @@ type MangaData = {
327336 uniq_visitors_count : number ;
328337 publisher_id : number | null ;
329338 publisher_name : string | null ;
330- arabic_title : string ;
339+ arabic_title : string | null ;
331340 english : string ;
332341 synonyms : string ;
333342 japanese : string ;
@@ -360,11 +369,12 @@ type MangaData = {
360369} ;
361370
362371type MangaResponse = {
363- membersMentioning : any [ ] ;
364- memberRates : any | null ;
365- mangaLogs : Record < string , any > ;
372+ // membersMentioning: any[];
373+ // memberRates: any | null;
374+ // mangaLogs: Record<string, any>;
366375 mangaData : MangaData ;
367376} ;
377+
368378type ChapterRelease = {
369379 id : number ;
370380 manga_id : number ;
@@ -385,7 +395,7 @@ type ChapterRelease = {
385395 has_rev_link : boolean ;
386396} ;
387397type searchManga = {
388- filter : any ;
398+ // filter: any;
389399 id : number ;
390400 title : string ;
391401 summary : string ;
@@ -417,8 +427,8 @@ type searchManga = {
417427 publisher_name : string | null ;
418428 discord_url : string | null ;
419429 mobile_exclusive : boolean ;
420- authors : any [ ] ;
421- artists : any [ ] ;
430+ // authors: any[];
431+ // artists: any[];
422432 categories : Category [ ] ;
423433 type : Type ;
424434} ;
0 commit comments