package Ġcom . k ou . seek make . screens . home Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . google . android . gms . tasks . On Failure Listener Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . k ou . seek make . common . Single Live Event Ċ import Ġcom . k ou . seek make . data . common . map Ċ import Ġcom . k ou . seek make . data . firebase . Feed Posts Repository Ċ import Ġcom . k ou . seek make . data . firebase . Users Repository Ċ import Ġcom . k ou . seek make . models . Firebase . Feed Post Ċ import Ġcom . k ou . seek make . models . Firebase . User Ċ import Ġcom . k ou . seek make . screens . common . Base ViewModel Ċ Ċ class ĠHome ViewModel ( on Failure Listener : ĠOn Failure Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfeed Posts Repo : ĠFeed Posts Repository , Ġprivate Ġval Ġusers Repo : ĠUsers Repository ) Ġ: ĠBase ViewModel ( on Failure Listener ) Ġ{ ĊĊĊĠĠĠ Ġlateinit Ġvar Ġuid : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġfeed Posts : ĠLive Data < List < Feed Post >> ĊĠĠĠ Ġprivate Ġvar Ġloaded Lik es Ġ= Ġmap Of < String , ĠLive Data < Feed Post Lik es >>() ĊĠĠĠ Ġprivate Ġval Ġ_ goTo Comments Screen Ġ= ĠSingle Live Event < List < String ? >>() ĊĠĠĠ Ġval Ġgo To Comments Screen Ġ= Ġ_ goTo Comments Screen ĊĠĠĠ Ġval Ġuser And Friends : ĠLive Data < Pair < User , ĠList < User >>> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repo . get Users (). map Ġ{ Ġall Users Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( user List , Ġother Users List ) Ġ= Ġall Users . partition Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . uid Ġ== Ġusers Repo . current Uid () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser List . first () Ġto Ġother Users List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġinit ( uid : ĠString , Ġload More : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġc urent Page Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġquery Size Ġ= Ġ 2 5 ĊĊĠĠĠĠĠĠĠ Ġ/* if Ġ( load More ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ c urent Page ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Posts Ġ= Ġfeed Posts Repo . get Feed Posts ( uid , Ġquery Size , Ġc urent Page ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . sorted By Descending Ġ{ Ġit . timestamp Date () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" lo ol ", Ġfeed Posts . value . toString ()) ĊĊĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: uid . isInitialized ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . uid Ġ= Ġuid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Posts Ġ= Ġfeed Posts Repo . get Feed Posts ( uid , Ġquery Size , Ġc urent Page ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . sorted By Descending Ġ{ Ġit . timestamp Date () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" lo ol ", Ġfeed Posts . value . toString ()) ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdelete Feed Post ( uid : ĠString , Ġpost Id : ĠString ): ĠTask < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfeed Posts Repo . delete Feed Post ( uid , Ġpost Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Like ( post Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfeed Posts Repo . toggle Like ( post Id , Ġuid ). add On Failure Listener ( on Failure Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Lik es ( post Id : ĠString ): ĠLive Data < Feed Post Lik es >? Ġ= Ġloaded Lik es [ post Id ] ĊĊĠĠĠ Ġfun Ġload Lik es ( post Id : ĠString ): ĠLive Data < Feed Post Lik es > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Loaded Lik es Ġ= Ġloaded Lik es [ post Id ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( existing Loaded Lik es Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlive Data Ġ= Ġfeed Posts Repo . get Lik es ( post Id ). map Ġ{ Ġlikes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Post Lik es ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Count Ġ= Ġlikes . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlik edBy User Ġ= Ġlikes . find Ġ{ Ġit . userId Ġ== Ġuid Ġ} Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded Lik es Ġ= Ġloaded Lik es Ġ+ Ġ( post Id Ġto Ġlive Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Loaded Lik es ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Comments ( post Id : ĠString , Ġpost Image : ĠString , Ġpost Uid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ goTo Comments Screen . value Ġ= Ġarray ListOf ( post Id , Ġpost Image , Ġpost Uid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Follow ( current Uid : ĠString , Ġuid : ĠString , Ġfollow : ĠBoolean ): ĠTask < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( follow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturns Ġa ĠTask Ġthat Ġcompletes Ġsuccessfully Ġwhen Ġall Ġof Ġthe Ġspecified ĠTasks Ġcomplete Ġsuccessfully . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks . when All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repo . add Follow ( current Uid , Ġuid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repo . add Follower ( current Uid , Ġuid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Posts Repo . copy Feed Posts ( posts Author Uid Ġ= Ġuid , Ġuid Ġ= Ġcurrent Uid )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks . when All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repo . delete Follow ( current Uid , Ġuid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repo . delete Follower ( current Uid , Ġuid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Posts Repo . delete Feed Posts ( posts Author Uid Ġ= Ġuid , Ġuid Ġ= Ġcurrent Uid )) ĊĠĠĠĠĠĠĠ Ġ}). add On Failure Listener ( on Failure Listener ) ĊĠĠĠ Ġ} ĊĊ Ċ }