Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Switch to updating presence via /sync calls instead of PUT /presence
Browse files Browse the repository at this point in the history
  • Loading branch information
t3chguy committed Jul 11, 2023
1 parent 6e99b2f commit 7e57394
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions src/Presence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
*/

import { logger } from "matrix-js-sdk/src/logger";
import { SetPresence } from "matrix-js-sdk/src/sync";

import { MatrixClientPeg } from "./MatrixClientPeg";
import dis from "./dispatcher/dispatcher";
Expand All @@ -26,16 +27,10 @@ import { ActionPayload } from "./dispatcher/payloads";
// Time in ms after that a user is considered as unavailable/away
const UNAVAILABLE_TIME_MS = 3 * 60 * 1000; // 3 mins

enum State {
Online = "online",
Offline = "offline",
Unavailable = "unavailable",
}

class Presence {
private unavailableTimer: Timer | null = null;
private dispatcherRef: string | null = null;
private state: State | null = null;
private state: SetPresence | null = null;

/**
* Start listening the user activity to evaluate his presence state.
Expand All @@ -48,7 +43,7 @@ class Presence {
while (this.unavailableTimer) {
try {
await this.unavailableTimer.finished();
this.setState(State.Unavailable);
this.setState(SetPresence.Unavailable);
} catch (e) {
/* aborted, stop got called */
}
Expand All @@ -73,13 +68,13 @@ class Presence {
* Get the current presence state.
* @returns {string} the presence state (see PRESENCE enum)
*/
public getState(): State | null {
public getState(): SetPresence | null {
return this.state;
}

private onAction = (payload: ActionPayload): void => {
if (payload.action === "user_activity") {
this.setState(State.Online);
this.setState(SetPresence.Online);
this.unavailableTimer?.restart();
}
};
Expand All @@ -89,7 +84,7 @@ class Presence {
* If the state has changed, the homeserver will be notified.
* @param {string} newState the new presence state (see PRESENCE enum)
*/
private async setState(newState: State): Promise<void> {
private async setState(newState: SetPresence): Promise<void> {
if (newState === this.state) {
return;
}
Expand All @@ -102,7 +97,7 @@ class Presence {
}

try {
await MatrixClientPeg.safeGet().setPresence({ presence: this.state });
await MatrixClientPeg.safeGet().setSyncPresence(this.state);
logger.info("Presence:", newState);
} catch (err) {
logger.error("Failed to set presence:", err);
Expand Down

0 comments on commit 7e57394

Please sign in to comment.