Compare commits

...

3 Commits

Author SHA1 Message Date
7ffc20ee48 fixed harmless warning 2026-09-04 20:11:01 -07:00
ddf3abb314 add macOS Node runtime and appdata support 2026-09-04 20:08:27 -07:00
ec50c4e07f v1.1.14 2026-09-04 19:55:59 -07:00
6 changed files with 52 additions and 13 deletions

13
main.js
View File

@@ -6,10 +6,19 @@ const ServiceManager = require('./service-manager');
const Patcher = require('./patcher'); const Patcher = require('./patcher');
const UpdateClient = require('./update-client'); const UpdateClient = require('./update-client');
const defaultAppData = path.join(os.homedir(), 'AppData', 'Roaming', 'vyla-home', 'vyla-home-files'); function getDefaultAppData() {
if (process.platform === 'darwin') {
return path.join(os.homedir(), 'Library', 'Application Support', 'vyla-home', 'vyla-home-files');
}
if (process.platform === 'linux') {
return path.join(os.homedir(), '.local', 'share', 'vyla-home', 'vyla-home-files');
}
return path.join(os.homedir(), 'AppData', 'Roaming', 'vyla-home', 'vyla-home-files');
}
const APPDATA_DIR = (process.env.APPDATA_PATH && !process.env.APPDATA_PATH.includes('com.vyla.home')) const APPDATA_DIR = (process.env.APPDATA_PATH && !process.env.APPDATA_PATH.includes('com.vyla.home'))
? process.env.APPDATA_PATH ? process.env.APPDATA_PATH
: defaultAppData; : getDefaultAppData();
const LOGS_DIR = path.join(APPDATA_DIR, 'logs'); const LOGS_DIR = path.join(APPDATA_DIR, 'logs');
try { fs.mkdirSync(LOGS_DIR, { recursive: true }); } catch (e) { } try { fs.mkdirSync(LOGS_DIR, { recursive: true }); } catch (e) { }

View File

@@ -1,6 +1,6 @@
{ {
"name": "vyla-home", "name": "vyla-home",
"version": "1.1.13", "version": "1.1.14",
"description": "Vyla Home Desktop App Launcher", "description": "Vyla Home Desktop App Launcher",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {

2
src-tauri/Cargo.lock generated
View File

@@ -4222,7 +4222,7 @@ dependencies = [
[[package]] [[package]]
name = "vyla-home" name = "vyla-home"
version = "1.1.13" version = "1.1.14"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"serde", "serde",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "vyla-home" name = "vyla-home"
version = "1.1.13" version = "1.1.14"
description = "Vyla Home Desktop App Launcher" description = "Vyla Home Desktop App Launcher"
edition = "2021" edition = "2021"

View File

@@ -60,9 +60,13 @@ fn find_node_binary(app: &tauri::App) -> Option<String> {
if let Ok(resource_dir) = app.path().resource_dir() { if let Ok(resource_dir) = app.path().resource_dir() {
let candidates = [ let candidates = [
resource_dir.join("bin").join("node.exe"), resource_dir.join("bin").join("node.exe"),
resource_dir.join("bin").join("node"),
resource_dir.join("node.exe"), resource_dir.join("node.exe"),
resource_dir.join("node"),
resource_dir.join("_up_").join("bin").join("node.exe"), resource_dir.join("_up_").join("bin").join("node.exe"),
resource_dir.join("_up_").join("bin").join("node"),
resource_dir.join("_up_").join("node.exe"), resource_dir.join("_up_").join("node.exe"),
resource_dir.join("_up_").join("node"),
]; ];
for candidate in candidates { for candidate in candidates {
if candidate.exists() { if candidate.exists() {
@@ -75,9 +79,13 @@ fn find_node_binary(app: &tauri::App) -> Option<String> {
if let Some(parent) = exe_path.parent() { if let Some(parent) = exe_path.parent() {
let candidates = [ let candidates = [
parent.join("bin").join("node.exe"), parent.join("bin").join("node.exe"),
parent.join("bin").join("node"),
parent.join("node.exe"), parent.join("node.exe"),
parent.join("node"),
parent.join("resources").join("bin").join("node.exe"), parent.join("resources").join("bin").join("node.exe"),
parent.join("resources").join("bin").join("node"),
parent.join("resources").join("node.exe"), parent.join("resources").join("node.exe"),
parent.join("resources").join("node"),
]; ];
for candidate in candidates { for candidate in candidates {
if candidate.exists() { if candidate.exists() {
@@ -89,9 +97,13 @@ fn find_node_binary(app: &tauri::App) -> Option<String> {
if let Ok(path_var) = std::env::var("PATH") { if let Ok(path_var) = std::env::var("PATH") {
for p in std::env::split_paths(&path_var) { for p in std::env::split_paths(&path_var) {
let candidate = p.join("node.exe"); let node_exe = p.join("node.exe");
if candidate.exists() { if node_exe.exists() {
return Some(clean_path(&candidate)); return Some(clean_path(&node_exe));
}
let node = p.join("node");
if node.exists() {
return Some(clean_path(&node));
} }
} }
} }
@@ -120,6 +132,22 @@ fn find_node_binary(app: &tauri::App) -> Option<String> {
} }
} }
#[cfg(not(windows))]
{
let default_paths = [
"/usr/local/bin/node",
"/usr/bin/node",
"/opt/homebrew/bin/node",
"/opt/local/bin/node",
];
for path in default_paths {
let candidate = std::path::Path::new(path);
if candidate.exists() {
return Some(clean_path(candidate));
}
}
}
None None
} }
@@ -561,7 +589,7 @@ fn main() {
.setup(|app| { .setup(|app| {
debug_log("Tauri setup started"); debug_log("Tauri setup started");
let app_data = app.path().app_data_dir().unwrap_or_default(); let app_data = app.path().app_data_dir().unwrap_or_default();
let app_data_str = clean_path(&app_data); let _app_data_str = clean_path(&app_data);
let vyla_files = if let Ok(appdata_env) = std::env::var("APPDATA") { let vyla_files = if let Ok(appdata_env) = std::env::var("APPDATA") {
std::path::PathBuf::from(appdata_env).join("vyla-home").join("vyla-home-files") std::path::PathBuf::from(appdata_env).join("vyla-home").join("vyla-home-files")
@@ -622,10 +650,12 @@ fn main() {
} }
}; };
let vyla_files_str = clean_path(&vyla_files);
let mut cmd = Command::new(&node_bin); let mut cmd = Command::new(&node_bin);
cmd.arg(&main_js) cmd.arg(&main_js)
.current_dir(&root_dir) .current_dir(&root_dir)
.env("APPDATA_PATH", &app_data_str) .env("APPDATA_PATH", &vyla_files_str)
.env("NODE_EXE", &node_bin) .env("NODE_EXE", &node_bin)
.stdin(Stdio::piped()) .stdin(Stdio::piped())
.stdout(Stdio::piped()) .stdout(Stdio::piped())

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "Vyla Home", "productName": "Vyla Home",
"version": "1.1.13", "version": "1.1.14",
"identifier": "com.vyla.home", "identifier": "com.vyla.home",
"build": { "build": {
"frontendDist": "../ui" "frontendDist": "../ui"