package Ġeu . kan ade . t ach iy omi . extension . zh . y imm h Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . net . Uri Ċ import Ġeu . kan ade . t ach iy omi . network . GET Ċ 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 . 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 Ġeu . kan ade . t ach iy omi . util . as J soup Ċ import Ġokhttp 3 . Headers Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . json . JSONObject Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . js oup . nodes . Element Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . Trust Manager Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ class ĠY imm h Ġ: ĠParsed Http Source () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġ" å¿ Ĩ æ¼ « " ĊĠĠĠ Ġoverride Ġval Ġlang : ĠString Ġ= Ġ" zh " ĊĠĠĠ Ġoverride Ġval Ġsupports Latest : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġval ĠbaseUrl : ĠString Ġ= Ġ" https :// m . y imm h . com " ĊĠĠĠ Ġoverride Ġfun Ġheaders Builder () Ġ= ĠHeaders . Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" User - Agent ", Ġ" Mozilla / 5 . 0 Ġ( Android Ġ 1 1 ; ĠMobile ; Ġrv : 8 3 . 0 ) ĠGecko / 8 3 . 0 ĠFirefox / 8 3 . 0 ") ĊĠĠĠ Ġoverride Ġval Ġclient : ĠOk HttpClient Ġ= Ġget Unsafe Ok HttpClient () ĊĊĠĠĠ Ġ// ĠTr usted Ġall Ġcertificates ĊĠĠĠ Ġprivate Ġfun Ġget Unsafe Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġtrust Ġmanager Ġthat Ġdoes Ġnot Ġvalidate Ġcertificate Ġchains ĊĠĠĠĠĠĠĠ Ġval Ġtrust All Certs Ġ= ĠarrayOf < Trust Manager >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Custom X 5 0 9 Trust Manager ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠX 5 0 9 Trust Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Trust All X 5 0 9 Trust Manager ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Client Trusted ( chain : ĠArray < out ĠX 5 0 9 Certificate > ?, Ġauth Type : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Trust All X 5 0 9 Trust Manager ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Server Trusted ( chain : ĠArray < out ĠX 5 0 9 Certificate > ?, Ġauth Type : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Accepted Iss u ers () Ġ= ĠarrayOf < X 5 0 9 Certificate >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInstall Ġthe Ġall - trust ing Ġtrust Ġmanager ĊĠĠĠĠĠĠĠ Ġval Ġssl Context Ġ= ĠSSL Context . getInstance (" SSL ") ĊĠĠĠĠĠĠĠ Ġssl Context . init ( null , Ġtrust All Certs , Ġjava . security . Secure Random ()) ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġan Ġssl Ġsocket Ġfactory Ġwith Ġour Ġall - trust ing Ġmanager ĊĠĠĠĠĠĠĠ Ġval Ġssl Socket Factory Ġ= Ġssl Context . socket Factory ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ssl Socket Factory ( ssl Socket Factory , Ġtrust All Certs [ 0 ] Ġas ĠX 5 0 9 Trust Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. hostname Verifier Ġ{ Ġ_, Ġ_ Ġ-> Ġtrue Ġ}. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPop ular ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠInt ) Ġ= ĠGET ("$ baseUrl / rank ", Ġheaders ) ĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Next Page Selector (): ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Selector (): ĠString Ġ= Ġ" ul . rank - list Ġ> Ġa " ĊĠĠĠ Ġoverride Ġfun Ġpopular M anga From Element ( element : ĠElement ): ĠSM anga Ġ= ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . select (" p . rank - list - info - right - title "). text () ĊĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . attr (" abs : href ")) ĊĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġelement . select (" img "). attr (" abs : data - original ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLatest ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body ?. string (). or Empty () ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( body ) ĊĠĠĠĠĠĠĠ Ġif Ġ( json . getInt (" err ") Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( listOf < SM anga >(), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm ang as Ġ= Ġarray ListOf < SM anga >() ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= Ġjson . get JSONArray (" books ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbooks . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġbooks . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ang as . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġbook . getString (" book _ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"/ book /${ book . getString (" unique _ id ") }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġbook . getString (" cover _ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( m ang as , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Request ( page : ĠInt ) Ġ= ĠGET ("$ baseUrl / get Update ? page =${ page Ġ* Ġ 1 5 Ġ- Ġ 1 5 }", Ġheaders ) ĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Next Page Selector (): ĠString ? Ġ= Ġthrow ĠException (" Not Ġused ") ĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Selector () Ġ= Ġthrow ĠException (" Not Ġused ") ĊĠĠĠ Ġoverride Ġfun Ġlatest Updates From Element ( element : ĠElement ) Ġ= Ġthrow ĠException (" Not Ġused ") ĊĊĠĠĠ Ġ// ĠSearch ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( baseUrl ). build Up on () ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append Path (" search ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append QueryParameter (" keyword ", Ġquery ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append Path (" get Books ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilters . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠCategory Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" tag ", Ġit . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it Ġis ĠStatus Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" end ", Ġit . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" page ", Ġ( page Ġ* Ġ 1 5 Ġ- Ġ 1 5 ). toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ( uri . toString (), Ġheaders ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( response . request . url . toString (). startsWith (" https :// m . y imm h . com / search ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . search M anga Parse ( response ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Updates Parse ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Next Page Selector (): ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Selector (): ĠString Ġ= Ġ" ul . book - list Ġ> Ġli " ĊĠĠĠ Ġoverride Ġfun Ġsearch M anga From Element ( element : ĠElement ): ĠSM anga Ġ= ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . select (" p . book - list - info - title "). text () ĊĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . select (" a "). attr (" abs : href ")) ĊĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġelement . select (" img "). attr (" abs : data - original ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDetails ĊĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( document : ĠDocument ): ĠSM anga Ġ= ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġdocument . select (" p . detail - main - info - title "). text () ĊĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġdocument . select (" div . detail - main - cover Ġ> Ġimg "). attr (" abs : data - original ") ĊĠĠĠĠĠĠĠ Ġauthor Ġ= Ġdocument . select (" p . detail - main - info - author : contains ( ä½ľèĢħ ï¼ļ ) Ġ> Ġa "). text () ĊĠĠĠĠĠĠĠ Ġartist Ġ= Ġauthor ĊĠĠĠĠĠĠĠ Ġgenre Ġ= Ġdocument . select (" p . detail - main - info - class Ġ> Ġspan "). each Text (). join ToString (", Ġ") ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdocument . select (" p . detail - desc "). text () ĊĠĠĠĠĠĠĠ Ġstatus Ġ= Ġwhen Ġ( document . select (" span . detail - list - title - 1 "). text ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" è¿ŀ è½½ ä¸Ń " Ġ-> ĠSM anga . ONGO ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" å·² å®Į ç»ĵ " Ġ-> ĠSM anga . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSM anga . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠChapter s ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Selector (): ĠString Ġ= Ġ" ul # detail - list - select Ġ> Ġli " ĊĠĠĠ Ġoverride Ġfun Ġchapter From Element ( element : ĠElement ): ĠS Chapter Ġ= ĠS Chapter . create (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . select (" a . chapter item "). attr (" abs : href ")) ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġelement . select (" a . chapter item "). text () ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġchapter List Parse ( response : ĠResponse ): ĠList < S Chapter > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . chapter List Parse ( response ). reversed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPages ĊĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( document : ĠDocument ): ĠList < Page > Ġ= Ġmutable ListOf < Page >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġdocument ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġpage . select (" div # cp _ img Ġ> Ġimg . lazy ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Page ( size , Ġ"", Ġit . attr (" abs : data - src "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Page Ġ= Ġpage . select (" a . view - bottom - bar - item : contains ( ä¸ĭ ä¸Ģ é¡µ ) "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Page . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġclient . new Call ( GET ( baseUrl Ġ+ Ġnext Page , Ġheaders )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute (). as J soup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( document : ĠDocument ): ĠString Ġ= Ġthrow ĠException (" Not ĠUsed ") ĊĊĠĠĠ Ġ// ĠFilters ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter List () Ġ= ĠFilter List ( ĊĠĠĠĠĠĠĠ ĠFilter . Header (" å¦Ĥæŀľ ä½¿çĶ¨ æĸĩæľ¬ æĲľç´¢ "), ĊĠĠĠĠĠĠĠ ĠFilter . Header (" è¿ĩæ»¤ åĻ¨ å°Ĩ è¢« å¿½ çķ¥ "), ĊĠĠĠĠĠĠĠ ĠCategory Filter (), ĊĠĠĠĠĠĠĠ ĠStatus Filter () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġclass ĠCategory Filter Ġ: ĠUri Select Filter Path ( ĊĠĠĠĠĠĠĠ Ġ" åĪĨç±» ", ĊĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" åħ¨éĥ¨ ", Ġ" åħ¨éĥ¨ "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" èĢ ½ ç¾İ ", Ġ" èĢ ½ ç¾İ "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" çĥŃ è¡ Ģ ", Ġ" çĥŃ è¡ Ģ "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" å¤§ å¥³ ä¸» ", Ġ" å¤§ å¥³ ä¸» ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġclass ĠStatus Filter Ġ: ĠUri Select Filter Path ( ĊĠĠĠĠĠĠĠ Ġ" è¿Ľ åº¦ ", ĊĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ("- 1 ", Ġ" åħ¨éĥ¨ "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" 2 ", Ġ" è¿ŀ è½½ ä¸Ń "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" 1 ", Ġ" å·² å®Į ç»ĵ ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġthat Ġcreates Ġa Ġselect Ġfilter . ĠEach Ġentry Ġin Ġthe Ġdropdown Ġhas Ġa Ġname Ġand Ġa Ġdisplay Ġname . ĊĠĠĠĠ Ġ* ĠIf Ġan Ġentry Ġis Ġselected Ġit Ġis Ġappended Ġas Ġa Ġquery Ġparameter Ġonto Ġthe Ġend Ġof Ġthe ĠURI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// Ġvals : Ġ< name , Ġdisplay > ĊĠĠĠ Ġprivate Ġopen Ġclass ĠUri Select Filter Path ( ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġvals : ĠArray < Pair < String , ĠString >> ĊĠĠĠ Ġ) Ġ: ĠFilter . Select < String >( displayName , Ġvals . map Ġ{ Ġit . second Ġ}. to Typed Array ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġto Uri () Ġ= Ġvals [ state ]. first ĊĠĠĠ Ġ} Ċ } Ċ