package Ġeu . kan ade . t ach iy omi . data . source . online Ċ Ċ import Ġandroid . content . Context Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . Chapter Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . M anga Ċ import Ġeu . kan ade . t ach iy omi . data . network . GET Ċ import Ġeu . kan ade . t ach iy omi . data . network . POST Ċ import Ġeu . kan ade . t ach iy omi . data . source . Source Ċ import Ġeu . kan ade . t ach iy omi . data . source . get Languages Ċ import Ġeu . kan ade . t ach iy omi . data . source . model . M ang as Page Ċ import Ġeu . kan ade . t ach iy omi . data . source . model . Page Ċ import Ġeu . kan ade . t ach iy omi . util . as J soup Ċ import Ġeu . kan ade . t ach iy omi . util . attr Or Text Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Element Ċ import Ġrx . Observable Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠYaml Online Source ( context : ĠContext , Ġmappings : ĠMap < *, Ġ* >) Ġ: ĠOnline Source ( context ) Ġ{ ĊĊĠĠĠ Ġval Ġmap Ġ= ĠYaml Source Node ( mappings ) ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . name ĊĊĠĠĠ Ġoverride Ġval ĠbaseUrl Ġ= Ġmap . host . let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . endsWith ("/ ")) Ġit . drop Last ( 1 ) Ġelse Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlang Ġ= Ġmap . lang . toUpperCase (). let Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠ Ġget Languages (). find Ġ{ Ġcode Ġ== Ġit . code Ġ} !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġclient Ġ= Ġwhen ( map . client ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" cloudflare " Ġ-> Ġnetwork . cloudflare Client ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnetwork . client ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġid Ġ= Ġmap . id . let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠInt ) Ġit Ġelse Ġ( lang . code . hashCode () Ġ+ Ġ 3 1 Ġ* Ġit . hashCode ()) Ġand Ġ 0 x 7 fffffff ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠM ang as Page ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page . page Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . url Ġ= Ġpopular M anga Initial Url () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( map . popular . method ?. toLowerCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" post " Ġ-> ĠPOST ( page . url , Ġheaders , Ġmap . popular . create Form ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGET ( page . url , Ġheaders ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Initial Url () Ġ= Ġmap . popular . url ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Parse ( response : ĠResponse , Ġpage : ĠM ang as Page ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġresponse . as J soup () ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġdocument . select ( map . popular . manga _ css )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM anga . create ( id ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage . m ang as . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap . popular . next _ url _ css ?. let Ġ{ Ġselector Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . next Page Url Ġ= Ġdocument . select ( selector ). first ()?. abs Url (" href ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠM ang as Page , Ġquery : ĠString , Ġfilters : ĠList < Filter >): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( page . page Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . url Ġ= Ġsearch M anga Initial Url ( query , Ġfilters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( map . search . method ?. toLowerCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" post " Ġ-> ĠPOST ( page . url , Ġheaders , Ġmap . search . create Form ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGET ( page . url , Ġheaders ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Initial Url ( query : ĠString , Ġfilters : ĠList < Filter >) Ġ= Ġmap . search . url . replace ("\ $ query ", Ġquery ) ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Parse ( response : ĠResponse , Ġpage : ĠM ang as Page , Ġquery : ĠString , Ġfilters : ĠList < Filter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġresponse . as J soup () ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġdocument . select ( map . search . manga _ css )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM anga . create ( id ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġelement . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Url Without Domain ( element . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage . m ang as . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap . search . next _ url _ css ?. let Ġ{ Ġselector Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . next Page Url Ġ= Ġdocument . select ( selector ). first ()?. abs Url (" href ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( response : ĠResponse , Ġm anga : ĠM anga ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġresponse . as J soup () ĊĠĠĠĠĠĠĠ Ġwith ( map . manga ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpool Ġ= Ġparts . get ( document ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . author Ġ= Ġauthor ?. process ( document , Ġpool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . artist Ġ= Ġartist ?. process ( document , Ġpool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . description Ġ= Ġsummary ?. process ( document , Ġpool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . thumbnail _ url Ġ= Ġcover ?. process ( document , Ġpool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . genre Ġ= Ġgen res ?. process ( document , Ġpool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm anga . status Ġ= Ġstatus ?. getStatus ( document , Ġpool ) Ġ?: ĠM anga . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Parse ( response : ĠResponse , Ġchapter s : ĠMutable List < Chapter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġresponse . as J soup () ĊĠĠĠĠĠĠĠ Ġwith ( map . chapter s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpool Ġ= Ġempty Map < String , ĠElement >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( date ?. format , ĠLocale . EN GL ISH ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġdocument . select ( chapter _ css )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchapter Ġ= ĠChapter . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . select ( title ). first (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter . name Ġ= Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter . set Url Without Domain ( it . attr (" href ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Element Ġ= Ġelement . select ( date ?. select ). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter . date _ upload Ġ= Ġdate ?. getDate ( date Element , Ġpool , ĠdateFormat )?. time Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter s . add ( chapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( response : ĠResponse , Ġpages : ĠMutable List < Page >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body (). string () ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġresponse . request (). url (). toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġlazy Ġinitialization Ġin ĠKotlin Ġ 1 . 1 ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( body , Ġurl ) ĊĊĠĠĠĠĠĠĠ Ġwith ( map . pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCapture Ġa Ġlist Ġof Ġvalues Ġwhere Ġpage Ġurls Ġwill Ġbe Ġresolved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcaptured Pages Ġ= Ġif Ġ( pages _ regex Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages _ regex !!. to Regex (). findAll ( body ). map Ġ{ Ġit . value Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( pages _ css Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . select ( pages _ css ). map Ġ{ Ġit . attr Or Text ( pages _ attr !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġeach Ġcaptured Ġvalue , Ġobtain Ġthe Ġurl Ġand Ġcreate Ġa Ġnew Ġpage . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Pages ?. forEach Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġcaptured Ġvalue Ġisn 't Ġan Ġurl , Ġwe Ġhave Ġto Ġuse Ġreplaces Ġwith Ġthe Ġchapter Ġurl . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Url Ġ= Ġif Ġ( replace Ġ!= Ġnull Ġ&& Ġreplacement Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . replace ( replace !!. to Regex (), Ġreplacement !!. replace ("\ $ value ", Ġvalue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages . add ( Page ( pages . size , Ġpage Url )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCapture Ġa Ġlist Ġof Ġimages . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcaptured Images Ġ= Ġif Ġ( image _ regex Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ regex !!. to Regex (). findAll ( body ). map Ġ{ Ġit . groups [ 1 ]?. value Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( image _ css Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . select ( image _ css ). map Ġ{ Ġit . abs Url ( image _ attr ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAssign Ġthe Ġimage Ġurl Ġto Ġeach Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Images ?. forEach Indexed Ġ{ Ġi , Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġpages . getOrElse ( i ) Ġ{ ĠPage ( i , Ġ""). apply Ġ{ Ġpages . add ( this ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage . imageUrl Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( response : ĠResponse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body (). string () ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġresponse . request (). url (). toString () ĊĊĠĠĠĠĠĠĠ Ġwith ( map . pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( image _ regex Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ regex !!. to Regex (). find ( body ) !!. groups [ 1 ] !!. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( image _ css Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ soup . parse ( body , Ġurl ). select ( image _ css ). first (). abs Url ( image _ attr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" image _ regex Ġand Ġimage _ css Ġare Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ