summaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorCanop <cano.petrole@gmail.com>2021-06-11 17:46:40 +0200
committerCanop <cano.petrole@gmail.com>2021-06-11 17:46:40 +0200
commit442e304c3f3ca867d09103301efee42da7ea969f (patch)
tree596f1cc7b0cee6b0bfde100dad7c2673e2f37755 /src/app
parent8b7bbf146c96de074c242abfdad40d21833d8a5a (diff)
"client-server" no longer feature gated
Diffstat (limited to 'src/app')
-rw-r--r--src/app/app.rs47
-rw-r--r--src/app/panel_state.rs4
2 files changed, 30 insertions, 21 deletions
diff --git a/src/app/app.rs b/src/app/app.rs
index 0d75390..f9ea5b7 100644
--- a/src/app/app.rs
+++ b/src/app/app.rs
@@ -22,13 +22,12 @@ use {
std::{
io::Write,
path::PathBuf,
+ sync::{Arc, Mutex},
},
strict::NonEmptyVec,
termimad::{Event, EventSource},
};
-#[cfg(feature = "client-server")]
-use std::sync::{Arc, Mutex};
/// The GUI
pub struct App {
@@ -55,9 +54,12 @@ pub struct App {
stage_panel: Option<PanelId>,
- /// the root of the active panel
- #[cfg(feature = "client-server")]
- root: Arc<Mutex<PathBuf>>,
+ /// the current root, updated when a panel with this concept
+ /// becomes active
+ root: PathBuf,
+
+ /// an optional copy of the root for the --server
+ shared_root: Option<Arc<Mutex<PathBuf>>>,
/// sender to the sequence channel
tx_seqs: Sender<Sequence>,
@@ -97,9 +99,8 @@ impl App {
created_panels_count: 1,
preview_panel: None,
stage_panel: None,
-
- #[cfg(feature = "client-server")]
- root: Arc::new(Mutex::new(con.launch_args.root.clone())),
+ root: con.launch_args.root.clone(),
+ shared_root: None,
tx_seqs,
rx_seqs,
})
@@ -236,7 +237,6 @@ impl App {
/// if there are exactly two non preview panels, return the selection
/// in the non focused panel
- /// FIXME exclude stage panel
fn get_other_panel_path(&self) -> Option<PathBuf> {
let len = self.panels.len().get();
if len == 3 {
@@ -509,10 +509,14 @@ impl App {
}
self.update_preview(con);
- #[cfg(feature="client-server")]
- if let Ok(mut root) = self.root.lock() {
- if let Some(path) = self.state().selected_path() {
- *root = path.to_path_buf();
+
+ if let Some(path) = self.state().selected_path() {
+ self.root = path.to_path_buf();
+ }
+
+ if let Some(shared_root) = &mut self.shared_root {
+ if let Ok(mut root) = shared_root.lock() {
+ *root = self.root.clone();
}
}
@@ -682,13 +686,18 @@ impl App {
.unwrap();
}
- #[cfg(feature="client-server")]
+ #[cfg(unix)]
let _server = con.launch_args.listen.as_ref()
- .map(|server_name| crate::net::Server::new(
- &server_name,
- self.tx_seqs.clone(),
- Arc::clone(&self.root),
- ))
+ .map(|server_name| {
+ let shared_root = Arc::new(Mutex::new(self.root.clone()));
+ let server = crate::net::Server::new(
+ &server_name,
+ self.tx_seqs.clone(),
+ Arc::clone(&shared_root),
+ );
+ self.shared_root = Some(shared_root);
+ server
+ })
.transpose()?;
loop {
diff --git a/src/app/panel_state.rs b/src/app/panel_state.rs
index ff4bee3..fba66c4 100644
--- a/src/app/panel_state.rs
+++ b/src/app/panel_state.rs
@@ -458,7 +458,7 @@ pub trait PanelState {
app_state: &mut AppState,
cc: &CmdContext,
) -> Result<CmdResult, ProgramError> {
- let exec_builder = ExecutionStringBuilder::from_invocation(
+ let exec_builder = ExecutionStringBuilder::with_invocation(
&verb.invocation_parser,
self.sel_info(app_state),
&cc.app.other_path,
@@ -487,7 +487,7 @@ pub trait PanelState {
// stage files, removing the staged paths, etc.)
return Ok(CmdResult::error("sequences can't be executed on multiple selections"));
}
- let exec_builder = ExecutionStringBuilder::from_invocation(
+ let exec_builder = ExecutionStringBuilder::with_invocation(
&verb.invocation_parser,
sel_info,
&cc.app.other_path,