package Ġse ph . android . com . item tracker . view model Ċ Ċ import Ġandroid . net . Uri Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Flow able Ċ import Ġse ph . android . com . item tracker . data . Result Ċ import Ġse ph . android . com . item tracker . data . inter actor . AddItem Ċ import Ġse ph . android . com . item tracker . data . inter actor . Edit Item Ċ import Ġse ph . android . com . item tracker . model . Item Ċ import Ġse ph . android . com . item tracker . view model . base . Base ViewModel Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġse ph Ġon Ġ 0 3 / 0 5 / 2 0 1 8 . Ċ Ġ*/ Ċ Ċ class ĠItem Add ViewModel ( var Ġadd Item Ġ: ĠAdd Item , Ġvar Ġedit Item : ĠEdit Item ) Ġ: ĠBase ViewModel < Item >() Ġ{ ĊĊĠĠĠ Ġfun Ġupload Image ( image : ĠUri ) Ġ: ĠFlow able < String > Ġ= ĠFlow able . create ({ Ġemitter Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġimage Ref Ġ= ĠFirebase Storage . getInstance (). getReference (" images /" Ġ+ Ġimage . last Path Segment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ref . put File ( image ). add On Success Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( it . download Url . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġdo OnError ( it . toString ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}, ĠBack pressure Strategy . BUFFER ) ĊĊĠĠĠ Ġfun Ġadd Item ( name : ĠString , Ġdescription : ĠString , Ġimage : ĠUri , Ġlocation : ĠString , Ġcost : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġstate . value Ġ= ĠState . Loading ĊĊĠĠĠĠĠĠĠ Ġupload Image ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( addItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . description Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . image Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cost Ġ= Ġcost ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item . execute (). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success < *> Ġ-> Ġstate . value Ġ= ĠState . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġdo OnError ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġedit Item ( id : ĠString , Ġname : ĠString , Ġdescription : ĠString , Ġimage : ĠString , Ġlocation : ĠString , Ġcost : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġstate . value Ġ= ĠState . Loading ĊĊĠĠĠĠĠĠĠ Ġwith ( edit Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . description Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . image Ġ= Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . location Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cost Ġ= Ġcost ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġedit Item . execute (). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success < *> Ġ-> Ġstate . value Ġ= ĠState . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġdo OnError ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo OnError ( message Ġ: ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . value Ġ= ĠState . Error ( message ) ĊĠĠĠ Ġ} Ċ }