package Ġcom . example . ke vin lay . mv vm _ bo iler _ plate _ kotlin . db Ċ Ċ import Ġcom . example . ke vin lay . mv vm _ bo iler _ plate _ kotlin . db . local . Local DataSource Ċ import Ġcom . example . ke vin lay . mv vm _ bo iler _ plate _ kotlin . db . local . model . App Entity Ċ import Ġcom . example . ke vin lay . mv vm _ bo iler _ plate _ kotlin . db . remote . Remote DataSource Ċ import Ġcom . example . ke vin lay . mv vm _ bo iler _ plate _ kotlin . util . Offline Manager Ċ import Ġio . reactivex . Single Ċ Ċ class ĠApp Repository ( private Ġval Ġlocal DataSource : ĠLocal DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġremote DataSource : ĠRemote DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġoffline Manager : ĠOff line Manager ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcache Ġ= ĠArrayList < App Entity >() ĊĊĠĠĠ Ġprivate Ġvar Ġis Cache Dirty : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġget App Entity (): ĠSingle < ArrayList < App Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! is Cache Dirty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( cache ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( offline Manager . is Offline ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . getAll App Entity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġupdate Cache ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠSingle . just ( cache ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . getAll App Entity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġupdate Cache ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠSingle . just ( cache ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave App Entity ( app Entity : ĠApp Entity ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġremote DataSource . getAll App Entity (). subscribe Ġ{ Ġentities Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . save App Entity ( app Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . save App Entity ( app Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cache ( entities ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cache ( app Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Cache ( updated List : ĠList < App Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcache Ġ= Ġupdated List Ġas ĠArrayList < App Entity > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Cache ( app Entity : ĠApp Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcache . add ( app Entity ) ĊĠĠĠ Ġ} Ċ }