package Ġcom . nov oda . sp ikes . ar core . poly Ċ Ċ import Ġokhttp 3 .* Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ class ĠFormat Downloader ( val Ġformat : ĠApi Format ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠOk HttpClient () ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠSTATE _ NOT _ STARTED , ĊĠĠĠĠĠĠĠ ĠSTATE _ DOWNLOAD ING , ĊĠĠĠĠĠĠĠ ĠSTATE _ SUCCESS , ĊĠĠĠĠĠĠĠ ĠSTATE _ ERROR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCompletion Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Download Finished ( format : ĠFormat ) ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( error : ĠException ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġstate Ġ= ĠState . STATE _ NOT _ STARTED ĊĊĠĠĠ Ġprivate Ġval Ġresources Downloaded Ġ= ĠArrayList < File >() ĊĊĠĠĠ Ġprivate Ġvar Ġroot File : ĠFile ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġresources To Download ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġformat . resources !!. filter Ġ{ Ġit . relative Path . endsWith (". png ") Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdownload Is Over ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġresources Downloaded . size Ġ== Ġresources To Download . size Ġ&& Ġroot File Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġstart ( listener : ĠCompletion Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . STATE _ DOWNLOAD ING ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġformat . root ĊĠĠĠĠĠĠĠ Ġdownload File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġroot File Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlistener . onError ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlistener . on Download Finished ( Format ( root File !! , Ġresources Downloaded , Ġformat . format Type )) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġresources To Download . forEach Ġ{ Ġapi File : ĠApi File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresources Downloaded . add ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlistener . onError ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġlistener . on Download Finished ( Format ( root File !! , Ġresources Downloaded , Ġformat . format Type )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload File ( api File : ĠApi File , Ġsuccess : Ġ( File ) Ġ-> ĠUnit , Ġfailure : Ġ( Exception ) Ġ-> ĠUnit , Ġover : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( api File . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠState . STATE _ DOWNLOAD ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Body Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure ( Exception (" No Ġfile Ġcontent Ġfor Ġfile Ġ" Ġ+ Ġapi File . relative Path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( File ( api File . relative Path , Ġapi File . url , Ġapi File . contentType , Ġresponse Body . bytes ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( download Is Over ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . STATE _ SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . STATE _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ Ċ } Ċ