From 8b94e7dbbe47e68ef6b800c835fbb24809e511a6 Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Tue, 13 Oct 2026 22:11:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E6=B8=A0=E9=81=93?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E8=B7=9F=E9=9A=8F=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E5=8C=85=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从 GitHub 下载 Beta 安装包安装后,更新通道默认选中 Release, 因为 update-channel.json 状态文件不存在时会硬编码回退到 release。 新增 theseus::default_update_channel(),按编译期版本号判断:含预发布 后缀(如 1.0.2-beta7)默认 Beta,否则 Release。数据库渠道与设置页 渠道两处默认值统一改为调用它,保证两者一致。 --- apps/app/src/main.rs | 2 +- packages/app-lib/src/lib.rs | 2 +- packages/app-lib/src/state/db.rs | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) 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()), };