Skip to content

Commit 438d067

Browse files
authored
Decouple permission and subscription status (#443)
* decouple permission and subscription status * changeset
1 parent b74eae6 commit 438d067

File tree

6 files changed

+20
-27
lines changed

6 files changed

+20
-27
lines changed

.changeset/late-ladybugs-appear.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'livekit-client': minor
3+
---
4+
5+
**Breaking** Decouple SubscriptionStatus and SubscriptionPermissionStatus

src/room/Room.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,7 @@ export type RoomEventCallbacks = {
12251225
) => void;
12261226
trackSubscriptionPermissionChanged: (
12271227
publication: RemoteTrackPublication,
1228-
status: TrackPublication.SubscriptionStatus,
1228+
status: TrackPublication.PermissionStatus,
12291229
participant: RemoteParticipant,
12301230
) => void;
12311231
trackSubscriptionStatusChanged: (

src/room/participant/Participant.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ export type ParticipantEventCallbacks = {
279279
) => void;
280280
trackSubscriptionPermissionChanged: (
281281
publication: RemoteTrackPublication,
282-
status: TrackPublication.SubscriptionStatus,
282+
status: TrackPublication.PermissionStatus,
283283
) => void;
284284
mediaDevicesError: (error: Error) => void;
285285
participantPermissionsChanged: (prevPermissions: ParticipantPermission) => void;

src/room/participant/RemoteParticipant.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export default class RemoteParticipant extends Participant {
5858
});
5959
publication.on(
6060
TrackEvent.SubscriptionPermissionChanged,
61-
(status: TrackPublication.SubscriptionStatus) => {
61+
(status: TrackPublication.PermissionStatus) => {
6262
this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);
6363
},
6464
);

src/room/track/RemoteTrackPublication.ts

+9-20
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,10 @@ export default class RemoteTrackPublication extends TrackPublication {
5555
};
5656
this.emit(TrackEvent.UpdateSubscription, sub);
5757
this.emitSubscriptionUpdateIfChanged(prevStatus);
58-
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);
58+
this.emitPermissionUpdateIfChanged(prevPermission);
5959
}
6060

6161
get subscriptionStatus(): TrackPublication.SubscriptionStatus {
62-
if (!this.allowed && this.subscribed === true) {
63-
return TrackPublication.SubscriptionStatus.NotAllowed;
64-
}
6562
if (this.subscribed === false) {
6663
return TrackPublication.SubscriptionStatus.Unsubscribed;
6764
}
@@ -174,8 +171,7 @@ export default class RemoteTrackPublication extends TrackPublication {
174171
track.on(TrackEvent.Ended, this.handleEnded);
175172
this.emit(TrackEvent.Subscribed, track);
176173
}
177-
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);
178-
174+
this.emitPermissionUpdateIfChanged(prevPermission);
179175
this.emitSubscriptionUpdateIfChanged(prevStatus);
180176
}
181177

@@ -184,7 +180,7 @@ export default class RemoteTrackPublication extends TrackPublication {
184180
const prevStatus = this.subscriptionStatus;
185181
const prevPermission = this.permissionStatus;
186182
this.allowed = allowed;
187-
this.emitPermissionUpdateIfChanged(prevStatus, prevPermission);
183+
this.emitPermissionUpdateIfChanged(prevPermission);
188184
this.emitSubscriptionUpdateIfChanged(prevStatus);
189185
}
190186

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

206202
private emitPermissionUpdateIfChanged(
207-
previousSubscriptionStatus: TrackPublication.SubscriptionStatus,
208203
previousPermissionStatus: TrackPublication.PermissionStatus,
209204
) {
210205
const currentPermissionStatus = this.permissionStatus;
211-
if (
212-
(previousPermissionStatus === currentPermissionStatus ||
213-
this.subscriptionStatus === TrackPublication.SubscriptionStatus.Desired) &&
214-
previousSubscriptionStatus !== TrackPublication.SubscriptionStatus.Desired
215-
) {
216-
return;
206+
if (currentPermissionStatus !== previousPermissionStatus) {
207+
this.emit(
208+
TrackEvent.SubscriptionPermissionChanged,
209+
this.permissionStatus,
210+
previousPermissionStatus,
211+
);
217212
}
218-
// emitting subscription status instead of permission status to not break 1.0 API
219-
this.emit(
220-
TrackEvent.SubscriptionPermissionChanged,
221-
this.subscriptionStatus,
222-
previousSubscriptionStatus,
223-
);
224213
}
225214

226215
private isManualOperationAllowed(): boolean {

src/room/track/TrackPublication.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,9 @@ export class TrackPublication extends (EventEmitter as new () => TypedEventEmitt
118118

119119
export namespace TrackPublication {
120120
export enum SubscriptionStatus {
121+
Desired = 'desired',
121122
Subscribed = 'subscribed',
122-
NotAllowed = 'not_allowed',
123123
Unsubscribed = 'unsubscribed',
124-
Desired = 'desired',
125124
}
126125

127126
export enum PermissionStatus {
@@ -136,8 +135,8 @@ export type PublicationEventCallbacks = {
136135
ended: (track?: Track) => void;
137136
updateSettings: (settings: UpdateTrackSettings) => void;
138137
subscriptionPermissionChanged: (
139-
status: TrackPublication.SubscriptionStatus,
140-
prevStatus: TrackPublication.SubscriptionStatus,
138+
status: TrackPublication.PermissionStatus,
139+
prevStatus: TrackPublication.PermissionStatus,
141140
) => void;
142141
updateSubscription: (sub: UpdateSubscription) => void;
143142
subscribed: (track: RemoteTrack) => void;

0 commit comments

Comments
 (0)