package Ġcom . notes ync . notes . framework . workers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . Coroutine Worker Ċ import Ġandroidx . work . Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġcom . google . firebase . firestore . Listener Registration Ċ import Ġcom . notes ync . notes . business . data . cache . ab straction . Note Cache DataSource Ċ import Ġcom . notes ync . notes . business . data . network . ab straction . Note Network DataSource Ċ import Ġcom . notes ync . notes . business . data . util . Gson Helper Ċ import Ġcom . notes ync . notes . util . Constants Ċ import Ġcom . notes ync . notes . util . c Log Ċ import Ġcom . notes ync . notes . util . print Log D Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Factory Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . on Completion Ċ import Ġkotlinx . coroutines . flow . on Empty Ċ Ċ class ĠSync Delete Note Worker Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġapp Context : ĠContext , Ġ@ Ass isted Ġprivate Ġval Ġparams : ĠWorker Parameters , ĊĊĠĠĠ Ġprivate Ġval Ġnote Network DataSource : ĠNote Network DataSource , ĊĠĠĠ Ġprivate Ġval Ġnote Cache DataSource : ĠNote Cache DataSource Ċ ) Ġ: ĠCor outine Worker ( app Context , Ġparams ) Ġ{ ĊĊĠĠĠ Ġvar Ġjob To Cancel : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( run Attempt Count Ġ> ĠConstants . MAX _ RETRY _ LIMIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . failure ( input Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġinput Data . key Value Map ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠGson Helper . deserialize To User ( data [" user "] Ġas ĠString ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Stopped ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob To Cancel Ġ= ĠCor outine Scope ( IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Network DataSource . get Deleted Note Changes ( user ). on Empty Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log D (" Sync Delete Note Worker ", Ġ" on Empty ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ on Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log D (" Sync Delete Note Worker ", Ġ" onComplete ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ on Completion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Stopped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnote Cache DataSource . delete Note ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log D (" sync Deleted Notes ", Ġ"$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log D (" sync Deleted Notes ", Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Log D (" Sync Delete Note Worker ", Ġ" Retry ing ĠRequest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Log ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . retry () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Ass isted Factory ĊĠĠĠ Ġinterface ĠFactory Ġ: ĠChild Worker Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( app Context : ĠContext , Ġparams : ĠWorker Parameters ): ĠSync Delete Note Worker ĊĠĠĠ Ġ} Ċ }