diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/models/transcription/transcription_utils.py index 70552bab..b39a77f5 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/models/transcription/transcription_utils.py @@ -19,6 +19,12 @@ class Client(MMNotificationClient): def on_device_removed(self, removed_device_id): self.loop = False + def on_device_state_changed(self, device_id, state): + self.loop = False + + def on_property_value_changed(self, device_id, key): + self.loop = False + class DeviceManager: _instance = None @@ -46,6 +52,7 @@ class DeviceManager: self.callback_host_list = None self.callback_mic_device_list = None self.callback_speaker_device_list = None + self.callback_prev_update = None self.monitoring_flag = False self.startMonitoring() @@ -133,8 +140,8 @@ class DeviceManager: while cb.loop is True: sleep(1) enumerator.UnregisterEndpointNotificationCallback(cb) - sleep(1) - + self.runPrevUpdateDevices() + sleep(2) self.update() self.noticeDefaultDevice() @@ -185,6 +192,15 @@ class DeviceManager: def clearCallbackSpeakerDeviceList(self): self.callback_speaker_device_list = None + def setCallbackPrevUpdateDevices(self, callback): + self.callback_prev_update = callback + + def clearCallbackPrevUpdateDevices(self): + self.callback_prev_update = None + + def runPrevUpdateDevices(self): + self.callback_prev_update() + def noticeDefaultDevice(self): if self.callback_default_mic_device is not None: if self.prev_default_mic_device["device"]["name"] != self.default_mic_device["device"]["name"]: diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 0a2ff0a5..80677a9b 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -55,6 +55,16 @@ class Controller: model.getListSpeakerDevice(), ) + def prevUpdateSelectedDevices(self) -> None: + if config.ENABLE_TRANSCRIPTION_SEND is True: + model.stopMicTranscript() + if config.ENABLE_TRANSCRIPTION_RECEIVE is True: + model.stopSpeakerTranscript() + if config.ENABLE_CHECK_ENERGY_SEND is True: + model.stopCheckMicEnergy() + if config.ENABLE_CHECK_ENERGY_RECEIVE is True: + model.stopCheckSpeakerEnergy() + def updateSelectedMicDevice(self, host, device) -> None: config.SELECTED_MIC_HOST = host config.SELECTED_MIC_DEVICE = device @@ -588,6 +598,7 @@ class Controller: def setEnableAutoMicSelect(self, *args, **kwargs) -> dict: config.AUTO_MIC_SELECT = True + device_manager.setCallbackPrevUpdateDevices(self.prevUpdateSelectedDevices) device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) device_manager.noticeDefaultDevice() device_manager.forceSetMicDefaultDevice() @@ -595,6 +606,7 @@ class Controller: @staticmethod def setDisableAutoMicSelect(*args, **kwargs) -> dict: + device_manager.clearCallbackPrevUpdateDevices() device_manager.clearCallbackDefaultMicDevice() config.AUTO_MIC_SELECT = False return {"status":200, "result":config.AUTO_MIC_SELECT} @@ -771,6 +783,7 @@ class Controller: def setEnableAutoSpeakerSelect(self, *args, **kwargs) -> dict: config.AUTO_SPEAKER_SELECT = True + device_manager.setCallbackPrevUpdateDevices(self.prevUpdateSelectedDevices) device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) device_manager.noticeDefaultDevice() device_manager.forceSetSpeakerDefaultDevice() @@ -778,6 +791,7 @@ class Controller: @staticmethod def setDisableAutoSpeakerSelect(*args, **kwargs) -> dict: + device_manager.clearCallbackPrevUpdateDevices() device_manager.clearCallbackDefaultSpeakerDevice() config.AUTO_SPEAKER_SELECT = False return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @@ -1535,10 +1549,10 @@ class Controller: # init Auto device selection printLog("Init Auto Device Selection") if config.AUTO_MIC_SELECT is True: - device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) + self.setEnableAutoMicSelect() if config.AUTO_SPEAKER_SELECT is True: - device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) + self.setEnableAutoSpeakerSelect() device_manager.setCallbackHostList(self.updateMicHostList) device_manager.setCallbackMicDeviceList(self.updateMicDeviceList)