From 41d69f9f95865954b8dd7afe91dc292520632ff2 Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Sat, 22 Mar 2025 10:23:52 +0000 Subject: [PATCH] make the app remember the last selected input and playback devices --- utils/__pycache__/text_to_mic.cpython-312.pyc | Bin 71859 -> 74030 bytes utils/text_to_mic.py | 31 ++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/utils/__pycache__/text_to_mic.cpython-312.pyc b/utils/__pycache__/text_to_mic.cpython-312.pyc index 72977126b5d8853f4736ec959d53feb6a2553e0e..77126aad0f849fe9c4fd38f678d5b61160403aa6 100644 GIT binary patch delta 9848 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 NF7@999Mc@o=3i92Vp{+J diff --git a/utils/text_to_mic.py b/utils/text_to_mic.py index a734d97..1cc6b02 100644 --- a/utils/text_to_mic.py +++ b/utils/text_to_mic.py @@ -1456,19 +1456,22 @@ Please also make sure you read the Terms of use and licence statement before usi # Otherwise, submit text as before self.submit_text() - def on_input_device_change(self, event): - """Handle changes to the input device dropdown.""" - selected_device = event.widget.cget("value") - self.input_device_index.set(selected_device) - - def on_primary_device_change(self, event): - """Handle changes to the primary device dropdown.""" - selected_device = event.widget.cget("value") - self.device_index.set(selected_device) - - def on_secondary_device_change(self, event): - """Handle changes to the secondary device dropdown.""" - selected_device = event.widget.cget("value") - self.device_index_2.set(selected_device) + def on_input_device_change(self, device_name): + """Save the selected input device in settings.""" + settings = self.load_settings() + settings["input_device"] = device_name + self.save_settings_to_JSON(settings) + + def on_primary_device_change(self, device_name): + """Save the selected primary output device in settings.""" + settings = self.load_settings() + settings["primary_device"] = device_name + self.save_settings_to_JSON(settings) + + def on_secondary_device_change(self, device_name): + """Save the selected secondary output device in settings.""" + settings = self.load_settings() + settings["secondary_device"] = device_name + self.save_settings_to_JSON(settings)