package Ġcom . software hut . sh repository . domain . sources Ċ Ċ import Ġcom . software hut . sh repository . domain . storage . disk . Disk Saver Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ Ċ class ĠS ources < T Data >( val Ġon Disk Save : ĠDisk Saver < T Data >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisk Storage Read Stream : ĠObservable < T Data >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Read Stream : ĠObservable < T Data >) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġdisk ( id : ĠString ): ĠObservable < T Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdisk Storage Read Stream . onError Resume Next ( network ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnetwork ( id : ĠString ): ĠObservable < T Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġnetwork Read Stream ĊĊĠĠĠĠĠĠĠ Ġreturn Ġobservable . do On Next ({ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore ( id , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall ( id : ĠString ): ĠSingle < T Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . concat ( disk ( id ), Ġnetwork ( id )). first Or Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstore ( id : ĠString , Ġdata : ĠT Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Disk Save . save ( id , Ġdata ) ĊĠĠĠ Ġ} Ċ }