package Ġcom . ken ny c . data _ en phase Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . room . Room Ċ import Ġcom . ken ny c . api _ en phase . En phase Api Ċ import Ġcom . ken ny c . api _ en phase . model . exception . Network Exception Ċ import Ġcom . ken ny c . data _ en phase . cache . Timed Cache Ċ import Ġcom . ken ny c . data _ en phase . db . En phase Dao Ċ import Ġcom . ken ny c . data _ en phase . db . En phase Database Ċ import Ġcom . ken ny c . data _ en phase . db . model . Room Sol ar System Ċ import Ġcom . ken ny c . solar viewer . data . Clock Ċ import Ġcom . ken ny c . solar viewer . data . Logger Ċ import Ġcom . ken ny c . solar viewer . data . Sol ar Repository Ċ import Ġcom . ken ny c . solar viewer . data . model .* Ċ import Ġcom . ken ny c . solar viewer . data . model . exception . Invalid DateRange Exception Ċ import Ġcom . ken ny c . solar viewer . data . model . exception . RateLimit Exception Ċ import Ġcom . ken ny c . solar viewer . data . rx . Comp letable Subscriber Ċ import Ġio . reactivex . rx java 3 . core . Flow able Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . math . abs Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Sol ar Repository " Ċ Ċ private Ġconst Ġval ĠKEY _ SYSTEM _ SUM MARY Ġ= Ġ". SYSTEM _ SUM MARY " Ċ private Ġconst Ġval ĠKEY _ SYSTEM _ PRO DU CTION Ġ= Ġ". SYSTEM _ PRO DU CTION " Ċ private Ġconst Ġval ĠKEY _ SYSTEM _ CON SU MP TION Ġ= Ġ". SYSTEM _ CON SU MP TION " Ċ Ċ class ĠEn phase Sol ar Repository ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġclock : ĠClock , ĊĠĠĠ Ġprivate Ġval Ġapi : ĠEn phase Api , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ċ ) Ġ: ĠSol ar Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcache Ġ= ĠTime d Cache ( logger , Ġclock ) ĊĊĠĠĠ Ġprivate Ġval Ġdao : ĠEn phase Dao Ġ= ĠRoom . database Builder ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ ĠEn phase Database :: class . java , ĊĠĠĠĠĠĠĠ Ġ" solar _ viewer . db " ĊĠĠĠ Ġ). build (). dao () ĊĊĠĠĠ Ġoverride Ġfun Ġget Sol ar Systems (): ĠFlow able < List < Sol ar System >> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġforce Ġrefresh Ġof Ġsystems Ġmanually Ġand Ġbased Ġon Ġtime ĊĠĠĠĠĠĠĠ Ġreturn Ġdao . get Systems () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . v ( TAG , Ġ" No Ġitems Ġpresent , Ġfetching Ġfrom ĠAPI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Systems () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . just ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . map Ġ{ Ġsystem Ġ-> ĠSol ar System ( system . id , Ġsystem . name , ĠSystem Status . NORMAL ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget System Summary ( solar System : ĠSol ar System ): ĠSingle < Sol ar System Summary > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġsolar System . id Ġ+ ĠKEY _ SYSTEM _ SUM MARY ĊĠĠĠĠĠĠĠ Ġval Ġcached Ġ= Ġcache . get ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġis ĠSol ar System Summary ) Ġreturn ĠSingle . just ( cached ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġapi . getSystem Summary ( solar System . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSol ar System Summary ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . system Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . num Modules , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . size In W atts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . current Power In W atts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . energy Today In W atts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . energy Lifetime In W atts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto System Status ( it . status ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate ( TimeUnit . SECONDS . to Millis ( it . last Report TS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġcache . put ( key , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ ĠSingle . error ( convert Exception ( it )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Production Stats ( ĊĠĠĠĠĠĠĠ Ġsolar System : ĠSol ar System , ĊĠĠĠĠĠĠĠ ĠstartTime : ĠLong , ĊĠĠĠĠĠĠĠ ĠendTime : ĠLong ? ĊĠĠĠ Ġ): ĠSingle < List < Production Stats >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime InSeconds Ġ= ĠTimeUnit . MILLISECONDS . to Seconds ( startTime ) ĊĊĠĠĠĠĠĠĠ Ġval ĠendTime InSeconds Ġ= Ġwhen Ġ( endTime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTimeUnit . MILLISECONDS . to Seconds ( endTime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsolar System . id Ġ+ ĠKEY _ SYSTEM _ PRO DU CTION Ġ+ Ġ". START _$ startTime InSeconds . END _$ endTime InSeconds " ĊĠĠĠĠĠĠĠ Ġval Ġcached Ġ= Ġcache . get ( key ) ĊĠĠĠĠĠĠĠ Ġvar Ġlist : ĠList < Production Stats >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġis ĠList <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġcached . filter Is Instance ( Production Stats :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ&& Ġit . size Ġ== Ġcached . size Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( list ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get Production Stats ( solar System . id , ĠstartTime InSeconds , ĠendTime InSeconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . stats . map Ġ{ ĠProduction Stats ( it . ending At TS , Ġit . power Created In Wh ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġcache . put ( key , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ ĠSingle . error ( convert Exception ( it )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSingle . just ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Consumption Stats ( ĊĠĠĠĠĠĠĠ Ġsolar System : ĠSol ar System , ĊĠĠĠĠĠĠĠ ĠstartTime : ĠLong , ĊĠĠĠĠĠĠĠ ĠendTime : ĠLong ? ĊĠĠĠ Ġ): ĠSingle < List < Consumption Stats >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime InSeconds Ġ= ĠTimeUnit . MILLISECONDS . to Seconds ( startTime ) ĊĊĠĠĠĠĠĠĠ Ġval ĠendTime InSeconds Ġ= Ġwhen Ġ( endTime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTimeUnit . MILLISECONDS . to Seconds ( endTime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsolar System . id Ġ+ ĠKEY _ SYSTEM _ CON SU MP TION Ġ+ Ġ". START _$ startTime InSeconds . END _$ endTime InSeconds " ĊĠĠĠĠĠĠĠ Ġval Ġcached Ġ= Ġcache . get ( key ) ĊĠĠĠĠĠĠĠ Ġvar Ġlist : ĠList < Consumption Stats >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġis ĠList <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġcached . filter Is Instance ( Consumption Stats :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ&& Ġit . size Ġ== Ġcached . size Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( list ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get Consumption Stats ( solar System . id , ĠstartTime InSeconds , ĠendTime InSeconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . stats . map Ġ{ ĠCons umption Stats ( it . ending At TS , Ġit . power Cons umed In Wh ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġcache . put ( key , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ ĠSingle . error ( convert Exception ( it )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSingle . just ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget System Report ( ĊĠĠĠĠĠĠĠ Ġsolar System : ĠSol ar System , ĊĠĠĠĠĠĠĠ ĠstartTime : ĠLong , ĊĠĠĠĠĠĠĠ ĠendTime : ĠLong ? ĊĠĠĠ Ġ): ĠSingle < Sol ar System Report > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Consumption Stats ( solar System , ĠstartTime , ĠendTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip With ( get Production Stats ( solar System , ĠstartTime , ĠendTime ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġconsumption , Ġproduction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( cons umption . size Ġ== Ġproduction . size ) Ġ{ Ġ" Sizes Ġare Ġnot Ġthe Ġsame " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Import Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Export Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġconsumption . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsumed Ġ= Ġconsumption [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduced Ġ= Ġproduction [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEach Ġitem Ġshould Ġhave Ġthe Ġsame Ġend Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consumed . ending At TS Ġ!= Ġproduced . ending At TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Items Ġat Ġindex Ġ$ i Ġdid Ġnot Ġhave Ġthe Ġsame Ġtime . Ġconsumed : Ġ${ consumed . ending At TS }, Ġproduced : Ġ${ pro duced . ending At TS }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnet Ġ= Ġproduced . power Created In Wh Ġ- Ġconsumed . power Cons umed In Wh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( net Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Export Ġ+= Ġnet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Import Ġ+= Ġabs ( net ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSol ar System Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduction . sum By Ġ{ Ġit . power Created In Wh Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumption . sum By Ġ{ Ġit . power Cons umed In Wh Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Export , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Import , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate ( TimeUnit . SECONDS . to Millis ( cons umption . last (). ending At TS )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto System Status ( value : ĠString ): ĠSystem Status Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" comm " Ġ-> ĠSystem Status . COMM UN ICATION _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" power " Ġ-> ĠSystem Status . PRO DU CTION _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" meter ", Ġ" meter _ issue " Ġ-> ĠSystem Status . METER _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" micro " Ġ-> ĠSystem Status . MICRO IN VER TER _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" battery " Ġ-> ĠSystem Status . B ATTER Y _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" normal " Ġ-> ĠSystem Status . NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSystem Status . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Exception ( exception : ĠThrowable ): ĠThrowable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠNetwork Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( exception . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 9 Ġ-> ĠRate Limit Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 2 2 Ġ-> ĠInvalid DateRange Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġexception ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Systems (): ĠFlow able < List < Room Sol ar System >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . get Systems () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Systems Ġ= Ġresponse . systems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠSol ar System ( it . id , Ġit . name , Ġto System Status ( it . status )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Systems . map Ġ{ ĠRoom Sol ar System ( it . id , Ġit . name , ĠcurrentTime , Ġit . status ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Flow able () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert Systems ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( Comp letable Subscriber . stub ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }