Skip to content

Commit c475219

Browse files
yncatclaude
andcommitted
fix: show reload dialog only when speech engine changes
Previously, saving the UML settings dialog always triggered a reload confirmation prompt whenever UML was the active synthesizer. This was unnecessary for settings that take effect immediately via _applySettings() (volume offset, rate offset, primary language, strategy). Now the reload dialog is only shown when the Japanese or fallback engine selection has actually changed, since those changes require a full synthesizer reload to take effect. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 79b1339 commit c475219

1 file changed

Lines changed: 38 additions & 32 deletions

File tree

addon/globalPlugins/UML/__init__.py

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ def _(x): return x
2121

2222

2323
# Define conspec here too. Looks like it fails to access some values when UML is not set as speech synthesizer.
24-
confspec = {
25-
"primaryLanguage": "string(default=ja)",
26-
"strategy": "string(default=sentence)",
27-
"japanese": "string(default=_)",
28-
"fallback": "string(default=_)",
29-
"checkForUpdatesOnStartup": "boolean(default=True)",
30-
"volumeOffset_ja": "integer(default=0, min=-100, max=100)",
31-
"volumeOffset_en": "integer(default=0, min=-100, max=100)",
32-
"rateOffset_ja": "integer(default=0, min=-100, max=100)",
33-
"rateOffset_en": "integer(default=0, min=-100, max=100)",
34-
}
24+
confspec = {
25+
"primaryLanguage": "string(default=ja)",
26+
"strategy": "string(default=sentence)",
27+
"japanese": "string(default=_)",
28+
"fallback": "string(default=_)",
29+
"checkForUpdatesOnStartup": "boolean(default=True)",
30+
"volumeOffset_ja": "integer(default=0, min=-100, max=100)",
31+
"volumeOffset_en": "integer(default=0, min=-100, max=100)",
32+
"rateOffset_ja": "integer(default=0, min=-100, max=100)",
33+
"rateOffset_en": "integer(default=0, min=-100, max=100)",
34+
}
3535
config.conf.spec["UML_global"] = confspec
3636

3737
class GlobalPlugin(globalPluginHandler.GlobalPlugin):
@@ -87,15 +87,15 @@ def settings(self, evt):
8787
"ja": config.conf["UML_global"]["japanese"],
8888
"en": config.conf["UML_global"]["fallback"],
8989
}
90-
opts = {
91-
"primary_language": config.conf["UML_global"]["primaryLanguage"],
92-
"strategy": config.conf["UML_global"]["strategy"],
93-
"engineMap": engineMap,
94-
"volumeOffset_ja": config.conf["UML_global"]["volumeOffset_ja"],
95-
"volumeOffset_en": config.conf["UML_global"]["volumeOffset_en"],
96-
"rateOffset_ja": config.conf["UML_global"]["rateOffset_ja"],
97-
"rateOffset_en": config.conf["UML_global"]["rateOffset_en"],
98-
}
90+
opts = {
91+
"primary_language": config.conf["UML_global"]["primaryLanguage"],
92+
"strategy": config.conf["UML_global"]["strategy"],
93+
"engineMap": engineMap,
94+
"volumeOffset_ja": config.conf["UML_global"]["volumeOffset_ja"],
95+
"volumeOffset_en": config.conf["UML_global"]["volumeOffset_en"],
96+
"rateOffset_ja": config.conf["UML_global"]["rateOffset_ja"],
97+
"rateOffset_en": config.conf["UML_global"]["rateOffset_en"],
98+
}
9999
dlg = SettingsDialog(opts)
100100
ret = dlg.ShowModal()
101101
if ret == wx.ID_OK:
@@ -105,19 +105,25 @@ def settings(self, evt):
105105
def _saveSettings(self, data):
106106
# If the new settings fail, revert to the previous one.
107107
backup = list(config.conf["UML_global"].items())
108+
old_japanese = config.conf["UML_global"]["japanese"]
109+
old_fallback = config.conf["UML_global"]["fallback"]
108110
config.conf["UML_global"]["primaryLanguage"] = data["primary_language"]
109-
config.conf["UML_global"]["strategy"] = data["strategy"]
110-
config.conf["UML_global"]["japanese"] = data["engineMap"]["ja"]
111-
config.conf["UML_global"]["fallback"] = data["engineMap"]["en"]
112-
config.conf["UML_global"]["volumeOffset_ja"] = data["volumeOffset_ja"]
113-
config.conf["UML_global"]["volumeOffset_en"] = data["volumeOffset_en"]
114-
config.conf["UML_global"]["rateOffset_ja"] = data["rateOffset_ja"]
115-
config.conf["UML_global"]["rateOffset_en"] = data["rateOffset_en"]
116-
synth = synthDriverHandler.getSynth()
117-
if synth and synth.name == "UML":
118-
synth._applySettings()
119-
if synthDriverHandler.getSynth().name == "UML":
120-
self._askHotReload(backup)
111+
config.conf["UML_global"]["strategy"] = data["strategy"]
112+
config.conf["UML_global"]["japanese"] = data["engineMap"]["ja"]
113+
config.conf["UML_global"]["fallback"] = data["engineMap"]["en"]
114+
config.conf["UML_global"]["volumeOffset_ja"] = data["volumeOffset_ja"]
115+
config.conf["UML_global"]["volumeOffset_en"] = data["volumeOffset_en"]
116+
config.conf["UML_global"]["rateOffset_ja"] = data["rateOffset_ja"]
117+
config.conf["UML_global"]["rateOffset_en"] = data["rateOffset_en"]
118+
synth = synthDriverHandler.getSynth()
119+
if synth and synth.name == "UML":
120+
synth._applySettings()
121+
engine_changed = (
122+
data["engineMap"]["ja"] != old_japanese
123+
or data["engineMap"]["en"] != old_fallback
124+
)
125+
if engine_changed and synthDriverHandler.getSynth().name == "UML":
126+
self._askHotReload(backup)
121127

122128
def _askHotReload(self, backup):
123129
ret = yesno(_("You are currently using Universal Multilingual.\nDo you want to reload Universal Multilingual and apply the new settings now?"), _("Confirmation"))

0 commit comments

Comments
 (0)