package Ġcom . dropbox . store . rx 2 Ċ Ċ import Ġcom . dropbox . android . external . store 4 . Experimental Store Api Ċ import Ġcom . dropbox . android . external . store 4 . Store Ċ import Ġcom . dropbox . android . external . store 4 . Store Builder Ċ import Ġcom . dropbox . android . external . store 4 . Store Request Ċ import Ġcom . dropbox . android . external . store 4 . Store Response Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . Single Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . reactive . as Flow Ċ import Ġkotlinx . coroutines . rx 2 . as Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . rx 2 . as Flow able Ċ import Ġkotlinx . coroutines . rx 2 . await Ċ import Ġkotlinx . coroutines . rx 2 . rx Comp letable Ċ Ċ /** Ċ Ġ* ĠReturn Ġa Ġ[ Flow able ] Ġfor Ġthe Ġgiven Ġkey Ċ Ġ* Ġ@ param Ġrequest Ġ- Ġsee Ġ[ Store Request ] Ġfor Ġconfigurations Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore < Key , ĠOutput >. observe ( request : ĠStore Request < Key >): ĠFlow able < Store Response < Output >> Ġ= ĊĠĠĠ Ġstream ( request ). as Flow able () Ċ Ċ /** Ċ Ġ* ĠPur ge Ġa Ġparticular Ġentry Ġfrom Ġmemory Ġand Ġdisk Ġcache . Ċ Ġ* ĠPersistent Ġstorage Ġwill Ġonly Ġbe Ġcleared Ġif Ġa Ġdelete Ġfunction Ġwas Ġpassed Ġto Ċ Ġ* Ġ[ Store Builder . pers ister ] Ġor Ġ[ Store Builder . non Flow ing Pers ister ] Ġwhen Ġcreating Ġthe Ġ[ Store ]. Ċ Ġ*/ Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore < Key , ĠOutput >. observe Clear ( key : ĠKey ): ĠComp letable Ġ= ĊĠĠĠ Ġrx Comp letable Ġ{ Ġclear ( key ) Ġ} Ċ Ċ /** Ċ Ġ* ĠPur ge Ġall Ġentries Ġfrom Ġmemory Ġand Ġdisk Ġcache . Ċ Ġ* ĠPersistent Ġstorage Ġwill Ġonly Ġbe Ġcleared Ġif Ġa Ġdelete All Ġfunction Ġwas Ġpassed Ġto Ċ Ġ* Ġ[ Store Builder . pers ister ] Ġor Ġ[ Store Builder . non Flow ing Pers ister ] Ġwhen Ġcreating Ġthe Ġ[ Store ]. Ċ Ġ*/ Ċ @ Experimental Store Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore < Key , ĠOutput >. observe Clear All (): ĠComp letable Ġ= ĊĠĠĠ Ġrx Comp letable Ġ{ Ġclear All () Ġ} Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġ[ Store Builder ] Ġfrom Ġa Ġ[ Flow able ] Ġfetch er . Ċ Ġ* Ċ Ġ* ĠUse Ġwhen Ġcreating Ġa Ġ[ Store ] Ġthat Ġf etches Ġobjects Ġin Ġan Ġwebsocket - like Ġmultiple Ġresponses Ċ Ġ* Ġper Ġrequest Ġprotocol . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfetch er Ġa Ġfunction Ġfor Ġfetching Ġa Ġflow Ġof Ġnetwork Ġrecords . Ċ Ġ*/ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore Builder . Companion . from Flow able ( ĊĠĠĠ Ġfetch er : Ġ( key : ĠKey ) Ġ-> ĠFlow able < Output > Ċ ): ĠStore Builder < Key , ĠOutput > Ġ= Ġfrom Ġ{ Ġkey : ĠKey Ġ-> ĊĠĠĠ Ġfetch er ( key ). as Flow () Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġnew Ġ[ Store Builder ] Ġfrom Ġa Ġ[ Single ] Ġfetch er . Ċ Ġ* Ċ Ġ* ĠUse Ġwhen Ġcreating Ġa Ġ[ Store ] Ġthat Ġf etches Ġobjects Ġfrom Ġa Ġ[ Single ] Ġsource Ġthat Ġemits Ġone Ġresponse Ċ Ġ* Ċ Ġ* Ġ@ param Ġfetch er Ġa Ġfunction Ġfor Ġfetching Ġa Ġ[ Single ] Ġnetwork Ġresponse Ġfor Ġa Ġ[ Key ] Ċ Ġ*/ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore Builder . Companion . from Single ( ĊĠĠĠ Ġfetch er : Ġ( key : ĠKey ) Ġ-> ĠSingle < Output > Ċ ): ĠStore Builder < Key , ĠOutput > Ġ= ĊĠĠĠ Ġfrom Ġ{ Ġkey : ĠKey Ġ-> Ġfetch er ( key ). to Flow able (). as Flow () Ġ} Ċ Ċ /** Ċ Ġ* ĠDefine Ġwhat Ġscheduler Ġfetch er Ġrequests Ġwill Ġbe Ġcalled Ġon , Ċ Ġ* Ġif Ġa Ġscheduler Ġis Ġnot Ġset ĠStore Ġwill Ġuse Ġ[ Global Scope ] Ċ Ġ*/ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny > ĠStore Builder < Key , ĠOutput >. with Scheduler ( ĊĠĠĠ Ġscheduler : ĠScheduler Ċ ): ĠStore Builder < Key , ĠOutput > Ġ{ ĊĠĠĠ Ġreturn Ġscope ( Coroutine Scope ( scheduler . as Coroutine Dispatcher ())) Ċ } Ċ Ċ /** Ċ Ġ* ĠConnect s Ġa Ġ( Non ĠFlow ) Ġ[ Single ] Ġsource Ġof Ġtruth Ġthat Ġis Ġaccessible Ġvia Ġ[ reader ], Ġ[ writer ], Ċ Ġ* Ġ[ delete ], Ġand Ġ[ delete All ]. Ċ Ġ* Ċ Ġ* Ġ@ see Ġcom . dropbox . android . external . store 4 . Store Builder . pers ister Ċ Ġ*/ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny , ĠNew Output Ġ: ĠAny > ĠStore Builder < Key , ĠOutput >. with Single Pers ister ( ĊĠĠĠ Ġreader : Ġ( Key ) Ġ-> ĠMaybe < New Output >, ĊĠĠĠ Ġwriter : Ġ( Key , ĠOutput ) Ġ-> ĠSingle < Unit >, ĊĠĠĠ Ġdelete : Ġ(( Key ) Ġ-> ĠComp letable )? Ġ= Ġnull , ĊĠĠĠ Ġdelete All : Ġ(() Ġ-> ĠComp letable )? Ġ= Ġnull Ċ ): ĠStore Builder < Key , ĠNew Output > Ġ{ ĊĠĠĠ Ġval Ġdelete Fun : Ġ( suspend Ġ( Key ) Ġ-> ĠUnit )? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( delete Ġ!= Ġnull ) Ġ{ Ġkey Ġ-> Ġdelete ( key ). await () Ġ} Ġelse Ġnull ĊĠĠĠ Ġval Ġdelete All Fun : Ġ( suspend Ġ() Ġ-> ĠUnit )? Ġ= Ġdelete All ?. let Ġ{ Ġ{ Ġdelete All (). await () Ġ} Ġ} ĊĠĠĠ Ġreturn Ġnon Flow ing Pers ister ( ĊĠĠĠĠĠĠĠ Ġreader Ġ= Ġ{ Ġkey Ġ-> Ġreader . invoke ( key ). await () Ġ}, ĊĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġkey , Ġoutput Ġ-> Ġwriter . invoke ( key , Ġoutput ). await () Ġ}, ĊĠĠĠĠĠĠĠ Ġdelete Ġ= Ġdelete Fun , ĊĠĠĠĠĠĠĠ Ġdelete All Ġ= Ġdelete All Fun ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠConnect s Ġa Ġ([ Flow able ]) Ġsource Ġof Ġtruth Ġthat Ġis Ġaccessed Ġvia Ġ[ reader ], Ġ[ writer ] Ġand Ġ[ delete ]. Ċ Ġ* Ċ Ġ* ĠFor Ġmax imal Ġflexibility , Ġ[ writer ]' s Ġrecord Ġtype Ġ([ Output ]] Ġand Ġ[ reader ]' s Ġrecord Ġtype Ċ Ġ* Ġ([ New Output ]) Ġare Ġnot Ġidentical . ĠThis Ġallows Ġus Ġto Ġread Ġone Ġtype Ġof Ġobjects Ġfrom Ġnetwork Ġand Ċ Ġ* Ġtransform Ġthem Ġto Ġanother Ġtype Ġwhen Ġpl acing Ġthem Ġin Ġlocal Ġstorage . Ċ Ġ* Ċ Ġ* ĠA Ġsource Ġof Ġtruth Ġis Ġusually Ġbacked Ġby Ġlocal Ġstorage . ĠIt 's Ġpurpose Ġis Ġto Ġeliminate Ġthe Ġneed Ċ Ġ* Ġfor Ġwaiting Ġon Ġnetwork Ġupdate Ġbefore Ġlocal Ġmodifications Ġare Ġavailable Ġ( via Ġ[ Store . stream ]). Ċ Ġ* Ċ Ġ* Ġ@ param Ġreader Ġreads Ġrecords Ġfrom Ġthe Ġsource Ġof Ġtruth Ċ Ġ* Ġ@ param Ġwriter Ġwrites Ġrecords Ġ** coming Ġin Ġfrom Ġthe Ġfetch er Ġ( network )** Ġto Ġthe Ġsource Ġof Ġtruth . Ċ Ġ* ĠWriting Ġlocal Ġuser Ġupdates Ġto Ġthe Ġsource Ġof Ġtruth Ġvia Ġ[ Store ] Ġis Ġcurrently Ġnot Ġsupported . Ċ Ġ* Ġ@ param Ġdelete Ġdeletes Ġrecords Ġin Ġthe Ġsource Ġof Ġtruth Ġfor Ġthe Ġgive Ġkey Ċ Ġ* Ġ@ param Ġdelete All Ġdeletes Ġall Ġrecords Ġin Ġthe Ġsource Ġof Ġtruth Ċ Ġ* Ċ Ġ*/ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġ< Key Ġ: ĠAny , ĠOutput Ġ: ĠAny , ĠNew Output Ġ: ĠAny > ĠStore Builder < Key , ĠOutput >. with Flow able Pers ister ( ĊĠĠĠ Ġreader : Ġ( Key ) Ġ-> ĠFlow able < New Output >, ĊĠĠĠ Ġwriter : Ġ( Key , ĠOutput ) Ġ-> ĠSingle < Unit >, ĊĠĠĠ Ġdelete : Ġ(( Key ) Ġ-> ĠComp letable )? Ġ= Ġnull , ĊĠĠĠ Ġdelete All : Ġ(() Ġ-> ĠComp letable )? Ġ= Ġnull Ċ ): ĠStore Builder < Key , ĠNew Output > Ġ{ ĊĠĠĠ Ġval Ġdelete Fun : Ġ( suspend Ġ( Key ) Ġ-> ĠUnit )? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( delete Ġ!= Ġnull ) Ġ{ Ġkey Ġ-> Ġdelete ( key ). await () Ġ} Ġelse Ġnull ĊĠĠĠ Ġval Ġdelete All Fun : Ġ( suspend Ġ() Ġ-> ĠUnit )? Ġ= Ġdelete All ?. let Ġ{ Ġ{ Ġdelete All (). await () Ġ} Ġ} ĊĠĠĠ Ġreturn Ġpers ister ( ĊĠĠĠĠĠĠĠ Ġreader Ġ= Ġ{ Ġkey Ġ-> Ġreader . invoke ( key ). as Flow () Ġ}, ĊĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġkey , Ġoutput Ġ-> Ġwriter . invoke ( key , Ġoutput ). await () Ġ}, ĊĠĠĠĠĠĠĠ Ġdelete Ġ= Ġdelete Fun , ĊĠĠĠĠĠĠĠ Ġdelete All Ġ= Ġdelete All Fun ĊĠĠĠ Ġ) Ċ } Ċ