Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Update state.py
Browse files
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 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 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
|
| 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 |
-
#
|
| 164 |
-
|
| 165 |
-
token
|
| 166 |
-
for entry in st.session_state.globalRenames
|
| 167 |
-
for token in entry["speakers"]
|
| 168 |
-
}
|
| 169 |
|
| 170 |
-
# 1. Update speakerRenames for
|
| 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
|
| 178 |
-
# Was
|
| 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
|
| 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 |
# ---------------------------------------------------------------------------
|