CoolFace
Apppublic

moebiusT7/book-ocr-studio

sourceHugging Faceagpl-3.0updated 2d agoView on Hugging Face
0likes
ui_refresh.py39 linesDownload Raw Back to root
1"""Poll only while asynchronous work needs UI updates."""2from functools import wraps3from pathlib import Path4import streamlit as st5from core import read,is_running6 7def job_pending(path):8    if not path:return False9    folder=Path(path)10    if not (folder/'status.json').exists():return False11    return is_running(folder) or read(folder/'status.json').get('state') in {'ready','queued'}12 13def capture_pending():14    from kindle_capture import running15    path=st.session_state.get('capture_session')16    if not path:return False17    folder=Path(path)18    s=read(folder/'state.json')19    # Child process may not have acquired its lock yet; still poll startup.20    if s.get('phase')=='starting':return True21    if not running(folder):return job_pending(s.get('job'))22    return (any((folder/'commands').glob('*.json')) or23            s.get('phase') in {'starting','capturing','detecting','updating'} or24            (folder/'close').exists() or job_pending(s.get('job')))25 26def adaptive_fragment(seconds,pending):27    def decorate(fn):28        @wraps(fn)29        def render(*args,**kwargs):30            polling=bool(pending())31            @st.fragment(run_every=seconds if polling else None)32            def body():33                fn(*args,**kwargs)34                if bool(pending())!=polling:35                    st.rerun()  # Register or remove timer after a state transition.36            return body()37        return render38    return decorate39