package Ġcom . tech be lo ved . h ym nb ook . utils . workers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . h ilt . Ass isted Ċ import Ġandroidx . h ilt . work . Worker Inject Ċ import Ġandroidx . work . Data Ċ import Ġandroidx . work . Rx Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġandroidx . work . work Data Of Ċ import Ġcom . tech be lo ved . h ym nb ook . data . SharedPreferences Repo Ċ import Ġcom . tech be lo ved . h ym nb ook . data . repo . Online Repo Ċ import Ġio . reactivex . Single Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠShould Ġuse Ġthis Ġto Ġschedule Ġh ym ns Ġmidi Ġdownload Ġand Ġdatabase Ġsync . ĠPeriod ically , Ċ Ġ* Ġlike Ġonce Ġa Ġweek Ġchecks Ġfor Ġnew Ġupdate . ĠIf Ġthere Ġis Ġany Ġupdate , Ġdownloads , Ġit , Ġextract s Ġit Ġand Ġpopulate Ġthe Ġdatabase Ċ Ġ*/ Ċ class ĠM idi Sync Worker Ġ@ Worker Inject Ġconstructor (@ Ass isted Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ass isted Ġparams : ĠWorker Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences Repo : ĠSharedPreferences Repo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġonline Repo : ĠOnline Repo ) Ġ: ĠRx Worker ( context , Ġparams ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Work (): ĠSingle < Result > Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . i (" Midi Sync Work : Ġon Go ing Ġwork ") ĊĠĠĠĠĠĠĠ Ġmake Status Notification (" Checking Ġmidi Ġarchive Ġversion ", Ġapplication Context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preferences Repo . midi Archive Version () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ Ġcurrent Version Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonline Repo . latest Midi Archive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġonline Midi Ġ-> Ġonline Midi . version Ġ> Ġcurrent Version Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ ĠTim ber . i (" New Ġversion Ġof Ġarchive Ġavailable ! ĠPro ceeding Ġwith Ġdownload ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠTim ber . i ( it , Ġ" No Ġnew Ġversion Ġof Ġarchive Ġavailable ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġonline Midi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarchive Path Ġ= Ġonline Midi . url . substring ( online Midi . url . lastIndexOf (" t unes ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Data Ġ= Ġwork Data Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKEY _ FIRE BASE _ ARCH IVE _ PATH Ġto Ġarchive Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKEY _ FIRE BASE _ ARCH IVE _ VERSION Ġto Ġonline Midi . version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( output Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /* Ċ 1 . ĠGets Ġthe Ġlatest Ġversion Ġfrom Ġfirebase Ġand Ġcompare Ġwith Ġone Ġin Ġshared Ġpreferences Ċ 2 . ĠIf Ġnot Ġequal , Ġstart Ġa Ġdownload Ċ 3 . ĠOn Ġdownload Ġcomplete , Ġunzip Ġthe Ġfiles Ċ 4 . ĠOn Ġunzip Ġcomplete , Ġloop Ġthrough Ġthe Ġfiles Ġand Ġupdate Ġthe Ġrelevant Ġcolumns Ġin Ġdatabase Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠWorker Ġ[ Data ] Ġkey Ġfor Ġsupply ing Ġthe Ġdefault Ġpreferences Ġname Ġto Ġuse . ĠWe Ġmake Ġuse Ġof Ġthis Ġso Ġthat Ċ Ġ* Ġtests Ġcan Ġhave Ġtheir Ġown Ġpreferences Ġfile Ġwithout Ġtemp ering Ġwith Ġthe Ġmain Ġapp Ġpreferences Ċ Ġ*/ Ċ const Ġval ĠKEY _ DEFAULT _ PREFER ENCE _ NAME Ġ= Ġ" default Preference Name " Ċ Ċ /** Ċ Ġ* ĠWorker Ġ[ Data ] Ġkey Ġfor Ġsupply ing Ġthe Ġmidi Version Preference Ġkey Ċ Ġ*/ Ċ const Ġval ĠKEY _ PRE F _ MIDI _ VERSION Ġ= Ġ" key Midi Version " Ċ Ċ const Ġval ĠKEY _ FIRE BASE _ ARCH IVE _ COLLECTION Ġ= Ġ" archive Collection " Ċ Ċ const Ġval ĠKEY _ FIRE BASE _ ARCH IVE _ VERSION Ġ= Ġ" midi Firebase Archive Version " ĊĊ