Fix SwiftData persistence concurrency stability

This commit is contained in:
diyaa
2026-05-29 00:06:57 +02:00
parent e5027152ab
commit ebc187f4a1
19 changed files with 554 additions and 132 deletions
@@ -14,7 +14,7 @@ struct MacLibraryView: View {
Text("Backend Connection")
.font(.title2)
TextField("http://localhost:3000", text: $viewModel.serverURLString)
TextField("http://localhost:3007", text: $viewModel.serverURLString)
.textFieldStyle(.roundedBorder)
.onSubmit {
viewModel.persistServerURLSelection()
@@ -16,6 +16,7 @@ final class MacLibraryViewModel {
var discoveredTrackCount = 0
var isScanning = false
var nowPlayingState = NowPlayingState()
var playbackErrorMessage: String?
var serverURLString: String
var deviceRegistrationStatus = "Not registered."
@@ -70,9 +71,11 @@ final class MacLibraryViewModel {
self.serverURLString = userDefaults.string(forKey: Self.serverURLDefaultsKey)
?? ServerEnvironment.defaultLocalBaseURL.absoluteString
self.nowPlayingState = playbackController.nowPlayingState
self.playbackErrorMessage = Self.playbackErrorMessage(from: playbackController.nowPlayingState.error)
playbackController.onStateChange = { [weak self] state in
self?.nowPlayingState = state
self?.playbackErrorMessage = Self.playbackErrorMessage(from: state.error)
}
if let url = folderAccessService.storedFolderURL() {
@@ -215,10 +218,6 @@ final class MacLibraryViewModel {
}
}
var playbackErrorMessage: String? {
nowPlayingState.error?.errorDescription
}
func uploadSelectedTrack() async {
guard let selectedTrackID else {
lastUploadStatus = "Select a local track before uploading."
@@ -789,6 +788,10 @@ final class MacLibraryViewModel {
private static let deviceIdKey = "velody.device-id"
private static let bootstrapTokenKey = "velody.bootstrap-token"
private static let playbackSessionDefaultsKey = "velody.playback.session"
private static func playbackErrorMessage(from error: PlaybackError?) -> String? {
error?.errorDescription ?? error?.localizedDescription
}
}
private enum UploadOutcome {
@@ -803,7 +806,7 @@ private enum BackendConnectionError: LocalizedError {
var errorDescription: String? {
switch self {
case .invalidServerURL:
return "Enter a valid backend URL, such as http://localhost:3000."
return "Enter a valid backend URL, such as http://localhost:3007."
case .missingDeviceIdentity:
return "Register this Mac before uploading or sending a heartbeat."
}