// Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠH ON ĠK IN ĠT AT ĠĠĠĠĠ 2 0 5 1 4 3 3 2 ĠĠĠĠĠĠĠ Ġk thon @ connect . ust . hk Ċ // Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠL AI ĠCHE UK ĠHE I ĠĠĠ 2 0 4 6 4 0 4 4 ĠĠĠĠĠĠĠ Ġch l ai ak @ connect . ust . hk Ċ // Ġ ĠCOMP 4 5 2 1 ĠĠĠ ĠCHAN ĠH OK ĠH IM ĠĠĠĠ 2 0 4 3 5 3 9 2 ĠĠĠĠĠĠĠ Ġhh chan al @ connect . ust . hk Ċ Ċ package Ġcom . y ose m ite y ss . gre entr ans it . domain . use cases . route Ċ Ċ import Ġcom . y ose m ite y ss . gre entr ans it . domain . di . Io Dispatcher Ċ import Ġcom . y ose m ite y ss . gre entr ans it . domain . models . Route Stop Shift Eta Result Ċ import Ġcom . y ose m ite y ss . gre entr ans it . domain . repositories . Transit Repository Ċ import Ġcom . y ose m ite y ss . gre entr ans it . domain . states . Resource Ċ import Ġcom . y ose m ite y ss . gre entr ans it . domain . use cases . Flow UseCase Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠGet Route Stop Shift Et as UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtransit Repository : ĠTrans it Repository , ĊĠĠĠ Ġ@ Io Dispatcher Ġcoroutine Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠFlow UseCase < Get Route Stop Shift Et as Parameters , ĠList < Route Stop Shift Eta Result >>( coroutine Dispatcher ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġparameters : ĠGet Route Stop Shift Et as Parameters ĊĠĠĠ Ġ): ĠFlow < Resource < List < Route Stop Shift Eta Result >>> Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġroute Ġstops ' Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Stops Ġ= Ġtransit Repository . get Route Stops ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Id Ġ= Ġparameters . route Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Seq Ġ= Ġparameters . route Seq ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġroute Ġstops ' Ġet as Ġby Ġstop Ġids ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshift Et as Ġ= Ġroute Stops . map Ġ{ Ġstop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġshift Ġet as Ġof Ġall Ġstops Ġof Ġthe Ġroute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransit Repository . get Route Stop Shift Et as ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Id Ġ= Ġparameters . route Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Id Ġ= Ġstop . stop Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . eta Min ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await All () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCombine Ġresults , Ġuse Ġthe Ġear liest Ġshift Ġeta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġroute Stops . map Indexed Ġ{ Ġindex , Ġroute Stop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Stop Shift Eta Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop Ġ= Ġroute Stop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop Shift Eta Ġ= Ġshift Et as [ index ]. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . Success ( results )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( parameters . interval ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠGet Route Stop Shift Et as Parameters ( ĊĠĠĠ Ġval Ġroute Id : ĠLong , ĊĠĠĠ Ġval Ġroute Seq : ĠInt , ĊĠĠĠ Ġval Ġinterval : ĠLong Ċ )