package Ġcom . ardu ia . lib . media fire Ċ Ċ import Ġokhttp 3 .* Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . regex . Pattern Ċ Ċ object ĠMedia Fire { ĊĊĠĠĠ Ġprivate Ġvar ĠonSuccess Listener : On Success Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Failure Listener : On Failure Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġok HttpClient : Ok HttpClient ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġregex : String ? Ġ= Ġ Ġ" aria - label =\" Download Ġfile \" \\ n .+ href =\" (.* )\ "" ĊĠĠĠ Ġprivate Ġvar Ġheader : String ? Ġ= Ġ" Mozilla / 5 . 0 Ġ( X 1 1 ; ĠLinux Ġx 8 6 _ 6 4 ) ĠAppleWebKit / 5 3 7 . 3 6 Ġ( KHTML , Ġlike ĠGecko ) ĠChrome / 7 1 . 0 . 3 5 7 8 . 9 9 ĠSafari / 5 3 7 . 3 6 " ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġextract ( url : String ): Media Fire { ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( header != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcreate Request ( url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ?. let Ġ{ Ġreq -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient ?. new Call ( req )?. enqueue ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( io : Security Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( io , 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġextract Now ( url : String ): String { ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcreate Request ( url Ġ= Ġurl ) ĊĠĠĠĠĠĠĠ Ġrequest ?. let Ġ{ req -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġ Ġok HttpClient ?. new Call ( req )?. execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġextract To Url ( response . body ?. string () ?: Ġthrow ĠException (" Request ĠBody ĠNot ĠFound - Ġ${ response . code } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Response Ġis ĠNo ĠSuccessful , Ġerror Ġcode Ġ- Ġ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Request ĠNo ĠFound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Url ĠNo ĠFound ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset On Success Listener ( listener : On Success Listener ): Media Fire { ĊĠĠĠĠĠĠĠ Ġthis . on Success Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset On Failure Listener ( listener : ĠOn Failure Listener ): Media Fire { ĊĠĠĠĠĠĠĠ Ġthis . on Failure Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġset Client ( client : Ok HttpClient ){ ĊĠĠĠĠĠĠĠ Ġthis . ok HttpClient Ġ= Ġclient ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġrelease (){ ĊĠĠĠĠĠĠĠ Ġthis . on Failure Listener = null ĊĠĠĠĠĠĠĠ Ġthis . on Success Listener = null ĊĠĠĠĠĠĠĠ Ġthis . ok HttpClient = Ġnull ĊĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthis . regex Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Success Listener { ĊĠĠĠĠĠĠĠ Ġfun Ġon Result ( url : String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Failure Listener { ĊĠĠĠĠĠĠĠ Ġfun Ġon Result ( e : ĠException , errorCode : Int ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Request ( url : String ): Request ? Ġ= ĊĠĠĠĠĠĠĠ Ġif ( header != null ){ ĊĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" User - Agent ", Ġheader !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcallback : Callback ? Ġ= Ġobject Ġ: Callback { ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( e , 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġ Ġresponse . body ?. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( body == null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( Exception (" Body NotFound ! "), 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl = Ġextract To Url ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( url . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( Exception (" No ĠUrl ĠFound "), 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Listener ?. on Result ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( Exception (" Failure "), response . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract To Url ( body : String ): String { ĊĠĠĠĠĠĠĠ Ġregex ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Pattern . compile ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= pattern . matcher ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( matcher . find ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit (){ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Listener ?. on Result ( e , 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} Ċ Ċ }