/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠMatrix . org ĠFoundation ĠC . I . C . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// 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 Ġorg . matrix . android . sdk . internal . session . sync . handler Ċ Ċ import Ġio . realm . Realm Ċ import Ġorg . matrix . android . sdk . api . Matrix Configuration Ċ import Ġorg . matrix . android . sdk . api . session . events . model . EventType Ċ import Ġorg . matrix . android . sdk . api . session . events . model . get Presence Content Ċ import Ġorg . matrix . android . sdk . api . session . sync . model . Presence Sync Response Ċ import Ġorg . matrix . android . sdk . internal . database . model . Room Member Summary Entity Ċ import Ġorg . matrix . android . sdk . internal . database . model . Room Summary Entity Ċ import Ġorg . matrix . android . sdk . internal . database . model . presence . User Presence Entity Ċ import Ġorg . matrix . android . sdk . internal . database . query . update Direct User Presence Ċ import Ġorg . matrix . android . sdk . internal . database . query . update User Presence Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġclass ĠPres ence Sync Handler Ġ@ Inject Ġconstructor ( private Ġval Ġmatrix Configuration : ĠMatrix Configuration ) Ġ{ ĊĊĠĠĠ Ġfun Ġhandle ( realm : ĠRealm , Ġpresence Sync Response : ĠPres ence Sync Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresence Sync Response ?. events ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġevent Ġ-> Ġevent . type Ġ== ĠEventType . PRES ENCE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġevent . get Presence Content () Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġevent . sender Id Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Presence Entity Ġ= ĠUser Presence Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Active Ago Ġ= Ġcontent . last Active Ago , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Message Ġ= Ġcontent . status Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Currently Active Ġ= Ġcontent . is Currently Active , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Url Ġ= Ġcontent . avatar Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġcontent . displayName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . presence Ġ= Ġcontent . presence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Presence To DB ( realm , Ġuser Presence Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStore Ġuser Ġpresence Ġto ĠDB Ġand Ġupdate ĠDirect ĠRoom s Ġand ĠRoom ĠMember ĠSum maries Ġaccordingly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstore Presence To DB ( realm : ĠRealm , Ġuser Presence Entity : ĠUser Presence Entity ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . copy To Realm OrUpdate ( user Presence Entity )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoom Summary Entity . update Direct User Presence ( realm , Ġuser Presence Entity . userId , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoom Member Summary Entity . update User Presence ( realm , Ġuser Presence Entity . userId , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ