Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
final fix for the whole rename issue
Browse files
state.py
CHANGED
|
@@ -118,11 +118,25 @@ def updateCategoryOptions():
|
|
| 118 |
for i, category in enumerate(st.session_state.categories):
|
| 119 |
ms_key = f"multiselect_{category}"
|
| 120 |
new_val = list(st.session_state.get(ms_key, []))
|
|
|
|
| 121 |
st.session_state.categorySelect[i] = new_val
|
| 122 |
-
# Re-assign (don't pop) so the widget renders the correct selection on
|
| 123 |
-
# the next run. Popping causes Streamlit to fall back to [] because no
|
| 124 |
-
# `default=` is provided, wiping the visible selection.
|
| 125 |
st.session_state[ms_key] = new_val
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
# Recompute unusedSpeakers for all files
|
| 127 |
all_assigned_tokens = {
|
| 128 |
token
|
|
@@ -251,10 +265,11 @@ def on_grename_change(idx):
|
|
| 251 |
for t in other_entry["speakers"]
|
| 252 |
}
|
| 253 |
|
| 254 |
-
# Spurious-empty guard:
|
| 255 |
-
#
|
| 256 |
-
#
|
| 257 |
-
|
|
|
|
| 258 |
all_still_valid = all(t not in other_claimed for t in prev)
|
| 259 |
if all_still_valid:
|
| 260 |
st.session_state[grkey] = prev
|
|
|
|
| 118 |
for i, category in enumerate(st.session_state.categories):
|
| 119 |
ms_key = f"multiselect_{category}"
|
| 120 |
new_val = list(st.session_state.get(ms_key, []))
|
| 121 |
+
prev_val = list(st.session_state.categorySelect[i]) if i < len(st.session_state.categorySelect) else []
|
| 122 |
st.session_state.categorySelect[i] = new_val
|
|
|
|
|
|
|
|
|
|
| 123 |
st.session_state[ms_key] = new_val
|
| 124 |
+
|
| 125 |
+
# Tokens newly added to this role → write the role name into speakerRenames
|
| 126 |
+
added = set(new_val) - set(prev_val)
|
| 127 |
+
removed = set(prev_val) - set(new_val)
|
| 128 |
+
for token in added:
|
| 129 |
+
_write_rename(token, category)
|
| 130 |
+
# Tokens removed from this role → revert their display name, but only if
|
| 131 |
+
# it was still set to this role's name (don't clobber a rename sidebar name)
|
| 132 |
+
for token in removed:
|
| 133 |
+
if ": " not in token:
|
| 134 |
+
continue
|
| 135 |
+
fname, raw_sp = token.split(": ", 1)
|
| 136 |
+
current = st.session_state.speakerRenames.get(fname, {}).get(raw_sp, "")
|
| 137 |
+
if current == category:
|
| 138 |
+
_write_rename(token, "")
|
| 139 |
+
|
| 140 |
# Recompute unusedSpeakers for all files
|
| 141 |
all_assigned_tokens = {
|
| 142 |
token
|
|
|
|
| 265 |
for t in other_entry["speakers"]
|
| 266 |
}
|
| 267 |
|
| 268 |
+
# Spurious-empty guard: Streamlit sometimes re-fires this callback with []
|
| 269 |
+
# when available_tokens shrinks (e.g. another entry just claimed a token).
|
| 270 |
+
# Only treat it as spurious when prev had MORE than 1 token — if prev had
|
| 271 |
+
# exactly 1, the user may genuinely be deselecting it, so always let it through.
|
| 272 |
+
if not reported and len(prev) > 1:
|
| 273 |
all_still_valid = all(t not in other_claimed for t in prev)
|
| 274 |
if all_still_valid:
|
| 275 |
st.session_state[grkey] = prev
|