package Ġcom . kp stv . y ts . services Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Log Ċ import Ġandroidx . h ilt . Ass isted Ċ import Ġandroidx . h ilt . work . Worker Inject Ċ import Ġandroidx . work .* Ċ import Ġcom . kp stv . y ts . App Interface Ċ import Ġcom . kp stv . y ts . R Ċ import Ġcom . kp stv . y ts . data . db . localized . Main Dao Ċ import Ġcom . kp stv . y ts . data . models . data . data _ main Ċ import Ġcom . kp stv . y ts . default Preference Ċ import Ġcom . kp stv . y ts . extensions . Notifications Ċ import Ġcom . kp stv . y ts . extensions . utils . App Utils Ċ import Ġcom . kp stv . y ts . extensions . utils . Update Utils Ċ import Ġcom . kp stv . y ts . extensions . utils . Y TS Parser Ċ import Ġcom . kp stv . y ts . interfaces . api . TM db Api Ċ import Ġcom . kp stv . y ts . ui . settings . General Settings Fragment Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . net . ssl . SSL Handshake Exception Ċ Ċ class ĠApp Worker Ġ@ Worker Inject Ġconstructor ( ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġapp Context : ĠContext , ĊĠĠĠ Ġ@ Ass isted Ġworker Params : ĠWorker Parameters , ĊĠĠĠ Ġprivate Ġval Ġt mdb Api : ĠTM db Api , ĊĠĠĠ Ġprivate Ġval Ġy ts Parser : ĠY TS Parser , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMain Dao , ĊĠĠĠ Ġprivate Ġval Ġupdate Utils : ĠUpdate Utils Ċ ) Ġ: ĠCor outine Worker ( app Context , Ġworker Params ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġjava Class . simple Name ĊĠĠĠ Ġprivate Ġval Ġpreference Ġby Ġapp Context . default Preference () ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck For Updates () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( preference . getBoolean ( General Settings Fragment . FEATURE D _ MOV IE _ NOTIFY _ PRE F , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Feature d Movies () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcheck For Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Pair Ġ= Ġupdate Utils . check Async () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Pair . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . send Update Notification ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠLog . e ( TAG , Ġapp Context . getString ( R . string . no _ updates )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Failed : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfetch Feature d Movies () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Feature d Movies Ġ= Ġrepository . get Movies By Query ( App Interface . FEATURE D _ QUERY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġy ts Parser . fetch Feature d Movies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Model Ġ= Ġdata _ main . from ( list , ĠApp Interface . FEATURE D _ QUERY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Movies ( main Model ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Feature d Movies ?. movies ?. any Ġ{ Ġit Ġ== Ġmovie Ġ} Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbanner Image : ĠBitmap ? Ġ= Ġif Ġ( movie . imdb Code Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbanner Url Ġ= Ġt mdb Api . get Movie ( movie . imdb Code ). get Banner Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Utils . get Bitmap From Url ( banner Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . send Movie Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Ġ= Ġmovie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Image Ġ= ĠApp Utils . get Bitmap From Url ( movie . banner Url ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Image Ġ= Ġbanner Image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSSL Handshake Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . send SSL Handshake Notification ( app Context ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Failed : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAPP _ WORK ER _ ID Ġ= Ġ" movies y _ app _ worker " ĊĊĠĠĠĠĠĠĠ Ġfun Ġschedule ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod ic Work RequestBuilder < App Worker >( 2 0 , ĠTimeUnit . MIN UTES , Ġ 5 , ĠTimeUnit . MIN UTES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ). enqueue Unique Periodic Work ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAPP _ WORK ER _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Periodic Work Policy . REPLACE , Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }