aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaindropsSys <raindrops@equestria.dev>2024-05-10 22:41:19 +0200
committerRaindropsSys <raindrops@equestria.dev>2024-05-10 22:41:19 +0200
commite98145ba554d9e8396dea96e466c14db10e988fc (patch)
treebbbc84a45007dbbfacf99f6daa21a85024401fa0
parent77472e57d0ce3f7e6420017225b3bdfbe1ac9050 (diff)
downloadatomic-e98145ba554d9e8396dea96e466c14db10e988fc.tar.gz
atomic-e98145ba554d9e8396dea96e466c14db10e988fc.tar.bz2
atomic-e98145ba554d9e8396dea96e466c14db10e988fc.zip
Crappy code fix 12/?
-rw-r--r--launcher/src/constants.rs24
-rw-r--r--launcher/src/lib.rs16
-rw-r--r--launcher/src/main.rs178
-rw-r--r--launcher/src/search_path.rs86
4 files changed, 164 insertions, 140 deletions
diff --git a/launcher/src/constants.rs b/launcher/src/constants.rs
new file mode 100644
index 0000000..eaf66fb
--- /dev/null
+++ b/launcher/src/constants.rs
@@ -0,0 +1,24 @@
+// TODO: Rename these to "Atomic"
+
+#[cfg(target_os = "macos")]
+pub const BINARY_PATH: &str = "Contents/MacOS/Electron";
+
+#[cfg(target_os = "linux")]
+pub const BINARY_PATH: &str = "electron";
+
+#[cfg(target_os = "windows")]
+pub const BINARY_PATH: &str = "electron.exe";
+
+#[cfg(target_os = "macos")]
+pub const APP_FOLDER_PATH: &str = "../Resources/app";
+
+#[cfg(any(target_os = "linux", target_os = "windows"))]
+pub const APP_FOLDER_PATH: &str = "./resources/app";
+
+#[cfg(target_os = "macos")]
+pub const APP_ASAR_PATH: &str = "../Resources/app.asar";
+
+#[cfg(any(target_os = "linux", target_os = "windows"))]
+pub const APP_ASAR_PATH: &str = "./resources/app.asar";
+
+pub const VERSION: &str = env!("CARGO_PKG_VERSION");
diff --git a/launcher/src/lib.rs b/launcher/src/lib.rs
new file mode 100644
index 0000000..9e2ef8b
--- /dev/null
+++ b/launcher/src/lib.rs
@@ -0,0 +1,16 @@
+use std::ffi::OsStr;
+use std::path::PathBuf;
+
+pub enum AppData {
+ Folder(PathBuf),
+ Asar(PathBuf)
+}
+
+impl AppData {
+ pub fn get_path(&self) -> &OsStr {
+ match self {
+ AppData::Folder(path) => path.as_ref(),
+ AppData::Asar(path) => path.as_ref()
+ }
+ }
+}
diff --git a/launcher/src/main.rs b/launcher/src/main.rs
index 4a87c81..bf11997 100644
--- a/launcher/src/main.rs
+++ b/launcher/src/main.rs
@@ -1,142 +1,26 @@
-use std::ffi::OsStr;
+mod search_path;
+mod constants;
+
use std::path::PathBuf;
use std::process;
-
-enum AppData {
- Folder(PathBuf),
- Asar(PathBuf)
-}
-
-impl AppData {
- fn get_path(&self) -> &OsStr {
- match self {
- AppData::Folder(path) => path.as_ref(),
- AppData::Asar(path) => path.as_ref()
- }
- }
-}
-
-fn get_home() -> PathBuf {
- dirs::home_dir().unwrap_or(PathBuf::from("/"))
-}
-
-#[cfg(target_os = "macos")]
-fn get_home_search() -> PathBuf {
- let mut path = get_home();
- path.push("/Library/Frameworks/AtomicRuntime.framework");
- path
-}
-
-#[cfg(target_os = "linux")]
-fn get_home_search() -> PathBuf {
- let mut path = get_home();
- path.push("/.local/share/atomic-runtime");
- path
-}
-
-#[cfg(target_os = "windows")]
-fn get_home_search() -> PathBuf {
- let mut path = get_home();
- path.push("\\AppData\\Local\\Atomic Runtime");
- path
-}
-
-#[cfg(target_os = "macos")]
-fn get_search_paths() -> [PathBuf; 5] {
- [
- PathBuf::from("/Library/Frameworks/AtomicRuntime.framework"),
- PathBuf::from("/System/Library/Frameworks/AtomicRuntime.framework"),
- PathBuf::from("/usr/local/lib/atomic-runtime"),
- PathBuf::from("/opt/atomic-runtime"),
- get_home_search(),
- ]
-}
-
-#[cfg(target_os = "linux")]
-fn get_search_paths() -> [PathBuf; 8] {
- [
- PathBuf::from("/usr/local/lib/atomic-runtime"),
- PathBuf::from("/usr/local/lib64/atomic-runtime"),
- PathBuf::from("/usr/lib/atomic-runtime"),
- PathBuf::from("/usr/lib64/atomic-runtime"),
- PathBuf::from("/lib/atomic-runtime"),
- PathBuf::from("/lib64/atomic-runtime"),
- PathBuf::from("/opt/atomic-runtime"),
- get_home_search(),
- ]
-}
-
-#[cfg(target_os = "windows")]
-fn get_search_paths() -> [PathBuf; 29] {
- [
- PathBuf::from("C:\\Program Files\\Common Files\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files\\Common Files\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (x86)\\Common Files\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (x86)\\Common Files\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files\\Common Files\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files\\Common Files\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (x86)\\Common Files\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (x86)\\Common Files\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (Arm)\\Common Files\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Atomic Runtime"),
- PathBuf::from("C:\\Windows\\AtomicRuntime"),
- PathBuf::from("C:\\Windows\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (x86)\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (x86)\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (Arm)\\Equestria.dev\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (Arm)\\Equestria.dev\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (x86)\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (x86)\\Atomic Runtime"),
- PathBuf::from("C:\\Program Files (Arm)\\AtomicRuntime"),
- PathBuf::from("C:\\Program Files (Arm)\\Atomic Runtime"),
- PathBuf::from("C:\\ProgramData\\AtomicRuntime"),
- PathBuf::from("C:\\ProgramData\\Atomic Runtime"),
- get_home_search(),
- ]
-}
+use launcher::AppData;
fn show_system_info() {
println!(
"atomic-launcher: Starting atomic-launcher {} on {} ({})",
- VERSION,
+ constants::VERSION,
std::env::consts::OS,
std::env::consts::ARCH
);
-}
-
-// TODO: Rename these to "Atomic"
-
-#[cfg(target_os = "macos")]
-const BINARY_PATH: &str = "Contents/MacOS/Electron";
-
-#[cfg(target_os = "linux")]
-const BINARY_PATH: &str = "electron";
-#[cfg(target_os = "windows")]
-const BINARY_PATH: &str = "electron.exe";
-
-#[cfg(target_os = "macos")]
-const APP_FOLDER_PATH: &str = "../Resources/app";
-
-#[cfg(any(target_os = "linux", target_os = "windows"))]
-const APP_FOLDER_PATH: &str = "./resources/app";
-
-#[cfg(target_os = "macos")]
-const APP_ASAR_PATH: &str = "../Resources/app.asar";
-
-#[cfg(any(target_os = "linux", target_os = "windows"))]
-const APP_ASAR_PATH: &str = "./resources/app.asar";
-
-const VERSION: &str = env!("CARGO_PKG_VERSION");
+ println!(
+ "atomic-launcher: Compiled against rustc {}",
+ rustc_version_runtime::version()
+ );
+}
fn is_valid_path(mut path: PathBuf) -> Option<PathBuf> {
- path.push(BINARY_PATH);
+ path.push(constants::BINARY_PATH);
let as_path = path.as_path();
if as_path.is_file() {
@@ -148,26 +32,34 @@ fn is_valid_path(mut path: PathBuf) -> Option<PathBuf> {
fn main() {
show_system_info();
- println!(
- "atomic-launcher: Compiled against rustc {}",
- rustc_version_runtime::version()
- );
-
- let exec_path = std::env::current_exe().ok();
- let work_dir = exec_path.as_ref().and_then(|p| p.parent()).unwrap();
+ let work_dir = get_working_directory();
println!(
"atomic-launcher: Current directory: {}",
work_dir.to_str().unwrap()
);
+ let app_data = locate_app(&work_dir);
+ let runtime_path = locate_runtime();
+ launch_app(runtime_path, app_data)
+}
+
+fn get_working_directory() -> PathBuf {
+ let exec_path = std::env::current_exe().ok();
+ exec_path.as_ref()
+ .and_then(|p| p.parent())
+ .unwrap()
+ .to_owned()
+}
+
+fn locate_app(work_dir: &PathBuf) -> Option<AppData> {
let mut app_data: Option<AppData> = None;
let mut app_path_folder = PathBuf::from(work_dir);
- app_path_folder.push(APP_FOLDER_PATH);
+ app_path_folder.push(constants::APP_FOLDER_PATH);
let mut app_path_asar = PathBuf::from(work_dir);
- app_path_asar.push(APP_ASAR_PATH);
+ app_path_asar.push(constants::APP_ASAR_PATH);
if app_path_folder.exists() {
app_data = Some(AppData::Folder(app_path_folder))
@@ -182,7 +74,11 @@ fn main() {
);
}
- let runtime_search_paths = get_search_paths();
+ app_data
+}
+
+fn locate_runtime() -> Option<PathBuf> {
+ let runtime_search_paths = search_path::get_search_paths();
let runtime_search_paths_string = runtime_search_paths
.iter()
.map(|i| i.to_str().unwrap())
@@ -194,17 +90,19 @@ fn main() {
runtime_search_paths_string
);
- let runtime_path = runtime_search_paths.into_iter()
+ runtime_search_paths.into_iter()
.filter_map(is_valid_path)
- .next();
+ .next()
+}
+fn launch_app(runtime_path: Option<PathBuf>, app_data: Option<AppData>) {
if let Some(path) = runtime_path {
println!(
"atomic-launcher: Found atomic-runtime at {}",
path.to_str().unwrap()
);
let mut cmd = process::Command::new(path);
- cmd.env("ATOMIC_LAUNCHER_VERSION", VERSION);
+ cmd.env("ATOMIC_LAUNCHER_VERSION", constants::VERSION);
println!("atomic-launcher: Executing: {:?}", cmd);
if let Some(app_data) = app_data {
diff --git a/launcher/src/search_path.rs b/launcher/src/search_path.rs
new file mode 100644
index 0000000..6c3b920
--- /dev/null
+++ b/launcher/src/search_path.rs
@@ -0,0 +1,86 @@
+use std::path::PathBuf;
+
+fn get_home() -> PathBuf {
+ dirs::home_dir().unwrap_or(PathBuf::from("/"))
+}
+
+#[cfg(target_os = "macos")]
+fn get_home_search() -> PathBuf {
+ let mut path = get_home();
+ path.push("/Library/Frameworks/AtomicRuntime.framework");
+ path
+}
+
+#[cfg(target_os = "linux")]
+fn get_home_search() -> PathBuf {
+ let mut path = get_home();
+ path.push("/.local/share/atomic-runtime");
+ path
+}
+
+#[cfg(target_os = "windows")]
+fn get_home_search() -> PathBuf {
+ let mut path = get_home();
+ path.push("\\AppData\\Local\\Atomic Runtime");
+ path
+}
+
+#[cfg(target_os = "macos")]
+pub fn get_search_paths() -> [PathBuf; 5] {
+ [
+ PathBuf::from("/Library/Frameworks/AtomicRuntime.framework"),
+ PathBuf::from("/System/Library/Frameworks/AtomicRuntime.framework"),
+ PathBuf::from("/usr/local/lib/atomic-runtime"),
+ PathBuf::from("/opt/atomic-runtime"),
+ get_home_search(),
+ ]
+}
+
+#[cfg(target_os = "linux")]
+pub fn get_search_paths() -> [PathBuf; 8] {
+ [
+ PathBuf::from("/usr/local/lib/atomic-runtime"),
+ PathBuf::from("/usr/local/lib64/atomic-runtime"),
+ PathBuf::from("/usr/lib/atomic-runtime"),
+ PathBuf::from("/usr/lib64/atomic-runtime"),
+ PathBuf::from("/lib/atomic-runtime"),
+ PathBuf::from("/lib64/atomic-runtime"),
+ PathBuf::from("/opt/atomic-runtime"),
+ get_home_search(),
+ ]
+}
+
+#[cfg(target_os = "windows")]
+pub fn get_search_paths() -> [PathBuf; 29] {
+ [
+ PathBuf::from("C:\\Program Files\\Common Files\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files\\Common Files\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (x86)\\Common Files\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (x86)\\Common Files\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files\\Common Files\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files\\Common Files\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (x86)\\Common Files\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (x86)\\Common Files\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Common Files\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Common Files\\Atomic Runtime"),
+ PathBuf::from("C:\\Windows\\AtomicRuntime"),
+ PathBuf::from("C:\\Windows\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (x86)\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (x86)\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Equestria.dev\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Equestria.dev\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (x86)\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (x86)\\Atomic Runtime"),
+ PathBuf::from("C:\\Program Files (Arm)\\AtomicRuntime"),
+ PathBuf::from("C:\\Program Files (Arm)\\Atomic Runtime"),
+ PathBuf::from("C:\\ProgramData\\AtomicRuntime"),
+ PathBuf::from("C:\\ProgramData\\Atomic Runtime"),
+ get_home_search(),
+ ]
+}