package Ġcom . va ib hav . soc io fy . ui . Upload Screen Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . va ib hav . soc io fy . data . repository . Post Repository Ċ import Ġcom . va ib hav . soc io fy . util . Shared . Status Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . flow . receive As Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠUpload ViewModel Ġ@ ViewModel Inject Ġconstructor ( private Ġval Ġrepository : ĠPost Repository ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġoriginal _ image Uri Ġ= ĊĠĠĠĠĠĠĠ ĠUri . parse (" android . resource :// com . va ib hav . soc io fy / drawable / image ") ĊĠĠĠ Ġvar Ġuri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġ_ upload Status Ġ= ĠChannel < Status >() ĊĠĠĠ Ġval Ġupload Status Ġ= Ġ_ upload Status . receive As Flow () ĊĊĠĠĠ Ġfun Ġupload Image ( description : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( validate ( uri !! , Ġdescription )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In ViewModel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . upload In Storage ( uri !! , Ġsuccess Listener Ġ= Ġ{ Ġfilename Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Post ( filename , Ġdescription ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Error ( it . message !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Error (" Invalid Ġinput ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupload Post ( filename : ĠString , Ġdescription : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . upload Post ( filename , Ġdescription , Ġsuccess Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġfailure Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ upload Status . send ( Status . Error ( it . message !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( uri : ĠUri , Ġdescription : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġ!( uri Ġ== Ġoriginal _ image Uri Ġ|| Ġdescription . isEmpty () Ġ|| Ġdescription Ġ== Ġ"") ĊĊ Ċ }