package Ġru . deb ajo . reader . rss . domain . feed Ċ Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġru . deb ajo . reader . rss . domain . channel . Channels Subscriptions UseCase Ċ import Ġru . deb ajo . reader . rss . domain . model . Domain Article Ċ import Ġru . deb ajo . reader . rss . domain . model . Domain Channel Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠFeed List UseCase ( ĊĠĠĠ Ġprivate Ġval Ġsubscriptions UseCase : ĠChannels Subscriptions UseCase , ĊĠĠĠ Ġprivate Ġval Ġload Articles UseCase : ĠLoad Articles UseCase , Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Opt In ( Experimental Cor outines Api :: class ) ĊĠĠĠ Ġoperator Ġfun Ġinvoke (): ĠFlow < List < Domain Article >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsubscriptions UseCase . observe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Latest Ġ{ Ġsubscribed Channels Ġ-> Ġload Articles ( subscribed Channels ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġarticles Ġ-> Ġarticles . sorted By Descending Ġ{ Ġit . timestamp ?. millis Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Articles ( channels : ĠList < Domain Channel >): ĠFlow < List < Domain Article >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( channels . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġflow Of ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġflows Ġ= Ġchannels . map Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Articles UseCase . load ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcombine ( flows ) Ġ{ Ġfeeds : ĠArray < List < Domain Article >> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds . flatMap Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ