Skip to content

Commit

Permalink
Refactor linux_and_more module
Browse files Browse the repository at this point in the history
  • Loading branch information
Seeker14491 committed Jun 12, 2021
1 parent f5c5564 commit 2da976e
Showing 1 changed file with 54 additions and 47 deletions.
101 changes: 54 additions & 47 deletions opener/src/linux_and_more.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use crate::OpenError;
use std::ffi::OsStr;
use std::io;
use std::io::Write;
use std::process::{Command, Stdio};
use std::process::{Child, Command, Stdio};

const XDG_OPEN_SCRIPT: &[u8] = include_bytes!("xdg-open");

Expand All @@ -14,66 +15,28 @@ pub(crate) fn open(path: &OsStr) -> Result<(), OpenError> {
}

fn wsl_open(path: &OsStr) -> Result<(), OpenError> {
let transformed_path = crate::wsl_to_windows_path(path);
let transformed_path = transformed_path.as_deref();
let path = match transformed_path {
None => path,
Some(x) => x,
};
let wslview = Command::new("wslview")
.arg(path)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn();

if let Ok(mut child) = wslview {
let result = open_with_wslview(path);
if let Ok(mut child) = result {
return crate::wait_child(&mut child, "wslview".into());
}

let mut system_xdg_open = Command::new("xdg-open")
.arg(path)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn()
.map_err(OpenError::Io)?;

let mut system_xdg_open = open_with_system_xdg_open(path).map_err(OpenError::Io)?;
crate::wait_child(&mut system_xdg_open, "xdg-open (system)".into())
}

fn non_wsl_open(path: &OsStr) -> Result<(), OpenError> {
let system_xdg_open = Command::new("xdg-open")
.arg(path)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn();
let system_xdg_open = open_with_system_xdg_open(path);

let system_xdg_open_used;
let mut xdg_open = match system_xdg_open {
let mut xdg_open;
match system_xdg_open {
Ok(child) => {
system_xdg_open_used = true;
child
xdg_open = child;
}
Err(_) => {
system_xdg_open_used = false;
let mut sh = Command::new("sh")
.arg("-s")
.arg(path)
.stdin(Stdio::piped())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn()
.map_err(OpenError::Io)?;

sh.stdin
.as_mut()
.unwrap()
.write_all(XDG_OPEN_SCRIPT)
.map_err(OpenError::Io)?;

sh
xdg_open = open_with_internal_xdg_open(path)?;
}
};

Expand All @@ -85,3 +48,47 @@ fn non_wsl_open(path: &OsStr) -> Result<(), OpenError> {

crate::wait_child(&mut xdg_open, cmd_name.into())
}

fn open_with_wslview(path: &OsStr) -> io::Result<Child> {
let converted_path = crate::wsl_to_windows_path(path);
let converted_path = converted_path.as_deref();
let path = match converted_path {
None => path,
Some(x) => x,
};

Command::new("wslview")
.arg(path)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn()
}

fn open_with_system_xdg_open(path: &OsStr) -> io::Result<Child> {
Command::new("xdg-open")
.arg(path)
.stdin(Stdio::null())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn()
}

fn open_with_internal_xdg_open(path: &OsStr) -> Result<Child, OpenError> {
let mut sh = Command::new("sh")
.arg("-s")
.arg(path)
.stdin(Stdio::piped())
.stdout(Stdio::null())
.stderr(Stdio::piped())
.spawn()
.map_err(OpenError::Io)?;

sh.stdin
.as_mut()
.unwrap()
.write_all(XDG_OPEN_SCRIPT)
.map_err(OpenError::Io)?;

Ok(sh)
}

0 comments on commit 2da976e

Please sign in to comment.