package Ġcom . dev _ vl ad . car _ v . view _ models . chat Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . auth . User Entity Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . auth . User Repo Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . chat . Chat Entity Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . chat . Chat Init iate Data Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . chat . Chat Repo Ċ import Ġcom . dev _ vl ad . car _ v . util . REC Y CL ER _ PAGE _ SIZE Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠChat ViewModel ( private Ġval Ġchat Repo : ĠChat Repo , Ġprivate Ġval Ġuser Repo : ĠUser Repo ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġchat Init iate Data : ĠChat Init iate Data ĊĠĠĠ Ġfun Ġset Initialization Data ( chat Initialization Data : ĠChat Init iate Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchat Init iate Data Ġ= Ġchat Initialization Data ĊĠĠĠĠĠĠĠ Ġinit User () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval ĠcurrentUser Ġ= ĠMutable LiveData < User Entity >() ĊĠĠĠ Ġfun Ġobserve CurrentUser (): ĠLive Data < User Entity > Ġ= ĠcurrentUser ĊĠĠĠ Ġprivate Ġfun Ġinit User () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repo . get Non Observable User ()[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentUser . value Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġloaded Page Ġ= ĠMutable LiveData < Int >( 1 ) ĊĠĠĠ Ġfun Ġobserve Messages (): ĠLive Data < List < Chat Entity >> Ġ= Ġloaded Page . switch Map Ġ{ ĊĠĠĠĠĠĠĠ Ġchat Repo . fetch Messages ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage No Ġ= Ġloaded Page . value ?: 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Id Ġ= Ġchat Init iate Data . car Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġchat Init iate Data . owner Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeal er Id Ġ= Ġchat Init iate Data . de aler Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as LiveData () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġfun Ġfetch More C ars ( total Items In List Now : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isLoading ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Loaded Ġ= Ġif Ġ( total Items In List Now Ġ> Ġ 0 ) Ġtotal Items In List Now Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentPage Ġ= Ġ( items Loaded Ġ/ ĠRE CY CL ER _ PAGE _ SIZE ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Page Ġ= ĠcurrentPage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Page . value Ġ= Ġnext Page Ġ// Ġtrigger Ġreload ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsend New Message ( new Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchat Entity Ġ= ĠChat Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġchat Init iate Data . owner Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeal er Id Ġ= Ġchat Init iate Data . de aler Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Id Ġ= Ġchat Init iate Data . car Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnew Msg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsent By Owner Ġ= ĠcurrentUser . value ?. is S eller Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsent By Dealer Ġ= ĠcurrentUser . value ?. is Dealer Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsent On Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Is Image Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Chat Id Ġ= Ġchat Repo . sendMessage To Fire Store ( chat Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// server Chat Id Ġwill Ġbe Ġnull Ġif Ġsomething Ġwent Ġwrong ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Image Message ( uri Str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchat Entity Ġ= ĠChat Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġchat Init iate Data . owner Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeal er Id Ġ= Ġchat Init iate Data . de aler Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcar Id Ġ= Ġchat Init iate Data . car Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġuri Str , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent By Owner Ġ= ĠcurrentUser . value ?. is S eller Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent By Dealer Ġ= ĠcurrentUser . value ?. is Dealer Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent On Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Is Image Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Chat Id Ġ= Ġchat Repo . send Image Message To Fire Store ( chat Entity , ĠcurrentUser . value !!. userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// server Chat Id Ġwill Ġbe Ġnull Ġif Ġsomething Ġwent Ġwrong ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ }