/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby Ġ 2 0 1 9 Ġsky do ves Ġ( Ja ew o ong ĠE um ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . sky do ves . the movies 2 . repository Ċ Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . sky do ves . sand wich . suspend On Success Ċ import Ġcom . sky do ves . the movies 2 . api . service . Tv Service Ċ import Ġcom . sky do ves . the movies 2 . room . Tv Dao Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠT v Repository Ġconstructor ( ĊĠ Ġprivate Ġval Ġtv Service : ĠT v Service , ĊĠ Ġprivate Ġval Ġtv Dao : ĠT v Dao Ċ ) Ġ: ĠRepository Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠTim ber . d (" Injection ĠT v Repository ") ĊĠ Ġ} ĊĊĠ Ġ@ Worker Thread ĊĠ Ġfun Ġload Keyword List ( id : ĠInt ) Ġ= Ġflow Ġ{ ĊĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id ) Ġ?: Ġreturn @ flow ĊĠĠĠ Ġvar Ġkeywords Ġ= Ġtv . keywords ĊĠĠĠ Ġif Ġ( keywords . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtv Service . fetch Keywords ( id ) ĊĠĠĠĠĠ Ġresponse . suspend On Success Ġ{ ĊĠĠĠĠĠĠĠ Ġkeywords Ġ= Ġdata . keywords ĊĠĠĠĠĠĠĠ Ġtv . keywords Ġ= Ġkeywords ĊĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv ) ĊĠĠĠĠĠĠĠ Ġemit ( keywords ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġemit ( keywords ) ĊĠĠĠ Ġ} ĊĠ Ġ}. flow On ( Dispatch ers . IO ) ĊĊĠ Ġ@ Worker Thread ĊĠ Ġfun Ġload Video List ( id : ĠInt ) Ġ= Ġflow Ġ{ ĊĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id ) Ġ?: Ġreturn @ flow ĊĠĠĠ Ġvar Ġvideos Ġ= Ġtv . videos ĊĠĠĠ Ġif Ġ( videos . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtv Service . fetch Videos ( id ) ĊĠĠĠĠĠ Ġresponse . suspend On Success Ġ{ ĊĠĠĠĠĠĠĠ Ġvideos Ġ= Ġdata . results ĊĠĠĠĠĠĠĠ Ġtv . videos Ġ= Ġvideos ĊĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv ) ĊĠĠĠĠĠĠĠ Ġemit ( videos ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġemit ( videos ) ĊĠĠĠ Ġ} ĊĠ Ġ}. flow On ( Dispatch ers . IO ) ĊĊĠ Ġ@ Worker Thread ĊĠ Ġfun Ġload Reviews List ( id : ĠInt ) Ġ= Ġflow Ġ{ ĊĠĠĠ Ġval Ġtv Ġ= Ġtv Dao . get Tv ( id ) Ġ?: Ġreturn @ flow ĊĠĠĠ Ġvar Ġreviews Ġ= Ġtv . reviews ĊĠĠĠ Ġif Ġ( reviews . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtv Service . fetch Reviews ( id ) ĊĠĠĠĠĠ Ġresponse . suspend On Success Ġ{ ĊĠĠĠĠĠĠĠ Ġreviews Ġ= Ġdata . results ĊĠĠĠĠĠĠĠ Ġtv . reviews Ġ= Ġreviews ĊĠĠĠĠĠĠĠ Ġtv Dao . update Tv ( tv ) ĊĠĠĠĠĠĠĠ Ġemit ( reviews ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġemit ( reviews ) ĊĠĠĠ Ġ} ĊĠ Ġ}. flow On ( Dispatch ers . IO ) Ċ } Ċ