package Ġeu . kan ade . t ach iy omi . extension . ja . m ang ac ross Ċ Ċ import Ġandroid . util . Log Ċ import Ġeu . kan ade . t ach iy omi . network . GET Ċ import Ġeu . kan ade . t ach iy omi . network . as Observable Success Ċ import Ġeu . kan ade . t ach iy omi . source . model . Filter Ċ import Ġeu . kan ade . t ach iy omi . source . model . Filter List Ċ import Ġeu . kan ade . t ach iy omi . source . model . M ang as Page Ċ import Ġeu . kan ade . t ach iy omi . source . model . Page Ċ import Ġeu . kan ade . t ach iy omi . source . model . SM anga Ċ import Ġeu . kan ade . t ach iy omi . source . online . Http Source Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġokhttp 3 . Response Ċ import Ġrx . Observable Ċ import Ġu y . ko hes ive . in jekt . inject Lazy Ċ import Ġkotlin . concurrent . thread Ċ Ċ const Ġval Ġmax Entries Ġ= Ġ 9 9 9 9 Ċ Ċ class ĠM ang aC ross Ġ: ĠHttp Source () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" M anga ĠCross " ĊĠĠĠ Ġoverride Ġval Ġlang Ġ= Ġ" ja " ĊĠĠĠ Ġoverride Ġval ĠbaseUrl Ġ= Ġ" https :// m ang ac ross . jp " ĊĠĠĠ Ġoverride Ġval Ġsupports Latest Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġjson : ĠJson Ġby Ġinject Lazy () ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠInt ) Ġ= ĠGET ("$ baseUrl / api / com ics . json ? count =$ max Entries ", Ġheaders ) ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Parse ( response : ĠResponse ) Ġ= ĠM ang as Page ( ĊĠĠĠĠĠĠĠ Ġjson . decode FromString < MC Com ic List >( response . body !!. string ()). com ics . map ( MC Com ic :: to SM anga ), ĊĠĠĠĠĠĠĠ Ġfalse Ġ// Ġpagination Ġdoes Ġnot Ġwork ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Request ( page : ĠInt ) Ġ= ĠGET ("$ baseUrl / api / episodes . json ? page =$ page ", Ġheaders ) ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson . decode FromString < M CE p isode List >( response . body !!. string ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( result . episodes . map Ġ{ Ġit . com ic !!. to SM anga () Ġ}, Ġresult . current _ page Ġ< Ġresult . total _ pages ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET ("$ baseUrl / api / com ics / keywords /$ query . json ", Ġheaders ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġwhen Ġ( val Ġtag Ġ= Ġfilters . filter Is Instance < Tag Filter >(). first OrNull ()?. getTag ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġpopular M anga Request ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMC Com ic Category Ġ-> ĠGET ("$ baseUrl / api / com ics / categories /${ tag . name }. json ", Ġheaders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMC Com ic Genre Ġ-> ĠGET ("$ baseUrl / api / com ics / tags /${ tag . name }. json ", Ġheaders ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Parse ( response : ĠResponse ) Ġ= Ġpopular M anga Parse ( response ) ĊĊĠĠĠ Ġoverride Ġfun Ġfetch M anga Details ( manga : ĠSM anga ): ĠObservable < SM anga > Ġ= ĊĠĠĠĠĠĠĠ Ġclient . new Call ( chapter List Request ( manga )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Observable Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġm anga Details Parse ( it ). apply Ġ{ Ġinitialized Ġ= Ġtrue Ġ} Ġ} ĊĊĠĠĠ Ġ// Ġm anga Details Request Ġun touched Ġin Ġorder Ġto Ġlet ĠWebView Ġopen Ġweb Ġpage Ġinstead Ġof Ġjson ĊĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( response : ĠResponse ) Ġ= ĊĠĠĠĠĠĠĠ Ġjson . decode FromString < MC Com ic Details >( response . body !!. string ()). com ic . to SM anga () ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Request ( manga : ĠSM anga ) Ġ= ĠGET ("$ baseUrl / api ${ manga . url }. json ", Ġheaders ) ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Parse ( response : ĠResponse ) Ġ= ĊĠĠĠĠĠĠĠ Ġjson . decode FromString < MC Com ic Details >( response . body !!. string ()). com ic . to S Chapter List () ĊĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( response : ĠResponse ): ĠList < Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . decode FromString < MC Viewer >( response . body !!. string ()). episode _ pages . map Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage ( i , Ġ"", Ġit . image . original _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSerialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Chapter Ġis Ġno Ġlonger Ġavailable !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( response : ĠResponse ) Ġ= Ġthrow ĠUnsupportedOperationException (" Not Ġused .") ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtags : ĠList < Pair < String , ĠMC Com ic Tag ? >> ĊĠĠĠ Ġprivate Ġvar Ġis Fetching Tags Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Tags () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fetching Tags ) Ġreturn ĊĠĠĠĠĠĠĠ Ġis Fetching Tags Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( GET ("$ baseUrl / api / menus . json ", Ġheaders )). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter List Ġ= Ġjson . decode FromString < MC Menu >( response . body !!. string ()). to Filter List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf ( Pair (" None ", Ġnull )) Ġ+ Ġfilter List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" M ang aC ross ", Ġ" Failed Ġto Ġfetch Ġfilters Ġ($ e )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Fetching Tags Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter List () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ(:: tags . isInitialized ) ĠFilter List ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilter . Header (" NOTE : ĠIgnore d Ġif Ġusing Ġtext Ġsearch ! "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTag Filter (" Tag ", Ġtags ) ĊĠĠĠĠĠĠĠ Ġ) Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Tags () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilter List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter . Header (" Tags Ġnot Ġfetched Ġyet . ĠGo Ġback Ġand Ġretry ."), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTag Filter ( displayName : ĠString , Ġprivate Ġval Ġtags : ĠList < Pair < String , ĠMC Com ic Tag ? >>) Ġ: ĊĠĠĠĠĠĠĠ ĠFilter . Select < String >( displayName , Ġtags . map Ġ{ Ġit . first Ġ}. to Typed Array ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Tag () Ġ= Ġtags [ state ]. second ĊĠĠĠ Ġ} Ċ } Ċ