package Ġio . code labs . ch urch inc . core . datasource . remote Ċ Ċ import Ġio . code labs . ch urch inc . core . Root Activity Ċ import Ġio . code labs . ch urch inc . model . Ser mon Ċ import Ġio . code labs . ch urch inc . model . User Ċ import Ġio . code labs . ch urch inc . util . debug Log Ċ import Ġkotlinx . coroutines . launch ĊĊ Ċ fun ĠRoot Activity . get Live User ( callback : ĠData Callback < User >) Ġ{ ĊĠĠĠ Ġfire store . collection (" users "). document ( auth . uid !! ) ĊĠĠĠĠĠĠĠ Ġ. add Snapshot Listener ( this ) Ġ{ Ġsnapshot , Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( exception . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġuser 's Ġdata Ġfrom Ġthe Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġsnapshot ?. toObject ( User :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError (" User Ġcould Ġnot Ġbe Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġio Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentUser : ĠUser ? Ġ= Ġdao . getCurrent User ( auth . uid !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ== Ġnull ) Ġdao . createUser ( user ) Ġelse Ġdao . update User ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onComplete ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠRoot Activity . get Ser mon s ( callback : ĠData Callback < Mutable List < Ser mon >>) Ġ{ ĊĠĠĠ Ġfire store . collection (" ser mon s "). add Snapshot Listener ( this ) Ġ{ Ġsnapshot , Ġexception Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( exception . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdebug Log (" Ser mon s Ġare : Ġ${ snapshot ?. documents }") ĊĠĠĠĠĠĠĠ Ġval Ġser mon s Ġ= Ġsnapshot ?. to Objects ( Ser mon :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ser mon s Ġ== Ġnull ) Ġcallback . onError (" There Ġare Ġno Ġser mon s Ġin Ġthe Ġdatabase ") ĊĠĠĠĠĠĠĠ Ġelse Ġcallback . onComplete ( ser mon s ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠData Callback < T > Ġ{ ĊĊĠĠĠ Ġfun ĠonError ( e : ĠString ?) ĊĊĠĠĠ Ġfun ĠonComplete ( result : ĠT ?) Ċ Ċ }