package Ġapp . sur go . ui . feed Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġapp . sur go . core . plugin . PluginManager Ċ import Ġapp . sur go . domain . Observable Loading Counter Ċ import Ġapp . sur go . domain . inter actors . Get Recommend ations Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ internal Ġclass ĠFeed ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġplugin Manager : ĠPlugin Manager , ĊĠĠĠ Ġprivate Ġval Ġget Recommend ations : ĠGet Recommend ations Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠMutable State Flow ( Feed ViewState ()) ĊĠĠĠ Ġval Ġstate : ĠState Flow < Feed ViewState > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ state ĊĊĠĠĠ Ġprivate Ġval Ġloading State Ġ= ĠObservable Loading Counter () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcombine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading State . observe , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Recommend ations . observe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġis Refresh ing , Ġrecommendations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFeed ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Refresh ing Ġ= Ġis Refresh ing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommendations Ġ= Ġrecommendations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ Ġ_ state . value Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Manager . message Bus . subscribe DataSource . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh ( force : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Recommend ations ( Unit ) ĊĠĠĠ Ġ} Ċ } Ċ