package Ġcom . der mo med ic . fragments Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . der mo med ic . database . Analy se Data Ċ import Ġcom . der mo med ic . database . Analy se Database Dao Ċ import Ġcom . der mo med ic . utils . Event Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Long Serialization Policy Ċ import Ġder mo med ic . ai . service . ktor . Analy se Json Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . client . request . forms .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . utils . io . streams .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ import Ġjava . lang . Thread . sleep Ċ import Ġjava . net . Connect Exception ĊĊ Ċ class ĠAnaly se ViewModel ( val Ġdatabase : ĠAnaly se Database Dao , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ m align ant Evaluation Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġm align ant Evaluation : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ m align ant Evaluation ĊĊĠĠĠ Ġval Ġnetwork Error Ġ= ĠMutable LiveData < Event < String >>() ĊĠĠĠ Ġprivate Ġvar Ġ_ current FileName : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ m align ant Evaluation . value Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġclear Analy se () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ current FileName Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ m align ant Evaluation . post Value ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Current Analy se ( image Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ current FileName Ġ= Ġimage Name ĊĠĠĠĠĠĠĠ Ġupdate Analy se View ( image Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Analy se View ( image Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanaly se Data Ġ= Ġdatabase . find ByName ( image Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ current FileName . equals ( image Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( analy se Data ?. mal ing ant Evaluation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ m align ant Evaluation . post Value ( analy se Data . mal ing ant Evaluation . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ m align ant Evaluation . post Value ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Analy se ( image File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault SharedPreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( getApplication ()) ĊĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ= Ġdefault SharedPreferences . getString (" base _ url _ preference ", Ġ" http :// 1 9 2 . 1 6 8 . 1 . 1 0 6 : 8 0 8 0 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġheaders Builder Ġ= ĠHeaders Builder () ĊĠĠĠĠĠĠĠ Ġheaders Builder [ HttpHeaders . ContentType ] Ġ= ĠContentType . Image . JPEG . toString () ĊĠĠĠĠĠĠĠ Ġheaders Builder [ HttpHeaders . Content Disposition ] Ġ= Ġ" filename =${ image File . name }" ĊĊĠĠĠĠĠĠĠ Ġval ĠformData Ġ= ĠformData Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Input (" image ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġimage File . inputStream (). as Input () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠHttpClient () ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson : ĠString Ġ= Ġclient . submit Form With Binary Data ("${ baseUrl }/ upload ", ĠformData ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Html Esc aping () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. serialize Null s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Long Serialization Policy ( Long Serialization Policy . STRING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupload Analy se Ġ= Ġgson . fromJson ( json , ĠAnaly se Json :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġanaly se Ended Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġanaly se : ĠAnaly se Json ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnb Request Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! analy se Ended ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" request ing Ġ${ baseUrl }/ analy se / json /${ upload Analy se . idx }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanaly se Ġ= Ġgson . fromJson ( client . get < String >(" ${ baseUrl }/ analy se / json /${ upload Analy se . idx } "), ĠAnaly se Json :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" nb Request Ġ$ nb Request : Ġ$ analy se Ġanaly sed :${ analy se . analy sed () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanaly se Ended Ġ= Ġanaly se . analy sed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnb Request ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( analy se . mal ing ant Evaluation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanaly se ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanaly sed FileName Ġ= Ġ"${ analy se . fileName }.${ analy se . extension }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupsert Analy se Data ( analy sed FileName , Ġanaly se ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Analy se View ( analy sed FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠConnect Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Error . post Value ( Event (" ERROR : Ġ\ n No Ġback - end Ġfound Ġusing Ġbase Ġurl Ġ$ baseUrl ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupsert Analy se Data ( analy sed FileName : ĠString , Ġanaly se : ĠAnaly se Json ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanaly se Data Ġ= Ġdatabase . find ByName ( analy sed FileName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( analy se Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanaly se Data . mal ing ant Evaluation Ġ= Ġanaly se . mal ing ant Evaluation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . update ( analy se Data ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . insert ( Analy se Data ( fileName Ġ= Ġanaly sed FileName , Ġmal ing ant Evaluation Ġ= Ġanaly se . mal ing ant Evaluation )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ