package Ġblack burn . io . catch up . ui . creation Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġblack burn . io . catch up . app . Base ViewModel Ċ import Ġblack burn . io . catch up . app . Define Ċ import Ġblack burn . io . catch up . app . util . as LiveData Ċ import Ġblack burn . io . catch up . model . Contact Ċ import Ġblack burn . io . catch up . service . app . Contact Service Ċ import Ġblack burn . io . catch up . service . app . DataService Ċ import Ġblack burn . io . catch up . service . app . Scheduler Util Ċ import Ġio . reactivex . rx kotlin . merge Ċ import Ġio . reactivex . rx kotlin . plus Assign Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . realm . Realm Ċ import Ġio . realm . Realm Configuration Ċ import Ġio . realm . Realm Results Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ Ċ class ĠMember Select ViewModel Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġscheduler : ĠScheduler Util , ĊĠ Ġprivate Ġval Ġdata : ĠData Service , ĊĠ Ġprivate Ġval Ġcontact : ĠContact Service , ĊĠ Ġ@ Named (" realm Config Catch Up ") Ġprivate Ġval Ġrealm Config : ĠRealm Configuration Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠ Ġprivate Ġval Ġrealm : ĠRealm Ġby Ġlazy Ġ{ ĊĠĠĠ ĠRealm . getInstance ( realm Config ) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Contacts (): ĠLive Data < Realm Results < Contact >> Ġ{ ĊĠĠĠ Ġreturn Ġrealm . where ( Contact :: class . java ). findAll Async (). as LiveData () ĊĠ Ġ} ĊĊĠ Ġfun Ġload Contact List () Ġ{ ĊĠĠĠ Ġcomposite Disposable Ġ+= Ġcontact . request Contact List (). switch Map Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠ Ġval Ġops Ġ= Ġlist . chunk ed ( Define . DY NA MO DB _ BATCH GET _ LIMIT ). map Ġ{ Ġchunk Ġ-> ĊĠĠĠĠĠĠĠ Ġdata . request Contacts ( chunk . map Ġ{ Ġit . phone Ġ}) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn @ switch Map Ġops . merge () ĊĠĠĠ Ġ}. compose ( scheduler . for Observable ()). subscribe By ( ĊĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . data ()?. batch Get Catch Up Contacts ()?. let Ġ{ Ġcontacts Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġrealm . execute Transaction Async Ġ{ Ġstrong Realm Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts . forEach Ġ{ Ġsingle Contact Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Contact ?. phone ()?. let Ġ{ Ġphone Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontact Ġ= Ġstrong Realm . where ( Contact :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" phone ", Ġphone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contact Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Ġ= Ġstrong Realm . createObject ( Contact :: class . java , Ġphone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact ?. profile Image Path Ġ= Ġsingle Contact . profile Image Path () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact ?. push Token Ġ= Ġsingle Contact . push Token () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġrealm . close () ĊĠ Ġ} Ċ }