package Ġcom . real it ix . nect ar . view model ĊĊ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . real it ix . nect ar . database . entity .* Ċ import Ġcom . real it ix . nect ar . repository .* Ċ import Ġcom . real it ix . nect ar . util . N ect ar Util Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ class ĠDashboard ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġr Me al : ĠMe al Repository , ĊĠĠĠ Ġprivate Ġval Ġr Re ce ipe Step : ĠRe ce ipe Step Repository , ĊĠĠĠ Ġprivate Ġval Ġr Shopping List : ĠShop ping List Repository , ĊĠĠĠ Ġprivate Ġval Ġr Shopping List Ali ment State : ĠShop ping List Ali ment State Repository , ĊĠĠĠ Ġprivate Ġval Ġtimestamp : ĠLong Ċ ): ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġshopping Lists : ĠLive Data < List < Shopping List >> Ġ= Ġr Shopping List . list Live () ĊĊĠĠĠ Ġfun Ġcompute Shopping List ( begin : ĠLong , Ġend : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Pair < Ali ment State , ĠInt >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġme als Ġ= Ġr Me al . list Range Suspend ( begin , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( meal Ġin Ġme als ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ect ar Util . add Ali ment State List ToList ( res , Ġme al . list Ali ments ( r Re ce ipe Step )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshopping List Uuid Ġ= ĠN ect ar Util . generate Uuid () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Shopping List . insert Suspend ( Shopping List Raw ( shopping List Uuid , Ġbegin , Ġend )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( r Ġin Ġres ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Shopping List Ali ment State . insert Suspend ( Shopping List Ali ment State Raw ( shopping List Uuid , Ġr . first . uuid , Ġr . second , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute Steps (): ĠList < Pair < Long , ĠRe ce ipe Step >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġme als Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Me al . list From Suspend ( timestamp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsteps Ġ= Ġmutable ListOf < Pair < Long , ĠRe ce ipe Step >>() ĊĠĠĠĠĠĠĠ Ġfor ( meal Ġin Ġme als ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( m re ce ipe Ġin Ġme al . re ce ip es ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . addAll ( m re ce ipe . re ce ipe . get Step sWith Timestamp ( r Re ce ipe Step , Ġme al . timestamp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsteps . sortBy Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsteps ĊĠĠĠ Ġ} Ċ }