From 839ec53c17372a4502d901fd0f24cec681f600c2 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Fri, 20 Jun 2025 19:03:33 -0700 Subject: [PATCH] fix volume slider --- QueueCube/Views/MainView.swift | 20 ++++++++++++++++---- QueueCube/Views/NowPlayingView.swift | 3 --- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/QueueCube/Views/MainView.swift b/QueueCube/Views/MainView.swift index 9d4c806..eb501b6 100644 --- a/QueueCube/Views/MainView.swift +++ b/QueueCube/Views/MainView.swift @@ -38,6 +38,7 @@ class MainViewModel init() { observePlaylistChanges() + observeNowPlayingModel() configureViewModelCallbacks() } @@ -77,10 +78,6 @@ class MainViewModel try await api.previous() } - nowPlayingViewModel.onVolumeChange = apiCallback { model, api in - try await api.setVolume(model.volume) - } - nowPlayingViewModel.onSheetDismiss = { [weak self] _ in self?.isNowPlayingSheetPresented = false } @@ -148,6 +145,21 @@ class MainViewModel } } + func observeNowPlayingModel() { + withObservationTracking { + _ = nowPlayingViewModel.volume + } onChange: { [weak self] in + Task { + guard let self else { return } + await self.withModificationsViaAPI { api in + try await api.setVolume(self.nowPlayingViewModel.volume) + } + + await MainActor.run { self.observeNowPlayingModel() } + } + } + } + func withModificationsViaAPI(_ modificationBlock: (API) async throws -> Void) async { guard let api = selectedServer?.api else { return } diff --git a/QueueCube/Views/NowPlayingView.swift b/QueueCube/Views/NowPlayingView.swift index 66e855e..3de33fc 100644 --- a/QueueCube/Views/NowPlayingView.swift +++ b/QueueCube/Views/NowPlayingView.swift @@ -14,7 +14,6 @@ class NowPlayingViewModel var onStop: (NowPlayingViewModel) -> Void = { _ in } var onNext: (NowPlayingViewModel) -> Void = { _ in } var onPrev: (NowPlayingViewModel) -> Void = { _ in } - var onVolumeChange: (NowPlayingViewModel) -> Void = { _ in } var onSheetDismiss: (NowPlayingViewModel) -> Void = { _ in } var isPlaying: Bool = false @@ -94,8 +93,6 @@ struct NowPlayingView: View model.settingVolume = model.volume model.isSettingVolume = editing } - - model.onVolumeChange(model) } ) .padding(.horizontal, 18.0)