Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Fix an issue where rename is not showing in role
Browse files
ui.py
CHANGED
|
@@ -51,8 +51,18 @@ def render_chart(fig, tab, pdf_path, svg_path, pdf_name, svg_name, pdf_key, svg_
|
|
| 51 |
# Sidebar — categories section
|
| 52 |
# ---------------------------------------------------------------------------
|
| 53 |
|
| 54 |
-
def render_role_sidebar(
|
| 55 |
-
"""Render cross-file role multiselects
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
st.sidebar.subheader("Add Speaker's Role")
|
| 57 |
st.sidebar.markdown(
|
| 58 |
"<p style='font-size:0.85rem; color:gray; margin-bottom:2px;'>"
|
|
@@ -60,15 +70,15 @@ def render_role_sidebar(all_speaker_tokens):
|
|
| 60 |
"by typing in the \"Add custom role\" textbox.</p>",
|
| 61 |
unsafe_allow_html=True,
|
| 62 |
)
|
| 63 |
-
#st.sidebar.divider()
|
| 64 |
st.sidebar.text(" ")
|
| 65 |
|
| 66 |
for i, category in enumerate(st.session_state.categories):
|
| 67 |
ms_key = f"multiselect_{category}"
|
| 68 |
-
|
| 69 |
-
|
|
|
|
| 70 |
|
| 71 |
-
# Build claimed set
|
| 72 |
all_claimed = {
|
| 73 |
token
|
| 74 |
for i, category in enumerate(st.session_state.categories)
|
|
@@ -84,15 +94,17 @@ def render_role_sidebar(all_speaker_tokens):
|
|
| 84 |
on_click=removeCategory, args=(i,),
|
| 85 |
help=f"Remove {category}",
|
| 86 |
)
|
| 87 |
-
|
| 88 |
available_tokens = [
|
| 89 |
-
t for t in
|
| 90 |
-
if t not in all_claimed or t in
|
| 91 |
]
|
| 92 |
st.sidebar.multiselect(
|
| 93 |
category, available_tokens,
|
| 94 |
default=list(st.session_state.get(ms_key, [])),
|
| 95 |
-
key=ms_key,
|
|
|
|
|
|
|
| 96 |
label_visibility="collapsed",
|
| 97 |
)
|
| 98 |
st.sidebar.text_input("Add custom role", key="categoryInput", on_change=addCategory)
|
|
@@ -102,8 +114,15 @@ def render_role_sidebar(all_speaker_tokens):
|
|
| 102 |
# Sidebar — rename speakers section
|
| 103 |
# ---------------------------------------------------------------------------
|
| 104 |
|
| 105 |
-
def render_rename_sidebar(currFile, speakerNames,
|
| 106 |
-
"""Render the full Rename Multiple Speakers sidebar section.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
st.sidebar.divider()
|
| 108 |
st.sidebar.subheader("Rename Multiple Speakers")
|
| 109 |
st.sidebar.markdown(
|
|
@@ -113,20 +132,19 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
|
|
| 113 |
unsafe_allow_html=True,
|
| 114 |
)
|
| 115 |
|
| 116 |
-
#st.sidebar.divider()
|
| 117 |
st.sidebar.text(" ")
|
| 118 |
|
| 119 |
-
# Build claimed set from the data model
|
| 120 |
all_claimed = {
|
| 121 |
-
token
|
| 122 |
for entry in st.session_state.globalRenames
|
| 123 |
for token in entry["speakers"]
|
| 124 |
}
|
| 125 |
|
| 126 |
for idx, entry in enumerate(st.session_state.globalRenames):
|
| 127 |
grkey = _global_rename_key(idx)
|
| 128 |
-
|
| 129 |
-
|
| 130 |
label_col, trash_col = st.sidebar.columns([5, 1])
|
| 131 |
label_col.markdown(f"**{entry['name']}**")
|
| 132 |
trash_col.button(
|
|
@@ -134,15 +152,17 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
|
|
| 134 |
on_click=removeGlobalRename, args=(idx,),
|
| 135 |
help=f"Remove '{entry['name']}'",
|
| 136 |
)
|
| 137 |
-
|
| 138 |
available_tokens = [
|
| 139 |
-
t for t in
|
| 140 |
-
if t not in all_claimed or t in
|
| 141 |
]
|
| 142 |
st.sidebar.multiselect(
|
| 143 |
f"Speakers for {entry['name']}", options=available_tokens,
|
| 144 |
default=list(st.session_state.get(grkey, [])),
|
| 145 |
-
key=grkey,
|
|
|
|
|
|
|
| 146 |
label_visibility="collapsed",
|
| 147 |
)
|
| 148 |
|
|
|
|
| 51 |
# Sidebar — categories section
|
| 52 |
# ---------------------------------------------------------------------------
|
| 53 |
|
| 54 |
+
def render_role_sidebar(display_speaker_tokens, token_display_map):
|
| 55 |
+
"""Render cross-file role multiselects.
|
| 56 |
+
|
| 57 |
+
display_speaker_tokens : list of display strings shown in the dropdown
|
| 58 |
+
e.g. ["file: John", "file: SPEAKER_01"]
|
| 59 |
+
token_display_map : dict {display_label -> raw_token}
|
| 60 |
+
e.g. {"file: John": "file: SPEAKER_00"}
|
| 61 |
+
The data model (categorySelect) always stores raw tokens; this function
|
| 62 |
+
converts between display labels and raw tokens at the boundary.
|
| 63 |
+
"""
|
| 64 |
+
raw_to_display = {v: k for k, v in token_display_map.items()}
|
| 65 |
+
|
| 66 |
st.sidebar.subheader("Add Speaker's Role")
|
| 67 |
st.sidebar.markdown(
|
| 68 |
"<p style='font-size:0.85rem; color:gray; margin-bottom:2px;'>"
|
|
|
|
| 70 |
"by typing in the \"Add custom role\" textbox.</p>",
|
| 71 |
unsafe_allow_html=True,
|
| 72 |
)
|
|
|
|
| 73 |
st.sidebar.text(" ")
|
| 74 |
|
| 75 |
for i, category in enumerate(st.session_state.categories):
|
| 76 |
ms_key = f"multiselect_{category}"
|
| 77 |
+
# Always sync widget key from data model, converting raw -> display
|
| 78 |
+
raw_vals = st.session_state.categorySelect[i] if i < len(st.session_state.categorySelect) else []
|
| 79 |
+
st.session_state[ms_key] = [raw_to_display.get(t, t) for t in raw_vals]
|
| 80 |
|
| 81 |
+
# Build claimed set (display labels) from widget keys
|
| 82 |
all_claimed = {
|
| 83 |
token
|
| 84 |
for i, category in enumerate(st.session_state.categories)
|
|
|
|
| 94 |
on_click=removeCategory, args=(i,),
|
| 95 |
help=f"Remove {category}",
|
| 96 |
)
|
| 97 |
+
this_role_display = set(st.session_state.get(ms_key, []))
|
| 98 |
available_tokens = [
|
| 99 |
+
t for t in display_speaker_tokens
|
| 100 |
+
if t not in all_claimed or t in this_role_display
|
| 101 |
]
|
| 102 |
st.sidebar.multiselect(
|
| 103 |
category, available_tokens,
|
| 104 |
default=list(st.session_state.get(ms_key, [])),
|
| 105 |
+
key=ms_key,
|
| 106 |
+
on_change=updateCategoryOptions,
|
| 107 |
+
args=(token_display_map,),
|
| 108 |
label_visibility="collapsed",
|
| 109 |
)
|
| 110 |
st.sidebar.text_input("Add custom role", key="categoryInput", on_change=addCategory)
|
|
|
|
| 114 |
# Sidebar — rename speakers section
|
| 115 |
# ---------------------------------------------------------------------------
|
| 116 |
|
| 117 |
+
def render_rename_sidebar(currFile, speakerNames, display_speaker_tokens, token_display_map):
|
| 118 |
+
"""Render the full Rename Multiple Speakers sidebar section.
|
| 119 |
+
|
| 120 |
+
display_speaker_tokens : list of display strings shown in the dropdown
|
| 121 |
+
token_display_map : dict {display_label -> raw_token}
|
| 122 |
+
The data model (entry["speakers"]) always stores raw tokens.
|
| 123 |
+
"""
|
| 124 |
+
raw_to_display = {v: k for k, v in token_display_map.items()}
|
| 125 |
+
|
| 126 |
st.sidebar.divider()
|
| 127 |
st.sidebar.subheader("Rename Multiple Speakers")
|
| 128 |
st.sidebar.markdown(
|
|
|
|
| 132 |
unsafe_allow_html=True,
|
| 133 |
)
|
| 134 |
|
|
|
|
| 135 |
st.sidebar.text(" ")
|
| 136 |
|
| 137 |
+
# Build claimed set (display labels) from the data model
|
| 138 |
all_claimed = {
|
| 139 |
+
raw_to_display.get(token, token)
|
| 140 |
for entry in st.session_state.globalRenames
|
| 141 |
for token in entry["speakers"]
|
| 142 |
}
|
| 143 |
|
| 144 |
for idx, entry in enumerate(st.session_state.globalRenames):
|
| 145 |
grkey = _global_rename_key(idx)
|
| 146 |
+
# Always sync widget key from data model, converting raw -> display
|
| 147 |
+
st.session_state[grkey] = [raw_to_display.get(t, t) for t in entry["speakers"]]
|
| 148 |
label_col, trash_col = st.sidebar.columns([5, 1])
|
| 149 |
label_col.markdown(f"**{entry['name']}**")
|
| 150 |
trash_col.button(
|
|
|
|
| 152 |
on_click=removeGlobalRename, args=(idx,),
|
| 153 |
help=f"Remove '{entry['name']}'",
|
| 154 |
)
|
| 155 |
+
this_entry_display = set(st.session_state[grkey])
|
| 156 |
available_tokens = [
|
| 157 |
+
t for t in display_speaker_tokens
|
| 158 |
+
if t not in all_claimed or t in this_entry_display
|
| 159 |
]
|
| 160 |
st.sidebar.multiselect(
|
| 161 |
f"Speakers for {entry['name']}", options=available_tokens,
|
| 162 |
default=list(st.session_state.get(grkey, [])),
|
| 163 |
+
key=grkey,
|
| 164 |
+
on_change=on_grename_change,
|
| 165 |
+
args=(idx, token_display_map),
|
| 166 |
label_visibility="collapsed",
|
| 167 |
)
|
| 168 |
|