@@ -242,8 +242,14 @@ const getListEndIndex = (list: MSC3575List | null): number => {
242242// poll and feeds received `m.presence` events into the SDK's User objects so that
243243// components using `useUserPresence` see live updates (same path as regular /sync).
244244class ExtensionPresence implements Extension < { enabled : boolean } , { events ?: object [ ] } > {
245+ private enabled = true ;
246+
245247 public constructor ( private readonly mx : MatrixClient ) { }
246248
249+ public setEnabled ( value : boolean ) : void {
250+ this . enabled = value ;
251+ }
252+
247253 // eslint-disable-next-line class-methods-use-this
248254 public name ( ) : string {
249255 return 'presence' ;
@@ -255,9 +261,8 @@ class ExtensionPresence implements Extension<{ enabled: boolean }, { events?: ob
255261 return ExtensionState . PostProcess ;
256262 }
257263
258- // eslint-disable-next-line class-methods-use-this
259264 public async onRequest ( ) : Promise < { enabled : boolean } > {
260- return { enabled : true } ;
265+ return { enabled : this . enabled } ;
261266 }
262267
263268 public async onResponse ( data : { events ?: object [ ] } ) : Promise < void > {
@@ -301,6 +306,8 @@ export class SlidingSyncManager {
301306
302307 private readonly onLifecycle : ( state : SlidingSyncState , resp : unknown , err ?: Error ) => void ;
303308
309+ private presenceExtension ! : ExtensionPresence ;
310+
304311 public readonly slidingSync : SlidingSync ;
305312
306313 public readonly probeTimeoutMs : number ;
@@ -333,7 +340,8 @@ export class SlidingSyncManager {
333340
334341 // Register the presence extension so m.presence events from the server are fed
335342 // into the SDK's User objects, keeping useUserPresence accurate during sliding sync.
336- this . slidingSync . registerExtension ( new ExtensionPresence ( mx ) ) ;
343+ this . presenceExtension = new ExtensionPresence ( mx ) ;
344+ this . slidingSync . registerExtension ( this . presenceExtension ) ;
337345
338346 // Register a custom subscription for unencrypted active rooms; encrypted rooms use
339347 // the default subscription (which already has [*,*]).
@@ -410,6 +418,10 @@ export class SlidingSyncManager {
410418 ) ;
411419 }
412420
421+ public setPresenceEnabled ( enabled : boolean ) : void {
422+ this . presenceExtension . setEnabled ( enabled ) ;
423+ }
424+
413425 public getDiagnostics ( ) : SlidingSyncDiagnostics {
414426 return {
415427 proxyBaseUrl : this . proxyBaseUrl ,
0 commit comments