@@ -11,14 +11,15 @@ const VIDEO_PERMISSION_NAME = 'camera' as PermissionName;
1111
1212/**
1313 * Media devices utilities for Jitsi.
14+ * @noInheritDoc
1415 */
15- class JitsiMediaDevices extends Listenable {
16+ export default class JitsiMediaDevices extends Listenable {
1617 private _initialized : boolean ;
1718 private _permissions : { [ key : string ] : boolean ; } ;
1819 private _permissionsApiSupported : Promise < boolean > ;
1920
2021 /**
21- * Initializes a { @code JitsiMediaDevices} object. There will be a single
22+ * Initializes a ` JitsiMediaDevices` object. There will be a single
2223 * instance of this class.
2324 */
2425 constructor ( ) {
@@ -28,8 +29,55 @@ class JitsiMediaDevices extends Listenable {
2829 this . _permissionsApiSupported = Promise . resolve ( false ) ;
2930 }
3031
32+ /**
33+ * Parses a PermissionState object and returns true for granted and false otherwise.
34+ *
35+ * @param {PermissionState } permissionStatus - The PermissionState object retrieved from the Permissions API.
36+ * @returns {boolean } - True for granted and false for denied.
37+ * @throws {TypeError }
38+ */
39+ private _parsePermissionState ( permissionStatus : PermissionStatus = { } as PermissionStatus ) : boolean {
40+ const status = permissionStatus . state ;
41+
42+ if ( typeof status !== 'string' ) {
43+ throw new TypeError ( ) ;
44+ }
45+
46+ return status === PERMISSION_GRANTED_STATUS ;
47+ }
48+
49+ /**
50+ * Updates the local granted/denied permissions cache. A permissions might be
51+ * granted, denied, or undefined. This is represented by having its media
52+ * type key set to `true` or `false` respectively.
53+ *
54+ * @param {Object } permissions - Object with the permissions.
55+ */
56+ private _handlePermissionsChange ( permissions : { [ key : string ] : boolean ; } ) : void {
57+ const hasPermissionsChanged
58+ = [ MediaType . AUDIO , MediaType . VIDEO ]
59+ . some ( type => type in permissions && permissions [ type ] !== this . _permissions [ type ] ) ;
60+
61+ if ( hasPermissionsChanged ) {
62+ this . _permissions = {
63+ ...this . _permissions ,
64+ ...permissions
65+ } ;
66+ this . eventEmitter . emit ( JitsiMediaDevicesEvents . PERMISSIONS_CHANGED , this . _permissions ) ;
67+
68+ if ( this . _permissions [ MediaType . AUDIO ] || this . _permissions [ MediaType . VIDEO ] ) {
69+ // Triggering device list update when the permissions are granted in order to update
70+ // the labels the devices.
71+ this . enumerateDevices ( ( ) => {
72+ // Empty callback - device list update triggered
73+ } ) ;
74+ }
75+ }
76+ }
77+
3178 /**
3279 * Initialize. Start listening for device changes and initialize permissions checks.
80+ * @internal
3381 */
3482 init ( ) : void {
3583 if ( this . _initialized ) {
@@ -104,52 +152,6 @@ class JitsiMediaDevices extends Listenable {
104152 } ) ;
105153 }
106154
107- /**
108- * Parses a PermissionState object and returns true for granted and false otherwise.
109- *
110- * @param {PermissionState } permissionStatus - The PermissionState object retrieved from the Permissions API.
111- * @returns {boolean } - True for granted and false for denied.
112- * @throws {TypeError }
113- */
114- _parsePermissionState ( permissionStatus : PermissionStatus = { } as PermissionStatus ) : boolean {
115- const status = permissionStatus . state ;
116-
117- if ( typeof status !== 'string' ) {
118- throw new TypeError ( ) ;
119- }
120-
121- return status === PERMISSION_GRANTED_STATUS ;
122- }
123-
124- /**
125- * Updates the local granted/denied permissions cache. A permissions might be
126- * granted, denied, or undefined. This is represented by having its media
127- * type key set to {@code true} or {@code false} respectively.
128- *
129- * @param {Object } permissions - Object with the permissions.
130- */
131- _handlePermissionsChange ( permissions : { [ key : string ] : boolean ; } ) : void {
132- const hasPermissionsChanged
133- = [ MediaType . AUDIO , MediaType . VIDEO ]
134- . some ( type => type in permissions && permissions [ type ] !== this . _permissions [ type ] ) ;
135-
136- if ( hasPermissionsChanged ) {
137- this . _permissions = {
138- ...this . _permissions ,
139- ...permissions
140- } ;
141- this . eventEmitter . emit ( JitsiMediaDevicesEvents . PERMISSIONS_CHANGED , this . _permissions ) ;
142-
143- if ( this . _permissions [ MediaType . AUDIO ] || this . _permissions [ MediaType . VIDEO ] ) {
144- // Triggering device list update when the permissions are granted in order to update
145- // the labels the devices.
146- this . enumerateDevices ( ( ) => {
147- // Empty callback - device list update triggered
148- } ) ;
149- }
150- }
151- }
152-
153155 /**
154156 * Executes callback with list of media devices connected.
155157 * @param {function } callback
@@ -267,5 +269,3 @@ class JitsiMediaDevices extends Listenable {
267269 return RTC . setAudioOutputDevice ( deviceId ) ;
268270 }
269271}
270-
271- export default new JitsiMediaDevices ( ) ;
0 commit comments