Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

functions.ts 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { IReduxState, IStore } from '../app/types';
  2. import { MEDIA_TYPE } from '../base/media/constants';
  3. import { muteLocal } from '../video-menu/actions.any';
  4. import { updateDeviceInfo } from './actions';
  5. import { ACTION_HOOK_TYPE_NAME, EVENT_TYPE, IDeviceInfo } from './types';
  6. import WebHidManager from './webhid-manager';
  7. /**
  8. * Attach web hid event listeners.
  9. *
  10. * @param {Function} initDeviceListener - Init hid device listener.
  11. * @param {Function} updateDeviceListener - Update hid device listener.
  12. * @returns {void}
  13. */
  14. export function attachHidEventListeners(
  15. initDeviceListener: EventListenerOrEventListenerObject,
  16. updateDeviceListener: EventListenerOrEventListenerObject
  17. ) {
  18. const hidManager = getWebHidInstance();
  19. if (typeof initDeviceListener === 'function') {
  20. hidManager.addEventListener(EVENT_TYPE.INIT_DEVICE, initDeviceListener);
  21. }
  22. if (typeof updateDeviceListener === 'function') {
  23. hidManager.addEventListener(EVENT_TYPE.UPDATE_DEVICE, updateDeviceListener);
  24. }
  25. }
  26. /**
  27. * Returns instance of web hid manager.
  28. *
  29. * @returns {WebHidManager} - WebHidManager instance.
  30. */
  31. export function getWebHidInstance(): WebHidManager {
  32. const hidManager = WebHidManager.getInstance();
  33. return hidManager;
  34. }
  35. /**
  36. * Returns root conference state.
  37. *
  38. * @param {IReduxState} state - Global state.
  39. * @returns {Object} Conference state.
  40. */
  41. export const getWebHidState = (state: IReduxState) => state['features/web-hid'];
  42. /**
  43. * Returns true if hid is supported.
  44. *
  45. * @returns {boolean}
  46. */
  47. export function isDeviceHidSupported(): boolean {
  48. const hidManager = getWebHidInstance();
  49. return hidManager.isSupported();
  50. }
  51. /**
  52. * Returns device info from state.
  53. *
  54. * @param {IReduxState} state - Global state.
  55. * @returns {boolean}
  56. */
  57. export function getDeviceInfo(state: IReduxState): IDeviceInfo {
  58. const hidState = getWebHidState(state);
  59. return hidState.deviceInfo;
  60. }
  61. /**
  62. * Handles updating hid device.
  63. *
  64. * @param {Function} dispatch - Redux dispatch.
  65. * @param {Function} customEventData - Custom event data.
  66. * @returns {void}
  67. */
  68. export function handleUpdateHidDevice(
  69. dispatch: IStore['dispatch'],
  70. customEventData: CustomEvent<{ actionResult?: { eventName: string; }; deviceInfo: IDeviceInfo; }>
  71. ) {
  72. dispatch(updateDeviceInfo(customEventData.detail.deviceInfo));
  73. if (customEventData.detail?.actionResult?.eventName === ACTION_HOOK_TYPE_NAME.MUTE_SWITCH_ON) {
  74. dispatch(muteLocal(true, MEDIA_TYPE.AUDIO));
  75. } else if (customEventData.detail?.actionResult?.eventName === ACTION_HOOK_TYPE_NAME.MUTE_SWITCH_OFF) {
  76. dispatch(muteLocal(false, MEDIA_TYPE.AUDIO));
  77. }
  78. }
  79. /**
  80. * Remove web hid event listeners.
  81. *
  82. * @param {Function} initDeviceListener - Init hid device listener.
  83. * @param {Function} updateDeviceListener - Update hid device listener.
  84. * @returns {void}
  85. */
  86. export function removeHidEventListeners(
  87. initDeviceListener: EventListenerOrEventListenerObject,
  88. updateDeviceListener: EventListenerOrEventListenerObject
  89. ) {
  90. const hidManager = getWebHidInstance();
  91. if (typeof initDeviceListener === 'function') {
  92. hidManager.removeEventListener(EVENT_TYPE.INIT_DEVICE, initDeviceListener);
  93. }
  94. if (typeof updateDeviceListener === 'function') {
  95. hidManager.removeEventListener(EVENT_TYPE.UPDATE_DEVICE, updateDeviceListener);
  96. }
  97. }
  98. /**
  99. * Returns true if there is no device info provided.
  100. *
  101. * @param {IDeviceInfo} deviceInfo - Device info state.
  102. * @returns {boolean}
  103. */
  104. export function shouldRequestHIDDevice(deviceInfo: IDeviceInfo): boolean {
  105. return !deviceInfo?.device || Object.keys(deviceInfo).length === 0;
  106. }