playlist edition
This commit is contained in:
38
app/controllers/label_controller.py
Normal file
38
app/controllers/label_controller.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# controllers.py
|
||||
import streamlit as st
|
||||
import db
|
||||
|
||||
def label_widget(video, preselected=None):
|
||||
"""Widget multiselect pour labels, avec création dynamique."""
|
||||
preselected = preselected or []
|
||||
key_multiselect = f"labels_{video.id}"
|
||||
key_input = f"new_label_{video.id}"
|
||||
|
||||
labels = db.load_labels()
|
||||
|
||||
if key_multiselect not in st.session_state:
|
||||
st.session_state[key_multiselect] = preselected
|
||||
|
||||
current_selected = st.session_state[key_multiselect]
|
||||
|
||||
# Si "Autre…" dans sélection, afficher input
|
||||
if "Autre…" in current_selected:
|
||||
new_label = st.text_input("Entrer un label personnalisé", value="", key=key_input)
|
||||
if new_label.strip():
|
||||
db.create_labels([new_label.strip()])
|
||||
labels = db.load_labels()
|
||||
current_selected = [l for l in current_selected if l != "Autre…"] + [new_label.strip()]
|
||||
st.session_state[key_multiselect] = current_selected
|
||||
|
||||
selected = st.multiselect(
|
||||
"Labels",
|
||||
options=labels + ["Autre…"],
|
||||
default=st.session_state[key_multiselect],
|
||||
key=key_multiselect,
|
||||
)
|
||||
|
||||
if st.button("💾 Sauvegarder labels", key=f"save_{video.id}"):
|
||||
video.save_labels(selected)
|
||||
st.success(f"{len(selected)} label(s) enregistré(s) pour {video.mp4_file_name}")
|
||||
|
||||
return selected
|
||||
Reference in New Issue
Block a user