package Ġeu . kan ade . t ach iy omi . extension . en . m ang as ail Ċ Ċ import Ġcom . github . sal om on br ys . kot son . fromJson Ċ import Ġcom . github . sal om on br ys . kot son . get Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġeu . kan ade . t ach iy omi . network . GET Ċ import Ġeu . kan ade . t ach iy omi . source . model . Filter List Ċ 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 Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Locale Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġorg . js oup . J soup . parse Ċ import Ġorg . js oup . nodes . Document Ċ import Ġorg . js oup . nodes . Element Ċ Ċ class ĠM ang as ail Ġ: ĠParsed Http Source () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" M ang as ail " ĊĊĠĠĠ Ġoverride Ġval ĠbaseUrl Ġ= Ġ" https :// www . m ang as ail . co " ĊĊĠĠĠ Ġoverride Ġval Ġlang Ġ= Ġ" en " ĊĊĠĠĠ Ġoverride Ġval Ġsupports Latest Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġclient : ĠOk HttpClient Ġ= Ġnetwork . cloudflare Client ĊĊĠĠĠ Ġ/* ĠSite Ġloads Ġsome Ġm anga Ġinfo Ġ( manga Ġcover , Ġauthor Ġname , Ġstatus , Ġetc .) Ġclient Ġside Ġthrough ĠJ Query ĊĠĠĠ Ġneed Ġto Ġadd Ġthis Ġheader Ġfor Ġwhen Ġwe Ġrequest Ġthese Ġdata Ġfragments ĊĠĠĠ ĠAlso Ġnecessary Ġfor Ġlatest Ġupdates Ġrequest Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġheaders Builder () Ġ= Ġsuper . headers Builder (). add (" X - Auth cache ", Ġ" 1 ") !! ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Selector () Ġ= Ġ" tbody Ġtr " ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( page Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET ("$ baseUrl / directory / hot ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET ("$ baseUrl / directory / hot ? page =" Ġ+ Ġ( page Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Selector () Ġ= Ġ" ul # latest - list Ġ> Ġli " ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGET ("$ baseUrl / sites / all / modules / auth cache / modules / auth cache _ p 1 3 n / front controller / auth cache . php ? r = frag / block / show manga - last est _ list & o [ q ]= node ", Ġheaders ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga From Element ( element : ĠElement ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm anga Ġ= ĠSM anga . create () ĊĠĠĠĠĠĠĠ Ġelement . select (" td : first - of - type Ġa "). first (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . set Url Without Domain ( it . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . title Ġ= Ġit . text () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm anga . thumbnail _ url Ġ= Ġelement . select (" td Ġimg "). first (). attr (" src ") ĊĠĠĠĠĠĠĠ Ġreturn Ġm anga ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates From Element ( element : ĠElement ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm anga Ġ= ĠSM anga . create () ĊĠĠĠĠĠĠĠ Ġm anga . title Ġ= Ġelement . select (" a Ġstrong "). text () ĊĠĠĠĠĠĠĠ Ġelement . select (" a : has ( img ) "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . url Ġ= Ġit . attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThumb nails Ġare Ġkind Ġof Ġlow - res Ġon Ġlatest Ġupdates Ġpage , Ġtransform Ġthe Ġimg Ġurl Ġto Ġget Ġa Ġbetter Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . thumbnail _ url Ġ= Ġit . select (" img "). first (). attr (" src "). substring Before (" ? "). replace (" styles / min ic over / public /", Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm anga ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Next Page Selector () Ġ= Ġ" table Ġ+ Ġdiv . text - center Ġul . pagination Ġli . next Ġa " ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Next Page Selector (): ĠString Ġ= Ġ" There Ġis Ġno Ġnext Ġpage " ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( page Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET ("$ baseUrl / search / node /$ query ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGET ("$ baseUrl / search / node /$ query ? page =" Ġ+ Ġ( page Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Selector () Ġ= Ġ" h 3 . title " ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga From Element ( element : ĠElement ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm anga Ġ= ĠSM anga . create () ĊĠĠĠĠĠĠĠ Ġelement . select (" a "). first (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . set Url Without Domain ( it . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . title Ġ= Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSearch Ġpage Ġdoesn 't Ġcontain Ġcover Ġimages , Ġhave Ġto Ġget Ġthem Ġfrom Ġthe Ġm anga 's Ġpage ; Ġbut Ġfirst Ġwe Ġneed Ġthat Ġpage 's Ġnode Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠgetNode Number ( client . new Call ( GET ( it . attr (" href "), Ġheaders )). execute (). as J soup ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . thumbnail _ url Ġ= ĠgetNode Detail ( node , Ġ" field _ image 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm anga ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFunction Ġto Ġget Ġdata Ġfragments Ġfrom Ġwebsite ĊĠĠĠ Ġprivate Ġfun ĠgetNode Detail ( node : ĠString , Ġfield : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Url Ġ= Ġ"$ baseUrl / sites / all / modules / auth cache / modules / auth cache _ p 1 3 n / front controller / auth cache . php ? a [ field ][ 0 ] =$ node : full : en & r = asm / field / node /$ field & o [ q ]= node /$ node " ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġclient . new Call ( GET ( request Url , Ġheaders )). execute () ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġif Ġ( call . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field _ image 2 " Ġ-> Ġreturn Ġgson . fromJson < JsonObject >( call . body () !!. string ()) [" field "][" $ node : full : en "]. asString . substring After (" src =\"" ). substring Before ("\" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field _ status ", Ġ" field _ author ", Ġ" field _ artist " Ġ-> Ġreturn Ġgson . fromJson < JsonObject >( call . body () !!. string ()) [" field "][" $ node : full : en "]. asString . substring After (" even \"> "). substring Before ("</ div >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body " Ġ-> Ġreturn Ġparse ( gson . fromJson < JsonObject >( call . body () !!. string ()) [" field "][" $ node : full : en "]. asString , ĠbaseUrl ). select (" p "). text (). substring After (" summary : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field _ genres " Ġ-> Ġreturn Ġparse ( gson . fromJson < JsonObject >( call . body () !!. string ()) [" field "][" $ node : full : en "]. asString , ĠbaseUrl ). select (" a "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġa Ġpage 's Ġnode Ġnumber Ġso Ġwe Ġcan Ġget Ġdata Ġfragments Ġfor Ġthat Ġpage ĊĠĠĠ Ġprivate Ġfun ĠgetNode Number ( document : ĠDocument ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument . select ("[ rel = short link ]"). attr (" href "). split ("/ "). last (). replace (" \"", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Next Page Selector () Ġ= Ġpopular M anga Next Page Selector () ĊĊĠĠĠ Ġ// ĠOn Ġsource 's Ġwebsite Ġmost Ġof Ġthese Ġdetails Ġare Ġloaded Ġthrough ĠJ Query ĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( document : ĠDocument ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Element Ġ= Ġdocument . select (" div . main - content - inner ") ĊĠĠĠĠĠĠĠ Ġval Ġm anga Ġ= ĠSM anga . create () ĊĠĠĠĠĠĠĠ Ġm anga . title Ġ= Ġinfo Element . select (" h 1 "). first (). text () ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠgetNode Number ( document ) ĊĠĠĠĠĠĠĠ Ġm anga . author Ġ= ĠgetNode Detail ( node , Ġ" field _ author ") ĊĠĠĠĠĠĠĠ Ġm anga . artist Ġ= ĠgetNode Detail ( node , Ġ" field _ artist ") ĊĠĠĠĠĠĠĠ Ġm anga . genre Ġ= ĠgetNode Detail ( node , Ġ" field _ genres ") ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠgetNode Detail ( node , Ġ" field _ status ") ĊĠĠĠĠĠĠĠ Ġm anga . status Ġ= Ġparse Status ( status ) ĊĠĠĠĠĠĠĠ Ġm anga . description Ġ= ĠgetNode Detail ( node , Ġ" body ") ĊĠĠĠĠĠĠĠ Ġm anga . thumbnail _ url Ġ= ĠgetNode Detail ( node , Ġ" field _ image 2 ") ĊĠĠĠĠĠĠĠ Ġreturn Ġm anga ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Status ( status : ĠString ?) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġstatus Ġ== Ġnull Ġ-> ĠSM anga . UNKNOWN ĊĠĠĠĠĠĠĠ Ġstatus . contains (" O ngo ing ") Ġ-> ĠSM anga . ONGO ING ĊĠĠĠĠĠĠĠ Ġstatus . contains (" Completed ") Ġ-> ĠSM anga . COMPLETED ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSM anga . UNKNOWN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Selector () Ġ= Ġ" tbody Ġtr " ĊĊĠĠĠ Ġoverride Ġfun Ġchapter From Element ( element : ĠElement ): ĠS Chapter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Element Ġ= Ġelement . select (" a "). first () ĊĊĠĠĠĠĠĠĠ Ġval Ġchapter Ġ= ĠS Chapter . create () ĊĠĠĠĠĠĠĠ Ġchapter . set Url Without Domain ( url Element . attr (" href ")) ĊĠĠĠĠĠĠĠ Ġchapter . name Ġ= Ġelement . select (" a "). text () ĊĠĠĠĠĠĠĠ Ġchapter . date _ upload Ġ= Ġparse Chapter Date ( element . select (" td Ġ+ Ġtd "). text ()) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġchapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" d ĠM MM Ġy yyy ", ĠLocale . US ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Chapter Date ( string : ĠString ): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . parse ( string . substring After (" on Ġ" )). time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( document : ĠDocument ): ĠList < Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpages Ġ= Ġmutable ListOf < Page >() ĊĊĠĠĠĠĠĠĠ Ġdocument . select (" div # images Ġimg ") ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( Page ( pages . size , Ġ"", Ġit . attr (" src "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( document : ĠDocument ): ĠString Ġ= Ġthrow ĠUnsupportedOperationException (" Not Ġused ") ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter List () Ġ= ĠFilter List () Ċ } Ċ