feat(core): show already running warning if multiple instances are present
This commit is contained in:
parent
56502fd0e5
commit
e9d90929a6
|
@ -25,10 +25,14 @@ use thiserror::Error;
|
||||||
use crate::cli::PathsOverrides;
|
use crate::cli::PathsOverrides;
|
||||||
use crate::cli::util::CommandExt;
|
use crate::cli::util::CommandExt;
|
||||||
|
|
||||||
pub fn launch_daemon(paths_overrides: &PathsOverrides) -> Result<()> {
|
pub fn launch_daemon(paths_overrides: &PathsOverrides, show_welcome: bool) -> Result<()> {
|
||||||
let espanso_exe_path = std::env::current_exe()?;
|
let espanso_exe_path = std::env::current_exe()?;
|
||||||
let mut command = Command::new(&espanso_exe_path.to_string_lossy().to_string());
|
let mut command = Command::new(&espanso_exe_path.to_string_lossy().to_string());
|
||||||
command.args(&["daemon", "--show-welcome"]);
|
let mut args = vec!["daemon"];
|
||||||
|
if show_welcome {
|
||||||
|
args.push("--show-welcome");
|
||||||
|
}
|
||||||
|
command.args(&args);
|
||||||
command.with_paths_overrides(paths_overrides);
|
command.with_paths_overrides(paths_overrides);
|
||||||
|
|
||||||
let mut child = command.spawn()?;
|
let mut child = command.spawn()?;
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use self::util::MigrationError;
|
use self::util::MigrationError;
|
||||||
use crate::exit_code::{LAUNCHER_CONFIG_DIR_POPULATION_FAILURE, LAUNCHER_SUCCESS};
|
use crate::{exit_code::{LAUNCHER_ALREADY_RUNNING, LAUNCHER_CONFIG_DIR_POPULATION_FAILURE, LAUNCHER_SUCCESS}, lock::acquire_daemon_lock};
|
||||||
use crate::preferences::Preferences;
|
use crate::preferences::Preferences;
|
||||||
use log::error;
|
use log::error;
|
||||||
|
|
||||||
|
@ -45,10 +45,18 @@ pub fn new() -> CliModule {
|
||||||
#[cfg(feature = "modulo")]
|
#[cfg(feature = "modulo")]
|
||||||
fn launcher_main(args: CliModuleArgs) -> i32 {
|
fn launcher_main(args: CliModuleArgs) -> i32 {
|
||||||
use espanso_modulo::wizard::{MigrationResult, WizardHandlers, WizardOptions};
|
use espanso_modulo::wizard::{MigrationResult, WizardHandlers, WizardOptions};
|
||||||
|
let paths = args.paths.expect("missing paths in launcher main");
|
||||||
|
|
||||||
// TODO: should we create a non-gui wizard? We can also use it for the non-modulo versions of espanso
|
// TODO: should we create a non-gui wizard? We can also use it for the non-modulo versions of espanso
|
||||||
|
|
||||||
let paths = args.paths.expect("missing paths in launcher main");
|
// If espanso is already running, show a warning
|
||||||
|
let lock_file = acquire_daemon_lock(&paths.runtime);
|
||||||
|
if lock_file.is_none() {
|
||||||
|
util::show_already_running_warning().expect("unable to show already running warning");
|
||||||
|
return LAUNCHER_ALREADY_RUNNING;
|
||||||
|
}
|
||||||
|
drop(lock_file);
|
||||||
|
|
||||||
let paths_overrides = args
|
let paths_overrides = args
|
||||||
.paths_overrides
|
.paths_overrides
|
||||||
.expect("missing paths overrides in launcher main");
|
.expect("missing paths overrides in launcher main");
|
||||||
|
@ -56,6 +64,7 @@ fn launcher_main(args: CliModuleArgs) -> i32 {
|
||||||
|
|
||||||
let preferences =
|
let preferences =
|
||||||
crate::preferences::get_default(&paths.runtime).expect("unable to initialize preferences");
|
crate::preferences::get_default(&paths.runtime).expect("unable to initialize preferences");
|
||||||
|
let is_first_start = !preferences.has_completed_wizard();
|
||||||
|
|
||||||
let is_welcome_page_enabled = !preferences.has_completed_wizard();
|
let is_welcome_page_enabled = !preferences.has_completed_wizard();
|
||||||
|
|
||||||
|
@ -175,7 +184,7 @@ fn launcher_main(args: CliModuleArgs) -> i32 {
|
||||||
espanso_mac_utils::convert_to_background_app();
|
espanso_mac_utils::convert_to_background_app();
|
||||||
}
|
}
|
||||||
|
|
||||||
daemon::launch_daemon(&paths_overrides).expect("failed to launch daemon");
|
daemon::launch_daemon(&paths_overrides, is_first_start).expect("failed to launch daemon");
|
||||||
}
|
}
|
||||||
|
|
||||||
LAUNCHER_SUCCESS
|
LAUNCHER_SUCCESS
|
||||||
|
|
|
@ -97,3 +97,13 @@ pub enum AddToPathError {
|
||||||
#[error("unexpected error, 'espanso env-path register' returned a non-zero exit code.")]
|
#[error("unexpected error, 'espanso env-path register' returned a non-zero exit code.")]
|
||||||
NonZeroExitCode,
|
NonZeroExitCode,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn show_already_running_warning() -> Result<()> {
|
||||||
|
let espanso_exe_path = std::env::current_exe()?;
|
||||||
|
let mut command = Command::new(&espanso_exe_path.to_string_lossy().to_string());
|
||||||
|
command.args(&["modulo", "welcome", "--already-running"]);
|
||||||
|
|
||||||
|
let mut child = command.spawn()?;
|
||||||
|
child.wait()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
|
@ -53,8 +53,8 @@ fn modulo_main(args: CliModuleArgs) -> i32 {
|
||||||
return search::search_main(matches, &icon_paths);
|
return search::search_main(matches, &icon_paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = cli_args.subcommand_matches("welcome") {
|
if let Some(matches) = cli_args.subcommand_matches("welcome") {
|
||||||
return welcome::welcome_main(&paths, &icon_paths);
|
return welcome::welcome_main(matches, &paths, &icon_paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = cli_args.subcommand_matches("troubleshoot") {
|
if let Some(_) = cli_args.subcommand_matches("troubleshoot") {
|
||||||
|
|
|
@ -17,12 +17,13 @@
|
||||||
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
|
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use clap::{ArgMatches};
|
||||||
use crate::icon::IconPaths;
|
use crate::icon::IconPaths;
|
||||||
use crate::preferences::Preferences;
|
use crate::preferences::Preferences;
|
||||||
use espanso_modulo::welcome::*;
|
use espanso_modulo::welcome::*;
|
||||||
use espanso_path::Paths;
|
use espanso_path::Paths;
|
||||||
|
|
||||||
pub fn welcome_main(paths: &Paths, icon_paths: &IconPaths) -> i32 {
|
pub fn welcome_main(matches: &ArgMatches, paths: &Paths, icon_paths: &IconPaths) -> i32 {
|
||||||
let preferences =
|
let preferences =
|
||||||
crate::preferences::get_default(&paths.runtime).expect("unable to initialize preferences");
|
crate::preferences::get_default(&paths.runtime).expect("unable to initialize preferences");
|
||||||
|
|
||||||
|
@ -30,6 +31,8 @@ pub fn welcome_main(paths: &Paths, icon_paths: &IconPaths) -> i32 {
|
||||||
preferences.set_should_display_welcome(!dont_show);
|
preferences.set_should_display_welcome(!dont_show);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let is_already_running = matches.is_present("already-running");
|
||||||
|
|
||||||
espanso_modulo::welcome::show(WelcomeOptions{
|
espanso_modulo::welcome::show(WelcomeOptions{
|
||||||
window_icon_path: icon_paths
|
window_icon_path: icon_paths
|
||||||
.wizard_icon
|
.wizard_icon
|
||||||
|
@ -39,6 +42,7 @@ pub fn welcome_main(paths: &Paths, icon_paths: &IconPaths) -> i32 {
|
||||||
.tray_explain_image
|
.tray_explain_image
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|path| path.to_string_lossy().to_string()),
|
.map(|path| path.to_string_lossy().to_string()),
|
||||||
|
is_already_running,
|
||||||
handlers: WelcomeHandlers {
|
handlers: WelcomeHandlers {
|
||||||
dont_show_again_changed: Some(dont_show_again_handler),
|
dont_show_again_changed: Some(dont_show_again_handler),
|
||||||
},
|
},
|
||||||
|
|
|
@ -43,6 +43,7 @@ pub const ADD_TO_PATH_FAILURE: i32 = 1;
|
||||||
|
|
||||||
pub const LAUNCHER_SUCCESS: i32 = 0;
|
pub const LAUNCHER_SUCCESS: i32 = 0;
|
||||||
pub const LAUNCHER_CONFIG_DIR_POPULATION_FAILURE: i32 = 1;
|
pub const LAUNCHER_CONFIG_DIR_POPULATION_FAILURE: i32 = 1;
|
||||||
|
pub const LAUNCHER_ALREADY_RUNNING: i32 = 2;
|
||||||
|
|
||||||
pub const SERVICE_SUCCESS: i32 = 0;
|
pub const SERVICE_SUCCESS: i32 = 0;
|
||||||
pub const SERVICE_FAILURE: i32 = 1;
|
pub const SERVICE_FAILURE: i32 = 1;
|
||||||
|
|
|
@ -222,7 +222,15 @@ fn main() {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.subcommand(SubCommand::with_name("troubleshoot").about("Display the troubleshooting GUI"))
|
.subcommand(SubCommand::with_name("troubleshoot").about("Display the troubleshooting GUI"))
|
||||||
.subcommand(SubCommand::with_name("welcome").about("Display the welcome screen")),
|
.subcommand(
|
||||||
|
SubCommand::with_name("welcome")
|
||||||
|
.about("Display the welcome screen")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("already-running")
|
||||||
|
.long("already-running")
|
||||||
|
.takes_value(false),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
// .subcommand(SubCommand::with_name("start")
|
// .subcommand(SubCommand::with_name("start")
|
||||||
// .about("Start the daemon spawning a new process in the background."))
|
// .about("Start the daemon spawning a new process in the background."))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user