package Ġlt . new orld . random decision 2 Ċ Ċ import Ġandroid . content . Context Ċ import Ġlt . new orld . random decision 2 . choices . Builder Ċ import Ġlt . new orld . random decision 2 . choices . Choice Ċ import Ġrx . Observable Ċ import Ġrx . Single Ċ import Ġrx . subjects . Publish Subject Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAnd ri us ĠSem ion ov as Ċ Ġ* Ġ@ since Ġ 2 0 1 6 - 1 0 - 2 6 Ċ Ġ*/ Ċ class ĠCache ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwriter Ġ= ĠPublish Subject . create < Cache Info >() ĊĊĠĠĠ Ġprivate Ġvar Ġcleared Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cleared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Dir . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcleared Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Dir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwriteTo Ġ= ĠFile ( cacheDir , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . input . copy To ( writeTo . output Stream ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcache Dir Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ( context . cacheDir , ĠDIR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload From Cache (): ĠSingle < List < Choice >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . just ( cacheDir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠObservable . from ( it . list Files () Ġ?: Ġempty Array ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name . endsWith ( Choice . FILE _ EXT ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠChoice . getName ( it . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Reader Ġ= Ġit . reader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuilder ( title , Ġstream Reader ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Sort edList ( Choice :: compareTo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Single () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave To Cache ( name : ĠString , Ġinput : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . onNext ( Cache Info ( name , Ġinput )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . on Completed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠCache Info ( val Ġname : ĠString , Ġval Ġinput : ĠInputStream ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDIR Ġ= Ġ" choices " ĊĠĠĠ Ġ} Ċ }