fix: 修复实例分组无法保存的问题

direct-link(外部 .minecraft 关联)同步逻辑会把来源路径当作分组名
写入 instance_groups 表,每次同步都覆盖用户手动设置的分组,导致
分组当场生效、重启丢失。

移除三处 direct-link 相关的来源分组写入,使 instance_groups 表
专属于用户分组:
- sync_direct_link_instances: 同步时不再覆盖 groups
- create_direct_link_instance: 建实例时不再写来源分组
- launcher::promote_external_instance_link: 提升外部实例时不再写分组
This commit is contained in:
AxTps committed 2026-10-06 09:50:01 +08:00
1 parent 748d24b264
commit 20d5d2baab
3 files changed
+3 -27

No files matched your search

-9
View File
@@ -1,5 +1,4 @@
//! Logic for launching Minecraft
use crate::api::pack::import::direct_link::direct_link_group;
use crate::data::ModLoader;
use crate::event::emit::{emit_instance, emit_loading, init_loading};
use crate::event::{InstancePayloadType, LoadingBarType};
@@ -717,14 +716,6 @@ async fn promote_external_instance_link(
&mut tx,
)
.await?;
if let Some(group) = direct_link_group(&direct.dot_minecraft) {
crate::state::instances::adapters::sqlite::instance_rows::replace_instance_groups(
&instance.id,
&[group],
&mut tx,
)
.await?;
}
tx.commit().await?;
emit_instance(&instance.id, InstancePayloadType::Edited).await?;
Ok(())
@@ -1,6 +1,6 @@
use crate::api::pack::import::{
ImportLauncherType,
direct_link::{direct_link_group, resolve_direct_link},
direct_link::resolve_direct_link,
};
use crate::launcher::ExternalGameDirMode;
use crate::state::instances::{
@@ -156,11 +156,6 @@ pub(crate) async fn create_direct_link_instance(
&mut tx,
)
.await?;
let groups = direct_link_group(&resolved.dot_minecraft)
.into_iter()
.collect::<Vec<_>>();
instance_rows::replace_instance_groups(&instance_id, &groups, &mut tx)
.await?;
instance_rows::upsert_instance_launch_overrides(&launch_overrides, &mut tx)
.await?;
tx.commit().await?;
@@ -1,6 +1,6 @@
use super::create_direct_link_instance::create_direct_link_instance;
use crate::api::pack::import::direct_link::{
detect_direct_link_source, direct_link_group,
detect_direct_link_source,
has_minecraft_version_manifest, resolve_direct_link,
};
use crate::event::{InstancePayloadType, emit::emit_instance};
@@ -163,11 +163,7 @@ pub(crate) async fn sync_direct_link_instances(
let content_changed = metadata.applied_content_set.game_version
!= resolved.game_version
|| metadata.applied_content_set.loader != resolved.loader;
let groups = direct_link_group(&resolved.dot_minecraft)
.into_iter()
.collect::<Vec<_>>();
let groups_changed = metadata.groups != groups;
if fields_changed || content_changed || groups_changed {
if fields_changed || content_changed {
if content_changed {
crate::state::edit_instance(
&instance.id,
@@ -216,12 +212,6 @@ pub(crate) async fn sync_direct_link_instances(
&mut tx,
)
.await?;
instance_rows::replace_instance_groups(
&instance.id,
&groups,
&mut tx,
)
.await?;
tx.commit().await?;
let _ = emit_instance(
&instance.id,