/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 0 4 - 2 0 2 1 , ĠUniversity Ġof ĠOs lo Ċ Ġ* Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* Ġ ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġ Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ġ ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* Ġ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* Ġ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ġ ĠNeither Ġthe Ġname Ġof Ġthe ĠH ISP Ġproject Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ċ Ġ* Ġ Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġ Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* Ġ ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND Ċ Ġ* Ġ ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED Ċ Ġ* Ġ ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* Ġ ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR Ċ Ġ* Ġ ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ċ Ġ* Ġ Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* Ġ ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON Ċ Ġ* Ġ ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* Ġ ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġorg . h isp . dh is . android . core . tracker . importer . internal Ċ Ċ import Ġdagger . Re usable Ċ import Ġio . reactivex . Observable Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Inject Ċ import Ġorg . h isp . dh is . android . core . arch . api . exec utors . internal . APIC all Executor Ċ import Ġorg . h isp . dh is . android . core . arch . call . D 2 Progress Ċ import Ġorg . h isp . dh is . android . core . arch . call . internal . D 2 Progress Manager Ċ import Ġorg . h isp . dh is . android . core . arch . db . stores . internal . Ident ifiable Object Store Ċ import Ġorg . h isp . dh is . android . core . common . St orable Object With Uid Ċ Ċ @ Re usable Ċ internal Ġclass ĠJob Query Call Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠTracker Importer Service , ĊĠĠĠ Ġprivate Ġval Ġapi Call Executor : ĠAP IC all Executor , ĊĠĠĠ Ġprivate Ġval Ġtracker Job Store : ĠIdent ifiable Object Store < St orable Object With Uid > Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġstore Job ( jobId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtracker Job Store . insert ( St orable Object With Uid . create ( jobId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery Pending Jobs (): ĠObservable < D 2 Progress > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . just ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Iterable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Jobs Ġ= Ġtracker Job Store . selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Jobs . with Index (). map Ġ{ Ġij Ġ-> ĠPair ( ij . value , Ġij . index Ġ== Ġpending Jobs . size Ġ- Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġjob With Is Last Ġ-> Ġquery Job ( job With Is Last . first . uid (), Ġjob With Is Last . second ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery Job ( jobId : ĠString ): ĠObservable < D 2 Progress > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Job ( jobId , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Job ( jobId : ĠString , Ġis Last Job : ĠBoolean ): ĠObservable < D 2 Progress > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress Manager Ġ= ĠD 2 Progress Manager ( null ) ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Magic Number ") ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . interval ( 0 , Ġ 5 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Call Executor . execute Object Call ( service . get Job ( jobId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . any Ġ{ Ġji Ġ-> Ġji . completed Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Until Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Report Ġ= Ġapi Call Executor . execute Object Call ( service . get Job Report ( jobId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Job Store . delete ( jobId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( job Report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġmanage Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Manager . increase Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJob Report :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ&& Ġis Last Job ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Next Ġ{ Ġ_: ĠThrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ onError Resume Next ĠObservable . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Manager . increase Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJob Report :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ