/* Ċ Ġ* Ġ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 . work Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . h ilt . work . H ilt Worker Ċ import Ġandroidx . work . Backoff Policy Ċ import Ġandroidx . work . Constraints Ċ import Ġandroidx . work . Coroutine Worker Ċ import Ġandroidx . work . Existing Work Policy Ċ import Ġandroidx . work . Network Type Ċ import Ġandroidx . work . One Time Work Request Ċ import Ġandroidx . work . One Time Work RequestBuilder Ċ import Ġandroidx . work . Work Manager Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . th reet en . bp . DayOfWeek Ċ import Ġorg . th reet en . bp . temporal . Ch rono Unit Ċ import Ġsoup . movie . ext . is Best Ċ import Ġsoup . movie . model . Movie Ċ import Ġsoup . movie . model . repository . Movie Repository Ċ import Ġsoup . movie . notification . Notification Builder Ċ import Ġsoup . movie . util . currentTime Ċ import Ġsoup . movie . util . plus Days To Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ H ilt Worker Ċ class ĠLegacy Worker Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠ Ġ@ Ass isted Ġcontext : ĠContext , ĊĠĠĠ Ġ@ Ass isted Ġparams : ĠWorker Parameters , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMovie Repository , ĊĠĠĠ Ġprivate Ġval Ġnotification Builder : ĠNotification Builder Ċ ) Ġ: ĠCor outine Worker ( context , Ġparams ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" do Work : Ġstart !") ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie List Ġ= Ġget Recommended Movie List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . show Legacy Notification ( movie List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( run Attempt Count Ġ<= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . retry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Recommended Movie List (): ĠList < Movie > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update AndGet Now Movie List (). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . the ater . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc gv Ġ!= Ġnull Ġ&& Ġlot te Ġ!= Ġnull Ġ&& Ġmeg ab ox Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Indexed Ġ{ Ġindex , Ġmovie Ġ-> Ġindex Ġ< Ġ 3 Ġ|| Ġmovie . is Best () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEBUG Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" legacy " ĊĊĠĠĠĠĠĠĠ Ġfun Ġenqueue Work ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue Unique Work ( TAG , ĠExisting Work Policy . REPLACE , Ġcreate Request ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcancel Work ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ). cancel Unique Work ( TAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Request (): ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work RequestBuilder < Legacy Worker >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Delay ( calculate Initial Delay Minutes (), ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( Backoff Policy . EXP ON ENTIAL , Ġ 1 , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcalculate Initial Delay Minutes (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠcurrentTime () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre birth Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Hour ( 1 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus Days To ( DayOfWeek . FR ID AY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus Week s ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent . until ( re birth , ĠCh rono Unit . MIN UTES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ