package Ġcom . gate of truth . ok library Ċ Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Response Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Random Access File ĊĊ Ċ abstract Ġclass ĠFile Result CallBack Ġ: ĊĠĠĠ ĠResult CallBack () Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġresponse ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body ĊĠĠĠĠĠĠĠ Ġif Ġ( response Body Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body Get Null ( call , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġresponse . request . url . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbean Ġ= Ġurl To Bean Map [ url ] Ġ?: ĠDownload Bean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġresponse Body . byte Stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( bean . filePath , Ġbean . filename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Access File Ġ= ĠRandom Access File ( file , Ġ" rw ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Access File . seek ( bean . download Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . use Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Copied : ĠLong Ġ= Ġbean . download Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( DEFAULT _ BUFFER _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Ġ= Ġinput . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( bytes Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Access File . write ( buffer , Ġ 0 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Copied Ġ+= Ġbytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Ġ= Ġinput . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Progress ( url , Ġbean . content Length , Ġbytes Copied ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Access File . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk Simple . main Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists () Ġ|| Ġfile . length () Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Exception ( call , Ġresponse , ĠIOException (" File ĠDownload ĠFailure ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk Simple . main Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Exception ( call , Ġresponse , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġother Exception ( call : ĠCall , Ġresponse : ĠResponse , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfailure ( call , Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresponse Body Get Null ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload Progress ( url : ĠString , Ġtotal : ĠLong , Ġcurrent : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOk Simple . main Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Progress On MainThread ( url , Ġtotal , Ġcurrent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupload Progress ( fileName : ĠString , Ġtotal : ĠLong , Ġcurrent : ĠLong ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupload Progress On MainThread ( fileName : ĠString , Ġtotal : ĠLong , Ġcurrent : ĠLong ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġfinish ( file : ĠFile ) ĊĊ Ċ }