async fn run( ep_rx: Receiver<Option<Endpoint>>, act_rx: UnboundedReceiver<UserAction>, presenter: Arc<dyn Presenter>, data_dir: PathBuf, dir_hash: String, state: Arc<Mutex<State>>, )