duongthienz commited on
Commit
509a08d
Β·
verified Β·
1 Parent(s): de3bbf7

Update state.py

Browse files
Files changed (1) hide show
  1. state.py +21 -20
state.py CHANGED
@@ -55,6 +55,7 @@ def init_session_state():
55
  "speakerSegments": {}, # {filename: {speaker: [(start,end), ...]}}
56
  "speakerWaveforms": {}, # {filename: (waveform_tensor, sample_rate)}
57
  "globalRenames": [], # [{"name": str, "speakers": ["file: SPEAKER_##", ...]}]
 
58
  "analyzeAllToggle": False,
59
  }
60
  for key, value in defaults.items():
@@ -145,37 +146,32 @@ def _global_rename_key(index):
145
  def applyGlobalRenames():
146
  """Sync speakerRenames (and inline tab widget keys) from globalRenames.
147
 
148
- Strategy:
149
- - Speakers assigned in globalRenames β†’ rename to the entry's name.
150
- - Speakers whose token appears in NO globalRenames entry but whose raw_sp
151
- is not in speakerRenames for any other reason β†’ clear the rename.
152
- - Speakers with a speakerRenames entry that was set purely inline (never
153
- tracked in globalRenames) β†’ left untouched.
154
- After updating speakerRenames, we re-seed every rename_{fname}_{sp} widget
155
- key so the Rename Speaker tab immediately reflects the change.
156
  """
157
- # Build a map of token -> display_name from globalRenames
158
  token_to_name: dict = {}
159
  for entry in st.session_state.globalRenames:
160
  for token in entry["speakers"]:
161
  token_to_name[token] = entry["name"]
162
 
163
- # Every token that has EVER appeared in globalRenames (used to detect removal)
164
- all_global_tokens: set = {
165
- token
166
- for entry in st.session_state.globalRenames
167
- for token in entry["speakers"]
168
- }
169
 
170
- # 1. Update speakerRenames for files already tracked
171
  for fname in list(st.session_state.speakerRenames.keys()):
172
  renames = st.session_state.speakerRenames[fname]
173
  for sp in list(renames.keys()):
174
  token = f"{fname}: {sp}"
175
  if token in token_to_name:
 
176
  renames[sp] = token_to_name[token]
177
- elif token in all_global_tokens:
178
- # Was globally tracked but now unassigned β€” revert to raw label
179
  del renames[sp]
180
  # else: purely inline rename β€” leave untouched
181
 
@@ -187,8 +183,7 @@ def applyGlobalRenames():
187
  if fname in st.session_state.speakerRenames:
188
  st.session_state.speakerRenames[fname][raw_sp] = name
189
 
190
- # 3. Sync the inline-tab widget keys (rename_{fname}_{sp}) for every
191
- # analyzed file so the Rename Speaker tab shows the updated names.
192
  for fname, renames in st.session_state.speakerRenames.items():
193
  results = st.session_state.results.get(fname)
194
  if not results or len(results) != 2:
@@ -266,6 +261,9 @@ def apply_inline_rename(currFile, raw_sp, new_name):
266
  st.session_state.speakerRenames.setdefault(currFile, {})[raw_sp] = new_name
267
  # Sync the inline-tab text widget so the tab shows the confirmed name
268
  st.session_state[f"rename_{currFile}_{raw_sp}"] = new_name
 
 
 
269
  # Find an existing globalRenames entry for this name, or create one
270
  for idx, entry in enumerate(st.session_state.globalRenames):
271
  if entry["name"] == new_name:
@@ -280,6 +278,9 @@ def apply_inline_rename(currFile, raw_sp, new_name):
280
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)
281
  # Clear the inline-tab text widget so the tab shows the raw SPEAKER_## label
282
  st.session_state[f"rename_{currFile}_{raw_sp}"] = ""
 
 
 
283
 
284
 
285
  # ---------------------------------------------------------------------------
 
55
  "speakerSegments": {}, # {filename: {speaker: [(start,end), ...]}}
56
  "speakerWaveforms": {}, # {filename: (waveform_tensor, sample_rate)}
57
  "globalRenames": [], # [{"name": str, "speakers": ["file: SPEAKER_##", ...]}]
58
+ "globally_tracked_tokens": set(), # tokens ever assigned via globalRenames
59
  "analyzeAllToggle": False,
60
  }
61
  for key, value in defaults.items():
 
146
  def applyGlobalRenames():
147
  """Sync speakerRenames (and inline tab widget keys) from globalRenames.
148
 
149
+ Uses `globally_tracked_tokens` as a graveyard: any token ever assigned
150
+ via globalRenames is recorded there. On each call:
151
+ - token currently assigned β†’ rename to the entry's name
152
+ - token in graveyard but NOT currently assigned β†’ revert to raw label
153
+ - token never touched by globalRenames β†’ leave speakerRenames untouched
154
+ (inline-only rename)
 
 
155
  """
156
+ # Build map of currently-assigned token -> name
157
  token_to_name: dict = {}
158
  for entry in st.session_state.globalRenames:
159
  for token in entry["speakers"]:
160
  token_to_name[token] = entry["name"]
161
 
162
+ # Update the graveyard with any newly assigned tokens
163
+ st.session_state.globally_tracked_tokens.update(token_to_name.keys())
 
 
 
 
164
 
165
+ # 1. Update speakerRenames for tokens already in the graveyard
166
  for fname in list(st.session_state.speakerRenames.keys()):
167
  renames = st.session_state.speakerRenames[fname]
168
  for sp in list(renames.keys()):
169
  token = f"{fname}: {sp}"
170
  if token in token_to_name:
171
+ # Currently assigned β€” apply the name
172
  renames[sp] = token_to_name[token]
173
+ elif token in st.session_state.globally_tracked_tokens:
174
+ # Was global but is now unassigned β€” revert to raw label
175
  del renames[sp]
176
  # else: purely inline rename β€” leave untouched
177
 
 
183
  if fname in st.session_state.speakerRenames:
184
  st.session_state.speakerRenames[fname][raw_sp] = name
185
 
186
+ # 3. Sync inline-tab widget keys so Rename Speaker tab reflects changes
 
187
  for fname, renames in st.session_state.speakerRenames.items():
188
  results = st.session_state.results.get(fname)
189
  if not results or len(results) != 2:
 
261
  st.session_state.speakerRenames.setdefault(currFile, {})[raw_sp] = new_name
262
  # Sync the inline-tab text widget so the tab shows the confirmed name
263
  st.session_state[f"rename_{currFile}_{raw_sp}"] = new_name
264
+ # Record this token as globally tracked so applyGlobalRenames can
265
+ # revert it if it's ever removed from globalRenames.
266
+ st.session_state.globally_tracked_tokens.add(token)
267
  # Find an existing globalRenames entry for this name, or create one
268
  for idx, entry in enumerate(st.session_state.globalRenames):
269
  if entry["name"] == new_name:
 
278
  st.session_state.speakerRenames.setdefault(currFile, {}).pop(raw_sp, None)
279
  # Clear the inline-tab text widget so the tab shows the raw SPEAKER_## label
280
  st.session_state[f"rename_{currFile}_{raw_sp}"] = ""
281
+ # Remove from graveyard so a future inline rename on the same speaker
282
+ # is treated as a fresh inline-only rename (not subject to global revert).
283
+ st.session_state.globally_tracked_tokens.discard(token)
284
 
285
 
286
  # ---------------------------------------------------------------------------