package Ġeu . kan ade . t ach iy omi . extension . fr . scan manga Ċ Ċ import Ġcom . github . sal om on br ys . kot son . get Ċ import Ġcom . github . sal om on br ys . kot son . string Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Json Parser Ċ 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 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 . S Chapter Ċ import Ġeu . kan ade . t ach iy omi . source . model . SM anga Ċ import Ġeu . kan ade . t ach iy omi . source . online . Parsed Http Source Ċ import Ġokhttp 3 . Headers Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . js oup . nodes . Element Ċ import Ġorg . js oup . parser . Parser Ċ import Ġrx . Observable Ċ import Ġkotlin . random . Random Ċ Ċ class ĠScan M anga Ġ: ĠParsed Http Source () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" Scan - M anga " ĊĊĠĠĠ Ġoverride Ġval ĠbaseUrl Ġ= Ġ" https :// www . scan - manga . com " ĊĊĠĠĠ Ġoverride Ġval Ġlang Ġ= Ġ" fr " ĊĊĠĠĠ Ġoverride Ġval Ġsupports Latest Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġclient : ĠOk HttpClient Ġ= Ġnetwork . client . newBuilder () ĊĠĠĠĠĠĠĠ Ġ. add Network Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Cookies Ġ= Ġchain . request (). header (" Cookie ") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Req Ġ= Ġchain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Cookie ", Ġ"$ original Cookies ; Ġ_ ga = GA 1 . 2 .${ shuffle (" 1 2 3 4 5 6 7 8 9 ") }.${ System . currentTimeMillis () Ġ/ Ġ 1 0 0 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( new Req ) ĊĠĠĠĠĠĠĠ Ġ}. build () !! ĊĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠ Ġoverride Ġfun Ġheaders Builder (): ĠHeaders . Builder Ġ= Ġsuper . headers Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" Accept - Language ", Ġ" fr - FR ") ĊĊĠĠĠ Ġ// ĠPop ular ĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ("$ baseUrl / T out - le - TOP . html ", Ġheaders ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Selector () Ġ= Ġ" div . image _ manga Ġa [ href ]" ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga From Element ( element : ĠElement ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . select (" img "). attr (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġelement . select (" img "). attr (" data - original ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Next Page Selector (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠLatest ĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ( baseUrl , Ġheaders ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Selector () Ġ= Ġ"# content _ news Ġ. listing " ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates From Element ( element : ĠElement ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . select (" a . nom _ manga "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . select (" a . nom _ manga "). attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* thumbnail _ url Ġ= Ġelement . select (". logo _ manga Ġimg "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . has Attr (" data - original ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attr (" data - original ") Ġelse Ġit . attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ Ġ// ĠBetter Ġnot Ġuse Ġit , Ġwidth Ġis Ġtoo Ġlarge , Ġwhich Ġresults Ġin Ġter rible Ġimage ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Next Page Selector (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠSearch ĊĠĠĠ Ġoverride Ġfun Ġsearch M anga From Element ( element : ĠElement ) Ġ= Ġthrow ĠUnsupportedOperationException (" Not Ġused ") ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Next Page Selector () Ġ= Ġthrow ĠUnsupportedOperationException (" Not Ġused ") ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Parse ( response : ĠResponse ): ĠM ang as Page Ġ= Ġparse M anga FromJson ( response ) ĊĊĠĠĠ Ġfun Ġshuffle ( s : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuffer ( s !! ) ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġresult . length ĊĠĠĠĠĠĠĠ Ġwhile Ġ( n Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Point : ĠInt Ġ= ĠRandom . nextInt ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Char Ġ= Ġresult [ random Point ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . set Char At ( n Ġ- Ġ 1 , Ġrandom Char ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Headers Ġ= Ġheaders Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" Refer er ", Ġ"$ baseUrl / scan lation / liste _ series . html ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" x - requested - with ", Ġ" XML HttpRequest ") ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ("$ baseUrl / scan lation / scan . data . json ", Ġsearch Headers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Search M anga ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ): ĠObservable < M ang as Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclient . new Call ( search M anga Request ( page , Ġquery , Ġfilters )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Observable Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch M anga Parse ( response , Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch M anga Parse ( response : ĠResponse , Ġquery : ĠString ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( parse M anga FromJson ( response ). m ang as . filter Ġ{ Ġit . title . contains ( query , Ġignore Case Ġ= Ġtrue ) Ġ}, Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse M anga FromJson ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Data Ġ= Ġresponse . body () !!. string () !! ĊĠĠĠĠĠĠĠ Ġif Ġ( json Data Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( listOf < SM anga >(), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJson Parser (). parse ( json Data ). as JsonObject ĊĊĠĠĠĠĠĠĠ Ġval Ġm ang as Ġ= ĠjsonObject . keySet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" 9 5 "," % 2 4 1 0 0 - is - Too - Che ap "," 0 "," 3 "," One ĠShot ",""," 2 Ġav ril Ġ 2 0 1 0 ",""," 3 3 5 "," 1 7 8 "," 4 0 1 0 ","" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"/" Ġ+ ĠjsonObject [ key ][ 0 ]. string Ġ+ Ġ"/" Ġ+ ĠjsonObject [ key ][ 1 ]. string Ġ+ Ġ". html " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠParser . un escape Entities ( key , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= ĠjsonObject [ key ][ 2 ]. string . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 0 ") Ġ-> Ġ" Sh Åį nen " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 1 ") Ġ-> Ġ" Sh Åį jo " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 2 ") Ġ-> Ġ" Se inen " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 3 ") Ġ-> Ġ" J ose i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠjsonObject [ key ][ 3 ]. string . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 0 ") Ġ-> ĠSM anga . ONGO ING Ġ// ĠEn Ġc ours ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 1 ") Ġ-> ĠSM anga . ONGO ING Ġ// ĠEn Ġpause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 2 ") Ġ-> ĠSM anga . COMPLETED Ġ// ĠTermin Ã© ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" 3 ") Ġ-> ĠSM anga . COMPLETED Ġ// ĠOne Ġshot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSM anga . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( m ang as , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Selector () Ġ= Ġthrow ĠUnsupportedOperationException (" Not Ġused ") ĊĊĠĠĠ Ġ// ĠDetails ĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( document : ĠDocument ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġdocument . select (" h 2 [ ite mp rop =\" name \"] "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġdocument . select (" li [ ite mp rop =\" author \"] Ġa "). join ToString Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdocument . select (" p [ ite mp rop =\" description \"] "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġdocument . select (". cont enu _ f iche _ tech nique Ġ. image _ manga Ġimg "). attr (" src ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠChapter s ĊĠĠĠ Ġoverride Ġfun Ġchapter List Selector () Ġ= Ġ" div . text e _ volume _ manga Ġul Ġli . chap itre Ġdiv . chap itre _ nom Ġa " ĊĊĠĠĠ Ġoverride Ġfun Ġchapter From Element ( element : ĠElement ): ĠS Chapter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠS Chapter . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġelement . text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . attr (" href ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPages ĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( document : ĠDocument ): ĠList < Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc String Ġ= Ġdocument . toString () ĊĊĠĠĠĠĠĠĠ Ġvar Ġle l Url Ġ= ĠRegex (""" [' "]( http .*? scan manga . eu .* )[' "] "" "). find ( doc String )?. group Values ?. get ( 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( le l Url Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġle l Url Ġ= ĠRegex (""" [' "]( http .*? le [ il ]. scan - manga . com .* )[' "] "" "). find ( doc String )?. group Values ?. get ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRegex (""" [" ']( .*? zone ID .*? page ID .*? site ID .* ?) [" '] "" "). findAll ( doc String ). toList (). map Indexed Ġ{ Ġi , Ġpage Param Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage ( i , Ġdocument . location (), Ġle l Url Ġ+ Ġpage Param . group Values [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( document : ĠDocument ): ĠString Ġ= Ġthrow ĠUnsupportedOperationException (" Not ĠUsed ") ĊĊĠĠĠ Ġoverride Ġfun Ġimage Request ( page : ĠPage ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Headers Ġ= Ġheaders Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" Refer er ", Ġpage . url ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ( page . imageUrl !! , Ġimg Headers ) ĊĠĠĠ Ġ} Ċ } Ċ