package Ġcom . no omit . domain . station _ manager Ċ Ċ import Ġcom . no omit . domain . entities . Category Model Ċ import Ġcom . no omit . domain . entities . Station Model Ċ import Ġcom . no omit . domain . entities . Station Network Entity Ċ import Ġcom . no omit . domain . radio _ browser . Radio Browser Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠStation ManagerImpl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapi Service : ĠRadio Browser , Ċ ) Ġ: ĠStation Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠMutable State Flow < Station Manager State >( Station Manager State . Loading ) ĊĠĠĠ Ġoverride Ġval Ġstate Ġ= Ġ_ state ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstations By ( category : ĠCategory Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġstate . value ĊĠĠĠĠĠĠĠ Ġif Ġ( last Ġis ĠStation Manager State . Success Ġ&& Ġlast . category Ġ== Ġcategory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠStation Manager State . Loading ĊĊĠĠĠĠĠĠĠ Ġval Ġflow : ĠFlow < List < Station Network Entity >> Ġ= Ġwhen Ġ( category ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCategory Model . Language Ġ-> Ġflow Of ( api Service . stations By Language ( category . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCategory Model . Tag Ġ-> Ġflow Of ( api Service . stations By Tag ( category . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCategory Model . Top V oted Ġ-> Ġflow Of ( api Service . get Top V oted ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCategory Model . Global Search Ġ-> Ġflow Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Service . search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . search Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . search Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġflow . flow On ( Dispatch ers . IO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġstation List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstation List . sorted By Descending Ġ{ Ġit . votes Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag List Ġ= Ġit . tags . split ("," ). on Each Ġ{ Ġtag Ġ-> Ġtag . trim () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStation Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup votes Ġ= Ġit . votes . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Url Ġ= Ġit . url _ resolved , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġit . country , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhomepage Ġ= Ġit . homepage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcodec Ġ= Ġit . codec , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit rate Ġ= Ġit . bit rate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav icon Ġ= Ġit . favicon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtag List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . Default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġe Ġ-> Ġ_ state . value Ġ= ĠStation Manager State . Failure ( e ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġ_ state . value Ġ= ĠStation Manager State . Success ( it , Ġcategory ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ