diff --git a/src-python/controller.py b/src-python/controller.py index 6e46525e..4015016f 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -86,27 +86,31 @@ class Controller: settings, ) - def restartAccessDevices(self) -> None: + def restartAccessMicDevices(self) -> None: if config.ENABLE_TRANSCRIPTION_SEND is True: self.startThreadingTranscriptionSendMessage() - if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - self.startThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_SEND is True: model.startCheckMicEnergy( self.progressBarMicEnergy, ) + + def restartAccessSpeakerDevices(self) -> None: + if config.ENABLE_TRANSCRIPTION_RECEIVE is True: + self.startThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_RECEIVE is True: model.startCheckSpeakerEnergy( self.progressBarSpeakerEnergy, ) - def stopAccessDevices(self) -> None: + def stopAccessMicDevices(self) -> None: if config.ENABLE_TRANSCRIPTION_SEND is True: self.stopThreadingTranscriptionSendMessage() - if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - self.stopThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_SEND is True: model.stopCheckMicEnergy() + + def stopAccessSpeakerDevices(self) -> None: + if config.ENABLE_TRANSCRIPTION_RECEIVE is True: + self.stopThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_RECEIVE is True: model.stopCheckSpeakerEnergy() @@ -1056,22 +1060,25 @@ class Controller: def getAutoMicSelect(*args, **kwargs) -> dict: return {"status":200, "result":config.AUTO_MIC_SELECT} + def applyAutoMicSelect(self) -> None: + device_manager.setCallbackProcessBeforeUpdateMicDevices(self.stopAccessMicDevices) + device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) + device_manager.setCallbackProcessAfterUpdateMicDevices(self.restartAccessMicDevices) + device_manager.forceUpdateAndSetMicDevices() + def setEnableAutoMicSelect(self, *args, **kwargs) -> dict: if config.AUTO_MIC_SELECT is False: + self.applyAutoMicSelect() config.AUTO_MIC_SELECT = True - device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) - device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) - device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) - device_manager.forceUpdateAndSetMicDevices() return {"status":200, "result":config.AUTO_MIC_SELECT} @staticmethod def setDisableAutoMicSelect(*args, **kwargs) -> dict: if config.AUTO_MIC_SELECT is True: - config.AUTO_MIC_SELECT = False - device_manager.clearCallbackProcessBeforeUpdateDevices() + device_manager.clearCallbackProcessBeforeUpdateMicDevices() device_manager.clearCallbackDefaultMicDevice() - device_manager.clearCallbackProcessAfterUpdateDevices() + device_manager.clearCallbackProcessAfterUpdateMicDevices() + config.AUTO_MIC_SELECT = False return {"status":200, "result":config.AUTO_MIC_SELECT} @staticmethod @@ -1253,22 +1260,25 @@ class Controller: def getAutoSpeakerSelect(*args, **kwargs) -> dict: return {"status":200, "result":config.AUTO_SPEAKER_SELECT} + def applyAutoSpeakerSelect(self) -> None: + device_manager.setCallbackProcessBeforeUpdateSpeakerDevices(self.stopAccessSpeakerDevices) + device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) + device_manager.setCallbackProcessAfterUpdateSpeakerDevices(self.restartAccessSpeakerDevices) + device_manager.forceUpdateAndSetSpeakerDevices() + def setEnableAutoSpeakerSelect(self, *args, **kwargs) -> dict: if config.AUTO_SPEAKER_SELECT is False: + self.applyAutoSpeakerSelect() config.AUTO_SPEAKER_SELECT = True - device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) - device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) - device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) - device_manager.forceUpdateAndSetSpeakerDevices() return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @staticmethod def setDisableAutoSpeakerSelect(*args, **kwargs) -> dict: if config.AUTO_SPEAKER_SELECT is True: - config.AUTO_SPEAKER_SELECT = False - device_manager.clearCallbackProcessBeforeUpdateDevices() + device_manager.clearCallbackProcessBeforeUpdateSpeakerDevices() device_manager.clearCallbackDefaultSpeakerDevice() - device_manager.clearCallbackProcessAfterUpdateDevices() + device_manager.clearCallbackProcessAfterUpdateSpeakerDevices() + config.AUTO_SPEAKER_SELECT = False return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @staticmethod @@ -2520,9 +2530,9 @@ class Controller: printLog("Init Auto Device Selection") if config.AUTO_MIC_SELECT is True: - self.setEnableAutoMicSelect() + self.applyAutoMicSelect() if config.AUTO_SPEAKER_SELECT is True: - self.setEnableAutoSpeakerSelect() + self.applyAutoSpeakerSelect() printLog("Init Overlay") if (config.OVERLAY_SMALL_LOG is True or config.OVERLAY_LARGE_LOG is True): diff --git a/src-python/device_manager.py b/src-python/device_manager.py index e2a8571a..7f741d26 100644 --- a/src-python/device_manager.py +++ b/src-python/device_manager.py @@ -178,7 +178,8 @@ class DeviceManager: sleep(1) enumerator.UnregisterEndpointNotificationCallback(cb) comtypes.CoUninitialize() - self.runProcessBeforeUpdateDevices() + self.runProcessBeforeUpdateMicDevices() + self.runProcessBeforeUpdateSpeakerDevices() sleep(2) for _ in range(10): self.update() @@ -186,7 +187,8 @@ class DeviceManager: break sleep(2) self.noticeUpdateDevices() - self.runProcessAfterUpdateDevices() + self.runProcessAfterUpdateMicDevices() + self.runProcessAfterUpdateSpeakerDevices() except Exception: errorLogging() finally: @@ -234,25 +236,45 @@ class DeviceManager: def clearCallbackSpeakerDeviceList(self): self.callback_speaker_device_list = None - def setCallbackProcessBeforeUpdateDevices(self, callback): - self.callback_process_before_update_devices = callback + def setCallbackProcessBeforeUpdateMicDevices(self, callback): + self.callback_process_before_update_mic_devices = callback - def clearCallbackProcessBeforeUpdateDevices(self): - self.callback_process_before_update_devices = None + def clearCallbackProcessBeforeUpdateMicDevices(self): + self.callback_process_before_update_mic_devices = None - def runProcessBeforeUpdateDevices(self): - if isinstance(self.callback_process_before_update_devices, Callable): - self.callback_process_before_update_devices() + def runProcessBeforeUpdateMicDevices(self): + if isinstance(self.callback_process_before_update_mic_devices, Callable): + self.callback_process_before_update_mic_devices() - def setCallbackProcessAfterUpdateDevices(self, callback): - self.callback_process_after_update_devices = callback + def setCallbackProcessAfterUpdateMicDevices(self, callback): + self.callback_process_after_update_mic_devices = callback - def clearCallbackProcessAfterUpdateDevices(self): - self.callback_process_after_update_devices = None + def clearCallbackProcessAfterUpdateMicDevices(self): + self.callback_process_after_update_mic_devices = None - def runProcessAfterUpdateDevices(self): - if isinstance(self.callback_process_after_update_devices, Callable): - self.callback_process_after_update_devices() + def runProcessAfterUpdateMicDevices(self): + if isinstance(self.callback_process_after_update_mic_devices, Callable): + self.callback_process_after_update_mic_devices() + + def setCallbackProcessBeforeUpdateSpeakerDevices(self, callback): + self.callback_process_before_update_speaker_devices = callback + + def clearCallbackProcessBeforeUpdateSpeakerDevices(self): + self.callback_process_before_update_speaker_devices = None + + def runProcessBeforeUpdateSpeakerDevices(self): + if isinstance(self.callback_process_before_update_speaker_devices, Callable): + self.callback_process_before_update_speaker_devices() + + def setCallbackProcessAfterUpdateSpeakerDevices(self, callback): + self.callback_process_after_update_speaker_devices = callback + + def clearCallbackProcessAfterUpdateSpeakerDevices(self): + self.callback_process_after_update_speaker_devices = None + + def runProcessAfterUpdateSpeakerDevices(self): + if isinstance(self.callback_process_after_update_speaker_devices, Callable): + self.callback_process_after_update_speaker_devices() def noticeUpdateDevices(self): if self.update_flag_default_mic_device is True: