package Ġio . n ich ij ou . t uj ian . ui . upload Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġio . n ich ij ou . t uj ian . R Ċ import Ġio . n ich ij ou . t uj ian . common . C Ċ import Ġio . n ich ij ou . t uj ian . common . entity . Post Ċ import Ġio . n ich ij ou . t uj ian . common . entity . Upload Ċ import Ġio . n ich ij ou . t uj ian . common . ext . Simple Upload Ċ import Ġio . n ich ij ou . t uj ian . common . ext . Uri RequestBody Ċ import Ġio . n ich ij ou . t uj ian . common . ext . log d Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ import Ġjava . net . URL Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠUpload ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠ Ġval Ġmsg Ġ= ĠMutable LiveData < String >() ĊĠ Ġval Ġurl Ġ= ĠMutable LiveData < String >() ĊĠ Ġval Ġresult Ġ= ĠMutable LiveData < Post >() ĊĊĠ Ġprivate Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĊĠ Ġfun Ġupload ( uri : ĠUri ) Ġ{ ĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠUri RequestBody ( getApplication (), Ġuri ) ĊĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġrequest Body . contentType ()?. toString () Ġ?: Ġ" image / jpeg " ĊĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġget Application < Application >(). content Resolver . open InputStream ( uri ) ĊĠĠĠĠĠ Ġif Ġ( inputStream Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmsg . post Value ( getApplication < Application >(). getString ( R . string . cant _ resolve _ selected _ picture )) ĊĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠSimple Upload ( URL ( C . API _ UPLOAD )) ĊĠĠĠĠĠĠĠ Ġ. add File Part (" file ", ĠinputStream , Ġ" upload .$ contentType ", ĠcontentType ) ĊĠĠĠĠĠĠĠ Ġ. upload ( object Ġ: ĠSimple Upload . On File Uploaded Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon File Up loading Success ( response : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog d (" resp : Ġ$ response , Ġ$ contentType ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠPattern . compile ("< h 1 > MD 5 :\\ s ([ a - z 0 - 9 ]* )</ h 1 > "). matcher ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd 5 Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( md 5 . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . post Value ( getApplication < Application >(). getString ( R . string . resolve _ upload _ result _ is _ null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . post Value ( C . API _ PREFIX Ġ+ Ġmd 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . post Value ( getApplication < Application >(). getString ( R . string . resolve _ upload _ result _ is _ null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon File Up loading Failed ( response Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . post Value ( getApplication < Application >(). getString ( R . string . upload _ error )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġpost ( upload : ĠUpload , Ġsuccess : Ġ( Call , ĠResponse ) Ġ-> ĠUnit , Ġerror : Ġ( Call , ĠIOException ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) Ġ{ ĊĠĠĠ Ġval Ġjson Ġ= Ġ" application / json ; Ġcharset = utf - 8 ". to MediaType OrNull () ĊĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠ Ġ" title " Ġto Ġupload . title , ĊĠĠĠĠĠ Ġ" content " Ġto Ġupload . content , ĊĠĠĠĠĠ Ġ" url " Ġto Ġupload . url , ĊĠĠĠĠĠ Ġ" user " Ġto Ġupload . user , ĊĠĠĠĠĠ Ġ" sort " Ġto Ġupload . sort , ĊĠĠĠĠĠ Ġ" hz " Ġto Ġupload . hz ĊĠĠĠ Ġ) ĊĠĠĠ Ġprintln ( JSONObject ( map ). toString ()) ĊĠĠĠ Ġval Ġrequest Body Ġ= ĠJSONObject ( map ). toString (). to RequestBody ( json ) ĊĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠ Ġ. url ( C . API _ TG ) ĊĠĠĠĠĠ Ġ. post ( request Body ) ĊĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġval Ġcall Ġ= Ġok HttpClient . new Call ( request ) ĊĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ( call , Ġe ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuccess ( call , Ġresponse ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ