diff --git a/apps/app/src/main.rs b/apps/app/src/main.rs index cfd1486..4f0be0e 100644 --- a/apps/app/src/main.rs +++ b/apps/app/src/main.rs @@ -339,7 +339,7 @@ fn get_launcher_root_dir() -> api::Result { fn get_update_channel(app: tauri::AppHandle) -> api::Result { let channel = read_update_channel_state(&app)? .active_channel - .unwrap_or_else(|| "release".to_string()); + .unwrap_or_else(|| theseus::default_update_channel().to_string()); match channel.as_str() { "release" | "beta" => Ok(channel), diff --git a/packages/app-lib/src/lib.rs b/packages/app-lib/src/lib.rs index b557d3b..7c9da96 100644 --- a/packages/app-lib/src/lib.rs +++ b/packages/app-lib/src/lib.rs @@ -33,7 +33,7 @@ pub use logger::start_logger; pub use state::db::{ backup_current_app_db_for_update, beta_database_exists, copy_database_between_channels, copy_release_database_to_beta, - current_app_database_path, + current_app_database_path, default_update_channel, }; pub use state::{DirectoryInfo, State}; pub use storage::*; diff --git a/packages/app-lib/src/state/db.rs b/packages/app-lib/src/state/db.rs index 99a68c4..df63910 100644 --- a/packages/app-lib/src/state/db.rs +++ b/packages/app-lib/src/state/db.rs @@ -304,6 +304,18 @@ async fn app_db_path(settings_dir: &Path) -> crate::Result { Ok(settings_dir.join(channel).join(LEGACY_APP_DB_FILE)) } +/// The update channel a fresh install should default to. Beta builds carry a +/// pre-release version (e.g. `1.0.2-beta7`), so their installers should start +/// on the Beta channel instead of silently falling back to Release. +pub fn default_update_channel() -> &'static str { + let version = env!("CARGO_PKG_VERSION"); + if version.contains('-') { + "beta" + } else { + "release" + } +} + async fn read_update_channel( settings_dir: &Path, ) -> crate::Result<&'static str> { @@ -311,7 +323,7 @@ async fn read_update_channel( let contents = match tokio::fs::read_to_string(&path).await { Ok(contents) => contents, Err(error) if error.kind() == std::io::ErrorKind::NotFound => { - return Ok("release"); + return Ok(default_update_channel()); } Err(error) => return Err(error.into()), };