• src/syncterm/sftp_degraded.c sftp_degraded.h sftp_queue_screen.c sftp_

    From Deucе@1:103/705 to Git commit to main/sbbs/master on Fri Apr 24 14:19:28 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/ee5c974d4d3a606579257d47
    Added Files:
    src/syncterm/sftp_degraded.c sftp_degraded.h sftp_queue_screen.c sftp_queue_screen.h
    Modified Files:
    src/syncterm/CMakeLists.txt GNUmakefile sftp_browser.c sftp_queue.c sftp_queue.h ssh.c term.c
    Log Message:
    SyncTERM: SFTP queue screen, per-BBS persistence, degraded mode

    Queue persistence: each BBS's cache dir now holds sftp_queue.ini.
    On connect, sftp_queue_attach_bbs() reloads any pending jobs; ACTIVE
    rows come back as QUEUED so interrupted transfers restart cleanly.
    Every state transition atomically rewrites the file.

    Alt-Q opens the queue screen: live per-job progress (done/total %),
    sorted ACTIVE first, then QUEUED then terminal rows. Del cancels
    the highlighted job; Esc closes. Uses WIN_DYN + gen_ctr polling so
    the view updates as workers tick but the bar only repaints on real
    change.

    Browser keys finalised around uifc's built-in letter-jump: Enter
    downloads a file (and stays in the list), Ins uploads, Del cancels.
    Directories descend on Enter as before.

    Shell-dead degraded mode: if ssh_chan closes while the SFTP queue
    still has work, ssh_input/output threads now leave conn_api.terminate
    clear so sftp_send and the recv thread keep flowing. term.c's
    disconnect branch runs sftp_degraded_run() first — a small overlay
    that blocks until the queue drains or the user chooses "Hang up
    now" / Esc. Queued-but-unfinished jobs are preserved on disk for
    the next connection.

    Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)