package Ġ` in `. bit ots av . feed . data Ċ Ċ import Ġ` in `. bit ots av . R Ċ import Ġ` in `. bit ots av . events . data . Event Repository Ċ import Ġ` in `. bit ots av . feed . api . Feed Service Ċ import Ġ` in `. bit ots av . shared . data . Repository Ċ import Ġ` in `. bit ots av . shared . data . get Json String FromFile Ċ import Ġ` in `. bit ots av . shared . exceptions . Database Exception Ċ import Ġ` in `. bit ots av . shared . exceptions . Network Exception Ċ import Ġ` in `. bit ots av . shared . utils . forEach Parallel Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . get Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Feed Repository " Ċ Ċ class ĠFeed Repository ( private Ġval Ġfeed Dao : ĠFeed Dao ) Ġ: ĠRepository < Feed >, ĠK oin Component Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetAll (): ĠLive Data < List < Feed >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfeed Dao . getAll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Latest Timestamp (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfeed Dao . get Latest Timestamp () Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert ( var arg Ġitems : ĠFeed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfeed Dao . insert (* items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Feed s From Local Json () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeeds Json String Ġ= Ġget Json String FromFile ( R . raw . feeds ) ĊĠĠĠĠĠĠĠ Ġval ĠlistOf Feed s Ġ= ĠGson (). fromJson ( feeds Json String , ĠArray < Feed >:: class . java ). toList () ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Feed s . forEach Parallel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Star red Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventName Ġ= Ġit . eventId ?. let Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget < Event Repository >(). getName ById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠDatabase Exception (" Event Ġname Ġnot Ġfound Ġfor Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Properties ( is Star red , ĠeventName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert (* listOf Feed s . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Inserted Ġfeeds Ġinto ĠDB Ġfrom Ġlocal Ġjson Ġfile .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ ĠPOST Ġ- Ġ/ get Feed s After Ġ- Ġbody : Ġ{ timestamp } Ċ // ĠĠĠĠ 5 0 2 Ġ- ĠServer Ġerror Ċ // ĠĠĠĠ 2 0 0 Ġ- ĠArray Ġof Ġannounce ments ĊĠĠĠ Ġfun Ġfetch Feed s After Async ( timestamp : ĠLong ): ĠDeferred < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġmap Of (" timestamp " Ġto Ġtimestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠFeed Service . api . get Feed s After Async ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrequest . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code () Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Feed s Ġreceived Ġafter Ġ$ timestamp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeeds Ġ= Ġresponse . body () Ġ?: Ġthrow ĠNetwork Exception (" Response Ġbody Ġis Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeeds . forEach Parallel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . eventId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Star red Ġ= Ġget < Event Repository >(). is Star red ( it . eventId ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventName Ġ= Ġget < Event Repository >(). getName ById ( it . eventId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠDatabase Exception (" Event Ġname Ġnot Ġfound Ġfor Ġ${ it . eventId }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Properties ( is Star red , ĠeventName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Properties ( false , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert (* feeds . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Feed s Ġafter Ġ$ timestamp Ġinserted Ġin ĠDB ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNetwork Exception (" Error Ġfetching Ġfeeds Ġafter Ġ$ timestamp . ĠResponse Ġcode : Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }