From 0e018a79dd53dc20a38fa00e8979609980dd9610 Mon Sep 17 00:00:00 2001 From: Laurent Date: Sat, 30 May 2026 18:07:46 +0200 Subject: [PATCH] feat: add LibraryViewModel.applyTrackEdits --- Music/ViewModels/LibraryViewModel.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Music/ViewModels/LibraryViewModel.swift b/Music/ViewModels/LibraryViewModel.swift index aa705ff..f6be2db 100644 --- a/Music/ViewModels/LibraryViewModel.swift +++ b/Music/ViewModels/LibraryViewModel.swift @@ -11,14 +11,29 @@ final class LibraryViewModel { var trackCount = 0 private let db: DatabaseService + private let editService: TrackEditService private var cancellable: AnyDatabaseCancellable? private var searchTask: Task? init(db: DatabaseService) { self.db = db + self.editService = TrackEditService(database: db) updateQuery() } + // Applies metadata edits to one or more tracks. File-tag writes run off the + // main actor; the library list refreshes automatically via the DB observation + // (no manual reload). Returns per-track warnings (unsupported format / file + // write failure) for the caller to surface; the DB edit always lands. + func applyTrackEdits( + _ values: EditableTrackFields, + editing edited: Set, + to tracks: [Track] + ) async -> [TrackEditWarning] { + let service = editService + return await Task.detached { service.save(values, editing: edited, to: tracks) }.value + } + func search(_ text: String) { searchText = text searchTask?.cancel()