Spaces:
Starting on CPU Upgrade
Starting on CPU Upgrade
fix bug between rename speaker and rename multiple speakers
Browse files
ui.py
CHANGED
|
@@ -114,21 +114,27 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
|
|
| 114 |
st.sidebar.divider()
|
| 115 |
|
| 116 |
def _on_grename_change(idx):
|
|
|
|
| 117 |
st.session_state.globalRenames[idx]["speakers"] = list(
|
| 118 |
st.session_state[_global_rename_key(idx)]
|
| 119 |
)
|
|
|
|
|
|
|
|
|
|
| 120 |
enforceGlobalRenameExclusivity(idx)
|
| 121 |
|
| 122 |
-
# Build claimed set from
|
| 123 |
-
#
|
|
|
|
| 124 |
all_claimed = {
|
| 125 |
token
|
| 126 |
-
for
|
| 127 |
-
for token in
|
| 128 |
}
|
| 129 |
|
| 130 |
for idx, entry in enumerate(st.session_state.globalRenames):
|
| 131 |
grkey = _global_rename_key(idx)
|
|
|
|
| 132 |
if grkey not in st.session_state:
|
| 133 |
st.session_state[grkey] = list(entry["speakers"])
|
| 134 |
label_col, trash_col = st.sidebar.columns([5, 1])
|
|
@@ -138,11 +144,10 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
|
|
| 138 |
on_click=removeGlobalRename, args=(idx,),
|
| 139 |
help=f"Remove '{entry['name']}'",
|
| 140 |
)
|
| 141 |
-
# Use
|
| 142 |
-
#
|
| 143 |
-
#
|
| 144 |
-
|
| 145 |
-
this_entry_tokens = set(st.session_state.get(grkey, entry["speakers"]))
|
| 146 |
available_tokens = [
|
| 147 |
t for t in all_speaker_tokens
|
| 148 |
if t not in all_claimed or t in this_entry_tokens
|
|
|
|
| 114 |
st.sidebar.divider()
|
| 115 |
|
| 116 |
def _on_grename_change(idx):
|
| 117 |
+
# Write the widget's new value into the data model first
|
| 118 |
st.session_state.globalRenames[idx]["speakers"] = list(
|
| 119 |
st.session_state[_global_rename_key(idx)]
|
| 120 |
)
|
| 121 |
+
# Remove the changed entry's widget key so it re-seeds cleanly on
|
| 122 |
+
# the next render (avoids Streamlit "cannot modify instantiated widget" errors)
|
| 123 |
+
st.session_state.pop(_global_rename_key(idx), None)
|
| 124 |
enforceGlobalRenameExclusivity(idx)
|
| 125 |
|
| 126 |
+
# Build claimed set from the data model (entry["speakers"]) as the canonical
|
| 127 |
+
# source of truth. Widget keys may be absent after a mutation (we pop them
|
| 128 |
+
# intentionally), so falling back to them can produce a stale claimed set.
|
| 129 |
all_claimed = {
|
| 130 |
token
|
| 131 |
+
for entry in st.session_state.globalRenames
|
| 132 |
+
for token in entry["speakers"]
|
| 133 |
}
|
| 134 |
|
| 135 |
for idx, entry in enumerate(st.session_state.globalRenames):
|
| 136 |
grkey = _global_rename_key(idx)
|
| 137 |
+
# Seed the widget key from entry["speakers"] if it was cleared by a mutation
|
| 138 |
if grkey not in st.session_state:
|
| 139 |
st.session_state[grkey] = list(entry["speakers"])
|
| 140 |
label_col, trash_col = st.sidebar.columns([5, 1])
|
|
|
|
| 144 |
on_click=removeGlobalRename, args=(idx,),
|
| 145 |
help=f"Remove '{entry['name']}'",
|
| 146 |
)
|
| 147 |
+
# Use entry["speakers"] (the data model) as this entry's owned tokens.
|
| 148 |
+
# Widget keys are popped during mutations, so using them here would give
|
| 149 |
+
# a stale empty set and incorrectly exclude tokens from available_tokens.
|
| 150 |
+
this_entry_tokens = set(entry["speakers"])
|
|
|
|
| 151 |
available_tokens = [
|
| 152 |
t for t in all_speaker_tokens
|
| 153 |
if t not in all_claimed or t in this_entry_tokens
|