package Ġcom . c ure ya . c ure 4 mind . community . ui . fragment . create Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . c ure ya . c ure 4 mind . community . models . Post Ċ import Ġcom . c ure ya . c ure 4 mind . community . models . TAG Ċ import Ġcom . c ure ya . c ure 4 mind . community . models . User Ċ import Ġcom . c ure ya . c ure 4 mind . util . STORAGE _ BUCKET Ċ import Ġcom . c ure ya . c ure 4 mind . util . database Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . google . firebase . storage . k tx . storage Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . tasks . await Ċ import Ġjava . util .* Ċ Ċ class ĠCreate Post ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġauth : ĠFirebase Auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠ Ġprivate Ġval Ġstorage Ref Ġ= ĠFirebase . storage ( STORAGE _ BUCKET ). reference ĊĊĠĠĠ Ġprivate Ġval Ġ_ isLoading Ġ= ĠMutable LiveData < Boolean >( false ) ĊĠĠĠ Ġval ĠisLoading : ĠLive Data < Boolean > Ġget () Ġ= Ġ_ isLoading ĊĊĠĠĠ Ġprivate Ġval Ġ_ error Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġerror : ĠLive Data < String ?> Ġget () Ġ= Ġ_ error ĊĊĠĠĠ Ġprivate Ġval Ġ_ tag Ġ= ĠMutable LiveData < TAG ?> () ĊĠĠĠ Ġval Ġtag : ĠLive Data < TAG ?> Ġget () Ġ= Ġ_ tag ĊĊĠĠĠ Ġprivate Ġval Ġ_ currentUser Ġ= ĠMutable LiveData < User >() ĊĠĠĠ Ġval ĠcurrentUser : ĠLive Data < User > Ġget () Ġ= Ġ_ currentUser ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload User () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . child (" users "). child ( auth . uid !! ). get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getValue ( User :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . userId Ġ= Ġauth . uid !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ currentUser . value Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" load User :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Tag ( tag : ĠTAG ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ tag . value Ġ= Ġtag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Post ( image Uri : ĠUri ?, Ġcaption : ĠString , Ġtags : ĠList < TAG >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( image Uri == null Ġ&& Ġcaption . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error . value Ġ= Ġ" Please Ġselect Ġan Ġimage Ġor Ġwrite Ġa Ġpost !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ_ error . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġurl Ġ: ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Id Ġ= Ġ"${ auth . uid !! }${ System . currentTimeMillis () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ref Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Ref . child (" community / post /${ auth . uid !! }/ IMG 0 0 0 ${ System . currentTimeMillis () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ref . put File ( image Uri ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġimage Ref . download Url . await (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠPost ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Id Ġ= Ġpost Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaption Ġ= Ġcaption , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġauth . uid !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Count Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshares Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠDate (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġ_ currentUser . value !!. name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Photo Ġ= Ġ_ currentUser . value !!. photoUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . child (" community "). child (" posts ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( post Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setValue ( post ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error . value Ġ= Ġe . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" create Post : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" CREATE _ POST _ VIEW _ MODEL " ĊĠĠĠ Ġ} Ċ }