package Ġeu . kan ade . t ach iy omi . extension . all . lan rar agi Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . net . Uri Ċ import Ġandroid . support . v 7 . preference . EditText Preference Ċ import Ġandroid . support . v 7 . preference . Preference Screen Ċ import Ġcom . github . sal om on br ys . kot son . fromJson Ċ import Ġcom . google . gson . Gson Ċ import Ġeu . kan ade . t ach iy omi . extension . all . lan rar agi . model . Archive Page Ċ import Ġeu . kan ade . t ach iy omi . extension . all . lan rar agi . model . Archive SearchResult Ċ import Ġeu . kan ade . t ach iy omi . network . GET Ċ import Ġeu . kan ade . t ach iy omi . source . Configurable Source Ċ 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 . Http Source Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġu y . ko hes ive . in jekt . In jekt Ċ import Ġu y . ko hes ive . in jekt . api . get Ċ Ċ open Ġclass ĠL AN rar agi Ġ: ĠConfigur able Source , ĠHttp Source () Ġ{ ĊĊĠĠĠ Ġoverride Ġval ĠbaseUrl : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString (" hostname ", Ġ" http :// 1 2 7 . 0 . 0 . 1 : 3 0 0 0 ") !! ĊĊĠĠĠ Ġoverride Ġval Ġlang Ġ= Ġ" all " ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" LAN rar agi " ĊĊĠĠĠ Ġoverride Ġval Ġsupports Latest Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval ĠapiKey : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpreferences . getString (" apiKey ", Ġ"") !! ĊĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson Ġ= ĠGson () ĊĊĠĠĠ Ġoverride Ġfun Ġm anga Details Parse ( response : ĠResponse ): ĠSM anga Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠgetId ( response ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġget Thumbnail Uri ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchapter List Parse ( response : ĠResponse ): ĠList < S Chapter > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠgetId ( response ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġget Api Uri Builder ("/ api / extract ") ĊĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" id ", Ġid ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS Chapter . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Build Ġ= Ġuri . build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"${ uri Build . encoded Path }? ${ uri Build . encoded Query }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter _ number Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Chapter " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpage List Parse ( response : ĠResponse ): ĠList < Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarchive Page Ġ= Ġgson . fromJson < Archive Page >( response . body () !!. string ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarchive Page . pages . map Indexed Ġ{ Ġindex , Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ("${ baseUrl }${ url . trim Start ('.') }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage ( index , Ġuri . toString (), Ġuri . toString (), Ġuri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠimageUrl Parse ( response : ĠResponse ) Ġ= Ġthrow ĠUnsupportedOperationException (" imageUrl Parse Ġis Ġunused ") ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch M anga Request ( page , Ġ"", ĠFilter List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpopular M anga Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch M anga Parse ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Request ( page : ĠInt ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch M anga Request ( page , Ġ"", ĠFilter List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlatest Updates Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsearch M anga Parse ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Result Count : ĠInt Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Request ( page : ĠInt , Ġquery : ĠString , Ġfilters : ĠFilter List ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġget Api Uri Builder ("/ api / search ") ĊĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" start ", Ġ(( page Ġ- Ġ 1 ) Ġ* Ġlast Result Count ). toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( query . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" filter ", Ġquery ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGET ( uri . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch M anga Parse ( response : ĠResponse ): ĠM ang as Page Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Result Ġ= Ġgson . fromJson < Archive SearchResult >( response . body () !!. string ()) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Start Ġ= Ġget Start ( response ) ĊĊĠĠĠĠĠĠĠ Ġlast Result Count Ġ= Ġjson Result . data . size ĊĊĠĠĠĠĠĠĠ Ġreturn ĠM ang as Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Result . data . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSM anga . create (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"/ reader ? id =${ it . arc id }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġit . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail _ url Ġ= Ġget Thumbnail Uri ( it . arc id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Ġ= Ġit . tags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Ġ= Ġget Artist ( it . tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġartist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcurrent Start Ġ+ Ġjson Result . data . size Ġ< Ġjson Result . records Filtered ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPreferences ĊĠĠĠ Ġprivate Ġval Ġpreferences : ĠSharedPreferences Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠIn jekt . get < Application >(). get SharedPreferences (" source _$ id ", Ġ 0 x 0 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Preference Screen ( screen : ĠPreference Screen ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhostname Pref Ġ= ĠEditText Preference ( screen . context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" Hostname " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Hostname " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠbaseUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠbaseUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= Ġ" Hostname " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhostname Ġ= ĠnewValue Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hostname . startsWith (" http :// ") Ġ&& Ġ! hostname . startsWith (" https :// ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhostname Ġ= Ġ" http :// $ hostname " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġhostname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġhostname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString (" hostname ", Ġhostname ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠapiKey Pref Ġ= ĠEditText Preference ( screen . context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" API ĠKey " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" API ĠKey " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= Ġ" API ĠKey " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠapiKey Ġ= ĠnewValue Ġas ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString (" apiKey ", ĠnewValue ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscreen . add Preference ( hostname Pref ) ĊĠĠĠĠĠĠĠ Ġscreen . add Preference ( apiKey Pref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Preference Screen ( screen : Ġandroidx . preference . Preference Screen ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhostname Pref Ġ= Ġandroidx . preference . EditText Preference ( screen . context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" Hostname " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Hostname " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠbaseUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠbaseUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= Ġ" Hostname " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhostname Ġ= ĠnewValue Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hostname . startsWith (" http :// ") Ġ&& Ġ! hostname . startsWith (" https :// ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhostname Ġ= Ġ" http :// $ hostname " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġhostname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġhostname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString (" hostname ", Ġhostname ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠapiKey Pref Ġ= Ġandroidx . preference . EditText Preference ( screen . context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" API ĠKey " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" API ĠKey " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Title Ġ= Ġ" API ĠKey " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠapiKey Ġ= ĠnewValue Ġas ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= ĠapiKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). putString (" apiKey ", ĠnewValue ). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscreen . add Preference ( hostname Pref ) ĊĠĠĠĠĠĠĠ Ġscreen . add Preference ( apiKey Pref ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHelper ĊĠĠĠ Ġprivate Ġfun Ġget Api Uri Builder ( path : ĠString ): ĠUri . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ("$ baseUrl $ path "). build Up on () ĊĠĠĠĠĠĠĠ Ġif Ġ( apiKey . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" key ", ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġuri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Thumbnail Uri ( id : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġget Api Uri Builder ("/ api / thumbnail ") ĊĠĠĠĠĠĠĠ Ġuri . append QueryParameter (" id ", Ġid ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġuri . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Top Response ( response : ĠResponse ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( response . prior Response () Ġ== Ġnull ) Ġresponse Ġelse Ġget Top Response ( response . prior Response () !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetId ( response : ĠResponse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Top Response ( response ). request (). url (). query Parameter (" id "). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Start ( response : ĠResponse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Top Response ( response ). request (). url (). query Parameter (" start ") !!. toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Artist ( tags : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtags . split (',' ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . contains (': ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġit . trim (). split (': ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp [ 0 ]. equals (" artist ", Ġtrue )) Ġreturn Ġtemp [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" N / A " ĊĠĠĠ Ġ} Ċ } Ċ