package Ġapp . en velop . data . repositories Ċ Ċ import Ġapp . en velop . common . Operation Ċ import Ġapp . en velop . common . Optional Ċ import Ġapp . en velop . common . map If Successful Ċ import Ġapp . en velop . common . rx . observe On UI Ċ import Ġapp . en velop . common . rx . rx Single To Operation Ċ import Ġcom . google . gson . Gson Ċ import Ġio . reactivex . Single Ċ import Ġorg . block stack . android . sdk . Block stack Session Ċ import Ġorg . block stack . android . sdk . ErrorCode Ċ import Ġorg . block stack . android . sdk . model . Delete File Options Ċ import Ġorg . block stack . android . sdk . model . Get File Options Ċ import Ġorg . block stack . android . sdk . model . Put File Options Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Provider Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠRemote Repository Ċ @ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġblock stack Provider : ĠProvider < Block stack Session >, ĊĠ Ġprivate Ġval Ġgson : ĠGson Ċ ) Ġ{ ĊĊĠ Ġprivate Ġval Ġblock stack Ġby Ġlazy Ġ{ Ġblock stack Provider . get () Ġ} ĊĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Json ( fileName : ĠString , Ġklass : ĠK Class < T >, Ġencrypted : ĠBoolean ): ĠSingle < Operation < Optional < T >>> Ġ= ĊĠĠĠ Ġrx Single To Operation Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock stack . getFile ( fileName , ĠGet File Options ( decrypt Ġ= Ġencrypted )) ĊĠĠĠĠĠ Ġif Ġ(! result . has Errors ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOptional . create ( ĊĠĠĠĠĠĠĠĠĠ Ġresult . value ?. let Ġ{ Ġcontents Ġ-> Ġgson . fromJson ( contents . toString (), Ġklass . java ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result . error ?. code Ġ== ĠErrorCode . Network Error Ġ&& Ġresult . error ?. parameter Ġ== Ġ" 4 0 4 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠOptional . None ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . w ( result . error ?. toString ()) ĊĠĠĠĠĠĠĠ Ġthrow ĠGet Error (" Error Ġgetting Ġ$ fileName : Ġ${ result . error }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġupload ByteArray ( url : ĠString , Ġdata : ĠByteArray , Ġencrypted : ĠBoolean ) Ġ= ĊĠĠĠ Ġrx Single To Operation Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock stack . put File ( ĊĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠ ĠPut File Options ( encrypt Ġ= Ġencrypted , ĠcontentType Ġ= Ġ" application / octet - stream ") ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġif Ġ(! result . hasValue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUpload Error (" Error Ġuploading Ġ${ url }: Ġ${ result . error }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġ< T Ġ: ĠAny > Ġupload Json ( fileName : ĠString , Ġcontent : ĠT , Ġencrypted : ĠBoolean ) Ġ= ĊĠĠĠ Ġrx Single To Operation Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock stack . put File ( ĊĠĠĠĠĠĠĠ ĠfileName , ĊĠĠĠĠĠĠĠ Ġgson . toJson ( content ), ĊĠĠĠĠĠĠĠ ĠPut File Options ( encrypt Ġ= Ġencrypted , ĠcontentType Ġ= Ġ" application / json ") ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġif Ġ( result . hasValue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUpload Error (" Error Ġuploading Ġ$ fileName : Ġ${ result . error }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġdelete File ( fileName : ĠString ) Ġ= ĊĠĠĠ Ġrx Single To Operation Ġ{ ĊĠĠĠĠĠ Ġval Ġit Ġ= Ġblock stack . delete File ( fileName , ĠDelete File Options ()) ĊĠĠĠĠĠ Ġif Ġ( it . error ?. code Ġ== ĠErrorCode . Network Error Ġ&& Ġit . error ?. parameter Ġ== Ġ" 4 0 4 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . w ( it . error ?. toString ()) ĊĠĠĠĠĠĠĠ Ġthrow ĠDelete Error ( it . error ?. toString ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Files List () Ġ= ĊĠĠĠ Ġrx Single To Operation Ġ{ ĊĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠ Ġblock stack . list Files Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠ Ġresult . value ?. let Ġ{ Ġlist . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlist ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġget Files List ( prefix : ĠString ) Ġ= ĊĠĠĠ Ġget Files List () ĊĠĠĠĠĠ Ġ. map If Successful Ġ{ Ġlist Ġ-> Ġlist . filter Ġ{ Ġit . startsWith ( prefix ) Ġ} Ġ} ĊĊĠ Ġ@ Suppress (" unused ") Ġ// ĠUseful Ġfor Ġdebugging ĊĠ Ġfun Ġprint List Files () Ġ{ ĊĠĠĠ Ġget Files List () ĊĠĠĠĠĠ Ġ. observe On UI () ĊĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġit . result (). forEach Ġ{ Ġfile Ġ-> ĠTim ber . d (" File : Ġ$ file ") Ġ} ĊĠĠĠĠĠ Ġ}, Ġ{}) ĊĠ Ġ} ĊĊĠ Ġclass ĠGet Error ( message : ĠString ?) Ġ: ĠException ( message ) ĊĠ Ġclass ĠUpload Error ( message : ĠString ?) Ġ: ĠException ( message ) ĊĠ Ġclass ĠDelete Error ( message : ĠString ?) Ġ: ĠException ( message ) Ċ } Ċ