Skip to content

Commit

Permalink
Decouple permission and subscription status (#443)
Browse files Browse the repository at this point in the history
* decouple permission and subscription status

* changeset
  • Loading branch information
lukasIO committed Sep 21, 2022
1 parent b74eae6 commit 438d067
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 27 deletions.
5 changes: 5 additions & 0 deletions .changeset/late-ladybugs-appear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'livekit-client': minor
---

**Breaking** Decouple SubscriptionStatus and SubscriptionPermissionStatus
2 changes: 1 addition & 1 deletion src/room/Room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1225,7 +1225,7 @@ export type RoomEventCallbacks = {
) => void;
trackSubscriptionPermissionChanged: (
publication: RemoteTrackPublication,
status: TrackPublication.SubscriptionStatus,
status: TrackPublication.PermissionStatus,
participant: RemoteParticipant,
) => void;
trackSubscriptionStatusChanged: (
Expand Down
2 changes: 1 addition & 1 deletion src/room/participant/Participant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ export type ParticipantEventCallbacks = {
) => void;
trackSubscriptionPermissionChanged: (
publication: RemoteTrackPublication,
status: TrackPublication.SubscriptionStatus,
status: TrackPublication.PermissionStatus,
) => void;
mediaDevicesError: (error: Error) => void;
participantPermissionsChanged: (prevPermissions: ParticipantPermission) => void;
Expand Down
2 changes: 1 addition & 1 deletion src/room/participant/RemoteParticipant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default class RemoteParticipant extends Participant {
});
publication.on(
TrackEvent.SubscriptionPermissionChanged,
(status: TrackPublication.SubscriptionStatus) => {
(status: TrackPublication.PermissionStatus) => {
this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);
},
);
Expand Down
29 changes: 9 additions & 20 deletions src/room/track/RemoteTrackPublication.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,10 @@ export default class RemoteTrackPublication extends TrackPublication {
};
this.emit(TrackEvent.UpdateSubscription, sub);
this.emitSubscriptionUpdateIfChanged(prevStatus);
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);
this.emitPermissionUpdateIfChanged(prevPermission);
}

get subscriptionStatus(): TrackPublication.SubscriptionStatus {
if (!this.allowed && this.subscribed === true) {
return TrackPublication.SubscriptionStatus.NotAllowed;
}
if (this.subscribed === false) {
return TrackPublication.SubscriptionStatus.Unsubscribed;
}
Expand Down Expand Up @@ -174,8 +171,7 @@ export default class RemoteTrackPublication extends TrackPublication {
track.on(TrackEvent.Ended, this.handleEnded);
this.emit(TrackEvent.Subscribed, track);
}
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);

this.emitPermissionUpdateIfChanged(prevPermission);
this.emitSubscriptionUpdateIfChanged(prevStatus);
}

Expand All @@ -184,7 +180,7 @@ export default class RemoteTrackPublication extends TrackPublication {
const prevStatus = this.subscriptionStatus;
const prevPermission = this.permissionStatus;
this.allowed = allowed;
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);
this.emitPermissionUpdateIfChanged(prevPermission);
this.emitSubscriptionUpdateIfChanged(prevStatus);
}

Expand All @@ -204,23 +200,16 @@ export default class RemoteTrackPublication extends TrackPublication {
}

private emitPermissionUpdateIfChanged(
previousSubscriptionStatus: TrackPublication.SubscriptionStatus,
previousPermissionStatus: TrackPublication.PermissionStatus,
) {
const currentPermissionStatus = this.permissionStatus;
if (
(previousPermissionStatus === currentPermissionStatus ||
this.subscriptionStatus === TrackPublication.SubscriptionStatus.Desired) &&
previousSubscriptionStatus !== TrackPublication.SubscriptionStatus.Desired
) {
return;
if (currentPermissionStatus !== previousPermissionStatus) {
this.emit(
TrackEvent.SubscriptionPermissionChanged,
this.permissionStatus,
previousPermissionStatus,
);
}
// emitting subscription status instead of permission status to not break 1.0 API
this.emit(
TrackEvent.SubscriptionPermissionChanged,
this.subscriptionStatus,
previousSubscriptionStatus,
);
}

private isManualOperationAllowed(): boolean {
Expand Down
7 changes: 3 additions & 4 deletions src/room/track/TrackPublication.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,9 @@ export class TrackPublication extends (EventEmitter as new () => TypedEventEmitt

export namespace TrackPublication {
export enum SubscriptionStatus {
Desired = 'desired',
Subscribed = 'subscribed',
NotAllowed = 'not_allowed',
Unsubscribed = 'unsubscribed',
Desired = 'desired',
}

export enum PermissionStatus {
Expand All @@ -136,8 +135,8 @@ export type PublicationEventCallbacks = {
ended: (track?: Track) => void;
updateSettings: (settings: UpdateTrackSettings) => void;
subscriptionPermissionChanged: (
status: TrackPublication.SubscriptionStatus,
prevStatus: TrackPublication.SubscriptionStatus,
status: TrackPublication.PermissionStatus,
prevStatus: TrackPublication.PermissionStatus,
) => void;
updateSubscription: (sub: UpdateSubscription) => void;
subscribed: (track: RemoteTrack) => void;
Expand Down

0 comments on commit 438d067

Please sign in to comment.