duongthienz commited on
Commit
9626703
·
verified ·
1 Parent(s): a9f4fc2

Fix Rename Speaker and Rename Multi Speaker bug

Browse files
Files changed (1) hide show
  1. state.py +30 -8
state.py CHANGED
@@ -158,6 +158,23 @@ def applyGlobalRenames():
158
  st.session_state[f"rename_{curr}_{sp}"] = saved.get(sp, "")
159
 
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  def addGlobalRename():
162
  new_name = st.session_state.globalRenameInput.strip()
163
  if not new_name:
@@ -188,26 +205,31 @@ def apply_inline_rename(currFile, raw_sp, new_name):
188
  new_name = new_name.strip()
189
  token = f"{currFile}: {raw_sp}"
190
 
 
 
 
 
 
 
 
 
 
191
  if new_name:
192
  # Write into speakerRenames immediately
193
  st.session_state.speakerRenames.setdefault(currFile, {})[raw_sp] = new_name
194
  # Find an existing globalRenames entry for this name, or create one
195
- for entry in st.session_state.globalRenames:
196
  if entry["name"] == new_name:
197
- if token not in entry["speakers"]:
198
- entry["speakers"].append(token)
199
  return
200
  # No existing entry — create a new one
201
  idx = len(st.session_state.globalRenames)
202
  st.session_state.globalRenames.append({"name": new_name, "speakers": [token]})
203
  st.session_state[_global_rename_key(idx)] = [token]
204
  else:
205
- # Empty name — clear the rename for this speaker
206
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)
207
- # Remove the token from any globalRenames entry
208
- for entry in st.session_state.globalRenames:
209
- if token in entry["speakers"]:
210
- entry["speakers"].remove(token)
211
 
212
 
213
  # ---------------------------------------------------------------------------
 
158
  st.session_state[f"rename_{curr}_{sp}"] = saved.get(sp, "")
159
 
160
 
161
+ def enforceGlobalRenameExclusivity(changed_idx):
162
+ """Ensure a token assigned to entry[changed_idx] is removed from all others.
163
+
164
+ Called by the sidebar multiselect on_change so that picking a speaker for
165
+ one name automatically unassigns it from any previously-holding name.
166
+ """
167
+ changed_tokens = set(st.session_state.globalRenames[changed_idx]["speakers"])
168
+ for idx, entry in enumerate(st.session_state.globalRenames):
169
+ if idx == changed_idx:
170
+ continue
171
+ new_speakers = [t for t in entry["speakers"] if t not in changed_tokens]
172
+ if new_speakers != entry["speakers"]:
173
+ entry["speakers"] = new_speakers
174
+ st.session_state[_global_rename_key(idx)] = new_speakers
175
+ applyGlobalRenames()
176
+
177
+
178
  def addGlobalRename():
179
  new_name = st.session_state.globalRenameInput.strip()
180
  if not new_name:
 
205
  new_name = new_name.strip()
206
  token = f"{currFile}: {raw_sp}"
207
 
208
+ # Always remove this token from every existing entry first so it can't
209
+ # be claimed by more than one name at the same time.
210
+ for entry in st.session_state.globalRenames:
211
+ if token in entry["speakers"]:
212
+ entry["speakers"].remove(token)
213
+ # Keep the widget key in sync
214
+ idx = st.session_state.globalRenames.index(entry)
215
+ st.session_state[_global_rename_key(idx)] = list(entry["speakers"])
216
+
217
  if new_name:
218
  # Write into speakerRenames immediately
219
  st.session_state.speakerRenames.setdefault(currFile, {})[raw_sp] = new_name
220
  # Find an existing globalRenames entry for this name, or create one
221
+ for idx, entry in enumerate(st.session_state.globalRenames):
222
  if entry["name"] == new_name:
223
+ entry["speakers"].append(token)
224
+ st.session_state[_global_rename_key(idx)] = list(entry["speakers"])
225
  return
226
  # No existing entry — create a new one
227
  idx = len(st.session_state.globalRenames)
228
  st.session_state.globalRenames.append({"name": new_name, "speakers": [token]})
229
  st.session_state[_global_rename_key(idx)] = [token]
230
  else:
231
+ # Empty name — clear the rename for this speaker (token already removed above)
232
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)
 
 
 
 
233
 
234
 
235
  # ---------------------------------------------------------------------------