From 0a734f1ab2271f0a3c873cedfd319a5e2bc9cc23 Mon Sep 17 00:00:00 2001 From: ysicing Date: Sat, 26 Sep 2026 20:06:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(rest):=20=E4=BF=AE=E5=A4=8D=E6=97=A7?= =?UTF-8?q?=E7=89=88=E5=A4=87=E4=BB=BD=E6=81=A2=E5=A4=8D=E5=8D=95=E6=AC=A1?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XStatsUI/State/SettingsDocument.swift | 5 +++-- .../Tests/XStatsUITests/RestSessionTests.swift | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Packages/XStatsKit/Sources/XStatsUI/State/SettingsDocument.swift b/Packages/XStatsKit/Sources/XStatsUI/State/SettingsDocument.swift index 4697203..aadfb89 100644 --- a/Packages/XStatsKit/Sources/XStatsUI/State/SettingsDocument.swift +++ b/Packages/XStatsKit/Sources/XStatsUI/State/SettingsDocument.swift @@ -125,8 +125,9 @@ extension AppSettings { assign(\.restDailyGoal, option(doc.restDailyGoal, in: Self.restDailyGoalOptions)) if let mode = doc.restMode.flatMap(RestRunMode.init(rawValue:)) { assign(\.restMode, mode) - } else { - assign(\.restCycleEnabled, doc.restCycleEnabled) + } else if let cycle = doc.restCycleEnabled { + // 工作番茄和单次的兼容布尔值均为 false,需比较完整模式才能正确恢复。 + assign(\.restMode, cycle ? .cycle : .single) } assign(\.restSound, doc.restSound.flatMap(RestSound.init(rawValue:))) assign(\.restHUDStyle, doc.restHUDStyle.flatMap(RestHUDStyle.init(rawValue:))) diff --git a/Packages/XStatsKit/Tests/XStatsUITests/RestSessionTests.swift b/Packages/XStatsKit/Tests/XStatsUITests/RestSessionTests.swift index 6fd63f4..85e1a96 100644 --- a/Packages/XStatsKit/Tests/XStatsUITests/RestSessionTests.swift +++ b/Packages/XStatsKit/Tests/XStatsUITests/RestSessionTests.swift @@ -584,6 +584,23 @@ import Testing #expect(target.restHUDStyle == .hourglass) } + @Test(arguments: [false, true, nil] as [Bool?]) + func legacyRestBackupRestoresModeFromWorkday(cycle: Bool?) { + let suite = "RestLegacyBackupTests.\(UUID())" + let defaults = UserDefaults(suiteName: suite)! + defer { defaults.removePersistentDomain(forName: suite) } + let settings = AppSettings(defaults: defaults) + settings.restMode = .workday + var document = SettingsDocument() + document.restCycleEnabled = cycle + + settings.apply(document) + + let expected: RestRunMode = cycle.map { $0 ? .cycle : .single } ?? .workday + #expect(settings.restMode == expected) + #expect(AppSettings(defaults: defaults).restMode == expected) + } + @Test func workdayModeMigratesLegacyCycleAndRoundTripsBackup() { let oldSuite = "RestLegacyModeTests.\(UUID())" let oldDefaults = UserDefaults(suiteName: oldSuite)!