package Ġcom . ches ire . mal ime . k its u . api Ċ Ċ import Ġcom . ches ire . mal ime . core . api . Auth Api Ċ import Ġcom . ches ire . mal ime . core . api . Library Api Ċ import Ġcom . ches ire . mal ime . core . api . Search Api Ċ import Ġcom . ches ire . mal ime . core . flags . ItemType Ċ import Ġcom . ches ire . mal ime . core . flags . Series Status Ċ import Ġcom . ches ire . mal ime . core . flags . Subtype Ċ import Ġcom . ches ire . mal ime . core . flags . User Series Status Ċ import Ġcom . ches ire . mal ime . core . models . Auth Model Ċ import Ġcom . ches ire . mal ime . core . models . Mal ime Model Ċ import Ġcom . ches ire . mal ime . k its u . models . Library Item Ċ import Ġcom . ches ire . mal ime . k its u . models . request . Login Request Ċ import Ġcom . ches ire . mal ime . k its u . models . request . Refresh Auth Request Ċ import Ġcom . ches ire . mal ime . k its u . models . response . Update Item Response Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . RequestBody Ċ import Ġorg . json . JSONObject Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . net . Http URLConnection Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠMAX _ RE TR IES Ġ= Ġ 3 Ċ Ċ @ Suppress (" Too Many Functions ") Ċ class ĠK its u Manager Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠK its u Service , ĊĠĠĠ Ġauthor izer : ĠK its u Author izer Ċ ) Ġ: ĠAuth Api , ĠLibrary Api , ĠSearch Api Ġ{ ĊĠĠĠ Ġprivate Ġval ĠuserId Ġ= Ġauthor izer . retrieve User () ĊĊĠĠĠ Ġoverride Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ): ĠSingle < Auth Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġapi Ġmentions Ġit Ġwants Ġthe Ġusername , Ġbut Ġit Ġseems Ġit Ġwants Ġthe Ġemail Ġaddress Ġinstead ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . login ( Login Request ( username , Ġpassword )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Login Ġsuccessful ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ Ġresponse Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . accessToken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . refresh Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . createdAt Ġ+ Ġresponse Object . expires In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" k its u " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġlogging Ġin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget New AuthToken ( refresh Token : ĠString ): ĠSingle < Auth Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . refresh Auth ( Refresh Auth Request ( refresh Token )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Successfully Ġref reshed Ġauth Ġtoken ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ Ġresponse Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . accessToken , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . refresh Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Object . createdAt Ġ+ Ġresponse Object . expires In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" k its u " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġre generating Ġauth Ġtoken ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget UserId (): ĠSingle < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . getUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġbody Ġ!= Ġnull Ġ&& Ġbody . data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" User Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( body . data [ 0 ]. id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġgetting Ġthe Ġuser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Library (): ĠObservable < List < Mal ime Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġget Ġan ime Ġand Ġget Ġm anga Ġparallel ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Entries ForType ( ItemType . An ime ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Entries ForType ( ItemType . M anga ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Complex Method ", Ġ" Loop With Too Many Jump Statements ") ĊĠĠĠ Ġprivate Ġfun ĠgetUser Entries ForType ( type : ĠItem Type ): ĠObservable < List < Mal ime Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpage Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġretries Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Getting Ġuser Ġ$ type Ġfrom Ġoffset Ġ$ offset ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġif Ġ( type Ġ== ĠItem Type . An ime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . getUser An ime ( userId , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . getUser M anga ( userId , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġbody Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Found Ġ${ body . data . count ()} Ġitems ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretries Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġit Ġcontains Ġthe Ġ" next " Ġlink , Ġthere Ġare Ġmore Ġto Ġget ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġbody . links [" next "] Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Title Data Ġ= Ġbody . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Title Data Ġ= Ġbody . included ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġuser Title Data . zip ( full Title Data ) Ġ{ Ġuser , Ġfull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetModel From ( user , Ġfull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . onNext ( items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ 2 0 0 Ġ* Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable ( response . message ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġgetting Ġthe Ġitems Ġfor Ġtype Ġ$ type , Ġon Ġretry Ġ$ retries /$ MAX _ RE TR IES " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( retries Ġ< ĠMAX _ RE TR IES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretries ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . onComplete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Item ( item : ĠMal ime Model ): ĠSingle < Mal ime Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġcreate New Model ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠRequest Body . create ( MediaType . parse (" application / vnd . api + json "), Ġjson ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . addItem ( request Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġbody Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Successfully Ġupdated Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( getModel From ( body . data , Ġbody . included [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġupdating Ġthe Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Item ( item : ĠMal ime Model ): ĠSingle < Mal ime Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . delete Item ( item . user Series Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġseries Ġis Ġnot Ġfound , Ġits Ġlikely Ġalready Ġdeleted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ|| Ġresponse . code () Ġ== ĠHttp URLConnection . HTTP _ NOT _ FOUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Successfully Ġdeleted Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġdeleting Ġthe Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Item ( ĊĠĠĠĠĠĠĠ Ġitem : ĠMal ime Model , ĊĠĠĠĠĠĠĠ Ġnew Progress : ĠInt , ĊĠĠĠĠĠĠĠ Ġnew Status : ĠUser Series Status ĊĠĠĠ Ġ): ĠSingle < Mal ime Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġcreate Update Model ( item , Ġnew Progress , Ġnew Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠRequest Body . create ( MediaType . parse (" application / vnd . api + json "), Ġjson ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . update Item ( item . user Series Id , Ġrequest Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġbody Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Successfully Ġupdated Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( get Updated Model ( item , Ġbody )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġupdating Ġthe Ġseries ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch For Series With ( title : ĠString , Ġtype : ĠItem Type ): ĠSingle < List < Mal ime Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Response Ġ= Ġservice . search ( type . text , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall Response . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġbody Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Successfully Ġsearched , Ġfound Ġ[ ${ body . data . count ()} ] Ġitems ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success ( body . data . map Ġ{ Ġlib Item Ġ-> ĠgetModel From ( lib Item ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( Throwable ( response . message ()), Ġ" Error Ġperforming Ġsearch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . try OnError ( Throwable ( response . message ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetModel From ( library Item : ĠLibrary Item ): ĠMal ime Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMal ime Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries Id Ġ= Ġlibrary Item . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Series Id Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠItem Type . getType For String ( library Item . type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtype Ġ= ĠSub type . getSub type For K its u String ( library Item . attributes . subtype ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslug Ġ= Ġlibrary Item . attributes . slug , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġlibrary Item . attributes . canonical Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries Status Ġ= ĠSeries Status . getStatus For K its u String ( library Item . attributes . status ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Series Status Ġ= ĠUser Series Status . Unknown , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Length Ġ= Ġif Ġ( ItemType . getType For String ( library Item . type ) Ġ== ĠItem Type . An ime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Item . attributes . episode Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Item . attributes . chapter Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Image Ġ= ĠgetImage ( library Item . attributes . poster Image ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcover Image Ġ= ĠgetImage ( library Item . attributes . cover Image ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn sf w Ġ= Ġlibrary Item . attributes . ns fw , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetModel From ( user : ĠLibrary Item , Ġincluded : ĠLibrary Item ): ĠMal ime Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMal ime Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries Id Ġ= Ġincluded . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Series Id Ġ= Ġuser . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠItem Type . getType For String ( included . type ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtype Ġ= ĠSub type . getSub type For K its u String ( included . attributes . subtype ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslug Ġ= Ġincluded . attributes . slug , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġincluded . attributes . canonical Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries Status Ġ= ĠSeries Status . getStatus For K its u String ( included . attributes . status ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Series Status Ġ= ĠUser Series Status . getStatus For K its u String ( user . attributes . status ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġuser . attributes . progress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Length Ġ= Ġif Ġ( ItemType . getType For String ( included . type ) Ġ== ĠItem Type . An ime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincluded . attributes . episode Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincluded . attributes . chapter Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Image Ġ= ĠgetImage ( included . attributes . poster Image ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcover Image Ġ= ĠgetImage ( included . attributes . cover Image ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn sf w Ġ= Ġincluded . attributes . ns fw , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġincluded . attributes . started At Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġincluded . attributes . finished At Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage ( map : ĠMap < String , ĠAny >? ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap [" large "] Ġas ? ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmap [" medium "] Ġas ? ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmap [" original "] Ġas ? ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmap [" small "] Ġas ? ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmap [" tiny "] Ġas ? ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate New Model ( item : ĠMal ime Model ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJSONObject ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" library Entries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attributes " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" progress " Ġto Ġitem . progress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġitem . user Series Status . k its u String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" relationships " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" users ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto ĠuserId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" media " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġitem . type . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġitem . series Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Update Model ( ĊĠĠĠĠĠĠĠ Ġitem : ĠMal ime Model , ĊĠĠĠĠĠĠĠ Ġnew Progress : ĠInt , ĊĠĠĠĠĠĠĠ Ġnew Status : ĠUser Series Status ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJSONObject ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġitem . user Series Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" library Entries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attributes " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" progress " Ġto Ġnew Progress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġnew Status . k its u String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Updated Model ( ĊĠĠĠĠĠĠĠ Ġoriginal Item : ĠMal ime Model , ĊĠĠĠĠĠĠĠ Ġupdate Item : ĠUpdate Item Response ĊĠĠĠ Ġ): ĠMal ime Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġoriginal Item . copy (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġupdate Item . data . attributes . progress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Series Status Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Series Status . getStatus For K its u String ( update Item . data . attributes . status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ