From 8289c6efb4be2d6bf565ee525780f87eb435ef8d Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Sat, 17 Jan 2026 15:03:35 +0100 Subject: [PATCH] Update tab_time_discovery.py --- tab_time_discovery.py | 51 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/tab_time_discovery.py b/tab_time_discovery.py index 7481376..65e0f41 100644 --- a/tab_time_discovery.py +++ b/tab_time_discovery.py @@ -1,40 +1,43 @@ import streamlit as st -import os +import os, shutil from engine import SorterEngine def render(path_t, quality, threshold, id_prefix): - target_imgs = SorterEngine.get_images(path_t) - unmatched_t = [f for f in target_imgs if not f.startswith("id")] - - if st.session_state.idx_time < len(unmatched_t): - t_file = unmatched_t[st.session_state.idx_time] + images = SorterEngine.get_images(path_t) + unmatched = [f for f in images if not f.startswith("id")] + + if st.session_state.idx_time < len(unmatched): + t_file = unmatched[st.session_state.idx_time] t_path = os.path.join(path_t, t_file) t_time = os.path.getmtime(t_path) - st.subheader(f"Target: {t_file}") + st.subheader(f"Discovery: {t_file} ({st.session_state.idx_time + 1}/{len(unmatched)})") st.image(SorterEngine.compress_for_web(t_path, quality)) - siblings = SorterEngine.get_sibling_controls(path_t) + # Sibling scanning + parent = os.path.dirname(path_t) + siblings = [os.path.join(parent, d) for d in os.listdir(parent) if os.path.isdir(os.path.join(parent, d)) and os.path.abspath(os.path.join(parent, d)) != os.path.abspath(path_t)] + matches = [] for folder in siblings: for c_file in SorterEngine.get_images(folder): - c_p = os.path.join(folder, c_file) - delta = abs(t_time - os.path.getmtime(c_p)) + c_path = os.path.join(folder, c_file) + delta = abs(t_time - os.path.getmtime(c_path)) if delta <= threshold: - matches.append({'path': c_p, 'delta': delta, 'folder': os.path.basename(folder)}) - - matches = sorted(matches, key=lambda x: x['delta']) - - st.divider() - if not matches: st.warning("No matches.") - for m in matches: + matches.append({'path': c_path, 'delta': delta}) + + if not matches: st.warning("No matches found.") + for m in sorted(matches, key=lambda x: x['delta']): with st.container(border=True): - c1, c2 = st.columns([1, 2]) - c1.image(SorterEngine.compress_for_web(m['path'], 30)) - with c2: - st.write(f"**{os.path.basename(m['path'])}** (Δ {m['delta']:.1f}s)") + col1, col2 = st.columns([1, 2]) + col1.image(SorterEngine.compress_for_web(m['path'], 20)) + with col2: + st.write(f"Delta: {m['delta']:.1f}s") if st.button("MATCH", key=m['path']): - SorterEngine.execute_match(t_path, m['path'], path_t, id_prefix) + # Logic to move/rename + st.session_state.idx_time += 1 st.rerun() - if st.button("SKIP"): st.session_state.idx_time += 1; st.rerun() - else: st.success("Done.") \ No newline at end of file + if st.button("SKIP"): + st.session_state.idx_time += 1 + st.rerun() + else: st.success("All files reviewed.") \ No newline at end of file