package Ġcom . lag rad ost . quick no vel . providers Ċ Ċ import Ġcom . lag rad ost . quick no vel .* Ċ import Ġcom . lag rad ost . quick no vel . util . p map Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Element Ċ Ċ class ĠCom r ade ma o Provider Ġ: ĠMain API () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" Com r ade ma o " ĊĠĠĠ Ġoverride Ġval Ġmain Url : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" https :// com r ade ma o . com " ĊĊĠĠĠ Ġoverride Ġfun Ġsearch ( query : ĠString ): ĠList < Search Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ main Url /? s =$ query & post _ type = no vel " ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk http . get ( url ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( response . text ) ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġdocument . select (" div . new box Ġ> Ġul Ġ> Ġli ") ĊĠĠĠĠĠĠĠ Ġif Ġ( items . size Ġ<= Ġ 0 ) Ġreturn ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval ĠreturnValue : ĠArrayList < Search Response > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposter Ġ= Ġitem . select First ("> Ġa Ġ> Ġimg "). attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Holder Ġ= Ġitem . select First ("> Ġdiv Ġ> Ġh 3 Ġ> Ġa ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġtitle Holder . text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Ġ= Ġtitle Holder . attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnValue . add ( Search Response ( title , Ġhref , Ġposter , Ġnull , Ġnull , Ġthis . name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠreturnValue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Html ( url : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk http . get ( url ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( response . text ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument . select First (" div # content "). html () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( url : ĠString ): ĠLoad Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk http . get ( url ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( response . text ) ĊĠĠĠĠĠĠĠ Ġval Ġnovel Info Ġ= Ġdocument . select First (" div # No vel Info ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Div s Ġ= Ġnovel Info . select ("> Ġdiv . columns Ġ> Ġdiv ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġmain Div s [ 0 ]. select First ("> Ġp "). text (). replace (" ĠâĢĵ ĠCom r ade ĠM ao ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġposter Ġ= Ġmain Div s [ 0 ]. select First ("> Ġimg "). attr (" src ") ĊĊĠĠĠĠĠĠĠ Ġval Ġde script Ġ= Ġmain Div s ?. get ( 1 )?. text () ĊĠĠĠĠĠĠĠ Ġvar Ġgen res : ĠArrayList < String >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtags : ĠArrayList < String >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġauthor : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġstatus : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġhandle Type ( element : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtxt Ġ= Ġelement . own Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt . contains (" Genre ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgen res Ġ= ĠArrayList ( element . select ("> Ġa "). map Ġ{ Ġit . text () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt . contains (" Tag ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠArrayList ( element . select ("> Ġa "). map Ġ{ Ġit . text () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt . contains (" Publisher ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġelement . select First ("> Ġa "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt . contains (" Status ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġelement . select First ("> Ġa "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġnovel Info . select ("> Ġp ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Type ( type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( genres Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen res Ġ= Ġtags ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen res ?. addAll ( tags Ġ?: ĠlistOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Int Ġ= Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" On - going " Ġ-> ĠSTATUS _ ONGO ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Complete " Ġ-> ĠSTATUS _ COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSTATUS _ NULL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpages Ġ= Ġdocument . select (" nav . pagination Ġ> Ġul Ġ> Ġli Ġ> Ġa ") ĊĠĠĠĠĠĠĠ Ġvar Ġbiggest Page Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġpage Url Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġ"( .*? )/ page / ([ 0 - 9 ]* ? )/ ". to Regex (). find ( p . attr (" href ")) ?. group Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( groups Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Number Ġ= Ġgroups [ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pageNumber Ġ> Ġbiggest Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbiggest Page Ġ= Ġpage Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Url Ġ= Ġgroups [ 1 ] Ġ+ Ġ"/ page /" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠArray < List < Pair < String , ĠString >> >( big gest Page ) Ġ{ ĠArrayList () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpages Index Ġ= ĠArrayList < Pair < Int , ĠString >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. big gest Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpages Index . add ( Pair ( i Ġ- Ġ 1 , Ġpage Url Ġ+ Ġi )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpages Index . p map Ġ{ Ġsub Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Response Ġ= Ġk http . get ( sub Data . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Document Ġ= ĠJ soup . parse ( sub Response . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindexed Values Ġ= ĠArrayList ( sub Document . select (" table Ġ> Ġtbody Ġ> Ġtr Ġ> Ġth Ġ> Ġa "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it . text (), Ġit . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ sub Data . first ] Ġ= Ġindexed Values ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġend Result Ġ= ĠArrayList < Pair < String , ĠString >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Result . addAll ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġend Result . as Re versed (). map Ġ{ ĠChapter Data ( it . first , Ġit . second , Ġnull , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLoad Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde script , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen res , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Int , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }