The search list survives a restart, but a restored query was only ever a reminder: seeing what the network has now meant typing it out again. In the Searches pane, `S` now re-runs the highlighted query in its place — no duplicate row, no reordering — cancelling a run still collecting first and starting the Results display over for what comes back. The key is listed in the shortcut bar, the `?` overlay, the README and the website. `start_search` is split into launching a search and showing it, so both paths share one implementation. A new `tui_e2e` suite drives the real window over a real session against soulfind: keys in, a screen out, a sharing peer on the other end. It restores a query from a previous run's state directory, presses `S`, and checks the peer's file lands on screen — then again once the query has been on the wire, proving a repeat is answered and the display does not stack. To make that possible `MainTui` is exported with `handle_key_event`, `render`, `poll_session` and a `state()` accessor, and CI runs the suite with `SOULSEEK_E2E_REQUIRED=1`. Closes #85
23 lines
649 B
Rust
23 lines
649 B
Rust
//! The program itself. `main.rs` is a thin entry point over this crate, so
|
|
//! every module is compiled once and integration tests drive the same code the
|
|
//! binary runs.
|
|
|
|
pub mod api;
|
|
pub mod cli;
|
|
pub mod commands;
|
|
pub mod daemon;
|
|
pub(crate) mod directories;
|
|
pub mod models;
|
|
pub mod output;
|
|
pub mod persist;
|
|
pub(crate) mod port_mapping;
|
|
pub mod remote;
|
|
pub mod run;
|
|
pub(crate) mod ui;
|
|
|
|
/// The interactive window, reachable so an integration test can drive it
|
|
/// with key events, advance it a frame at a time and read the screen back.
|
|
/// Hidden from the documented API: it is a harness door, not a contract.
|
|
#[doc(hidden)]
|
|
pub use ui::MainTui;
|