/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠSO UP Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġsoup . movie . data . db . internal Ċ Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġsoup . movie . data . db . Local DataSource Ċ import Ġsoup . movie . data . db . internal . dao . Favorite Movie Dao Ċ import Ġsoup . movie . data . db . internal . dao . Movie Cache Dao Ċ import Ġsoup . movie . data . db . internal . dao . Open Date Alarm Dao Ċ import Ġsoup . movie . data . db . internal . entity . Movie List Entity Ċ import Ġsoup . movie . data . db . internal . entity . Movie List Entity . Companion . TYPE _ NOW Ċ import Ġsoup . movie . data . db . internal . entity . Movie List Entity . Companion . TYPE _ PLAN Ċ import Ġsoup . movie . data . db . internal . mapper . to Entity Ċ import Ġsoup . movie . data . db . internal . mapper . to Favorite Movie Entity Ċ import Ġsoup . movie . data . db . internal . mapper . to Movie Ċ import Ġsoup . movie . data . db . internal . mapper . to Movie Entity Ċ import Ġsoup . movie . data . db . internal . mapper . to Open Date Alarm Ċ import Ġsoup . movie . data . db . internal . mapper . to Open Date Alarm Entity Ċ import Ġsoup . movie . model . Movie Ċ import Ġsoup . movie . model . Movie List Ċ import Ġsoup . movie . model . Open Date Alarm Ċ import Ġsoup . movie . model . The ater Area Group Ċ import Ġtim ber . log . Tim ber Ċ Ċ internal Ġclass ĠLocal DataSource Impl ( ĊĠĠĠ Ġprivate Ġval Ġfavorite Movie Dao : ĠF avorite Movie Dao , ĊĠĠĠ Ġprivate Ġval Ġopen Date Alarm Dao : ĠOpen Date Alarm Dao , ĊĠĠĠ Ġprivate Ġval Ġcache Dao : ĠMovie Cache Dao Ċ ) Ġ: ĠLocal DataSource Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcode Response : ĠThe ater Area Group ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave Now Movie List ( movie List : ĠMovie List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave Movie List As ( TYPE _ NOW , Ġmovie List ) ĊĠĠĠĠĠĠĠ Ġfavorite Movie Dao . update All ( movie List . list . map Ġ{ Ġit . to Favorite Movie Entity () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Now Movie List Flow (): ĠFlow < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movie List Flow ( TYPE _ NOW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave Plan Movie List ( movie List : ĠMovie List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave Movie List As ( TYPE _ PLAN , Ġmovie List ) ĊĠĠĠĠĠĠĠ Ġfavorite Movie Dao . update All ( movie List . list . map Ġ{ Ġit . to Favorite Movie Entity () Ġ}) ĊĠĠĠĠĠĠĠ Ġopen Date Alarm Dao . update All ( movie List . list . map Ġ{ Ġit . to Open Date Alarm Entity () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Plan Movie List Flow (): ĠFlow < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movie List Flow ( TYPE _ PLAN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsave Movie List As ( type : ĠString , Ġmovie List : ĠMovie List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcache Dao . insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie List Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie List . last UpdateTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie List . list . map Ġ{ Ġit . to Movie Entity () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Movie List Flow ( type : ĠString ): ĠFlow < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcache Dao . get Movie List ByType ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . list . map Ġ{ Ġmovie Entity Ġ-> Ġmovie Entity . to Movie () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġemit ( emptyList ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Now Last UpdateTime (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcache Dao . findBy Type ( TYPE _ NOW ). last UpdateTime ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Plan Last UpdateTime (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcache Dao . findBy Type ( TYPE _ PLAN ). last UpdateTime ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll Movie List (): ĠList < Movie > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Now Movie List () Ġ+ Ġget Plan Movie List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Now Movie List (): ĠList < Movie > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movie ListOf ( TYPE _ NOW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Plan Movie List (): ĠList < Movie > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Movie ListOf ( TYPE _ PLAN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Movie ListOf ( type : ĠString ): ĠList < Movie > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Dao . findBy Type ( type ). list ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmovie Entity Ġ-> Ġmovie Entity . to Movie () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Code List ( response : ĠThe ater Area Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Response Ġ= Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Code List (): ĠThe ater Area Group ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcode Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Favorite Movie ( movie : ĠMovie ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfavorite Movie Dao . insert Favorite Movie ( movie . to Favorite Movie Entity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġremove Favorite Movie ( movie Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfavorite Movie Dao . delete Favorite Movie ( movie Id ) ĊĠĠĠĠĠĠĠ Ġopen Date Alarm Dao . delete ( movie Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Favorite Movie List (): ĠFlow < List < Movie >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfavorite Movie Dao . get Favorite Movie List (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġfavorite Movie Entity Ġ-> Ġfavorite Movie Entity . to Movie () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġis Favorite Movie ( movie Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfavorite Movie Dao . is Favorite Movie ( movie Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġdate Ġy yyy . mm . dd Ġex ) Ġ 2 0 2 0 . 0 1 . 3 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Open Date Alarm List Until ( date : ĠString ): ĠList < Open Date Alarm > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Date Alarm Dao . getAll Until ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġopen Date Alarm Entity Ġ-> Ġopen Date Alarm Entity . to Open Date Alarm () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhas Open Date Al arms (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Date Alarm Dao . has Al arms () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Open Date Alarm ( alarm : ĠOpen Date Alarm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Date Alarm Dao . insert ( alarm . to Entity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Open Date Al arms ( al arms : ĠList < Open Date Alarm >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Date Alarm Dao . delete All ( al arms . map Ġ{ Ġit . movie Id Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ