From 022fa187e3996d784dead34a586bf46af5325a67 Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Sun, 3 Aug 2025 22:10:22 +0530 Subject: [PATCH] Fix: Timeline Slider for NowPlaying --- .../NowPlayingController.swift | 8 +++-- DynamicIsland/managers/MusicManager.swift | 34 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/DynamicIsland/MediaControllers/NowPlayingController.swift b/DynamicIsland/MediaControllers/NowPlayingController.swift index bea429a..69b754e 100644 --- a/DynamicIsland/MediaControllers/NowPlayingController.swift +++ b/DynamicIsland/MediaControllers/NowPlayingController.swift @@ -134,14 +134,16 @@ final class NowPlayingController: ObservableObject, MediaControllerProtocol { private func setupNowPlayingObserver() { let process = Process() guard - let scriptURL = Bundle.main.url(forResource: "mediaremote-adapter", withExtension: "pl"), - let frameworkPath = Bundle.main.privateFrameworksPath?.appending("/MediaRemoteAdapter.framework") + let scriptURL = Bundle.main.url(forResource: "mediaremote-adapter", withExtension: "pl") else { - print("⚠️ Could not find mediaremote-adapter.pl script or framework path - NowPlaying controller disabled") + print("⚠️ Could not find mediaremote-adapter.pl script - NowPlaying controller disabled") isResourcesAvailable = false return } + let bundlePath = Bundle.main.bundlePath + let frameworkPath = bundlePath + "/Contents/Frameworks/MediaRemoteAdapter.framework" + isResourcesAvailable = true process.executableURL = URL(fileURLWithPath: "/usr/bin/perl") process.arguments = [scriptURL.path, frameworkPath, "stream"] diff --git a/DynamicIsland/managers/MusicManager.swift b/DynamicIsland/managers/MusicManager.swift index b7e9314..cf141ca 100644 --- a/DynamicIsland/managers/MusicManager.swift +++ b/DynamicIsland/managers/MusicManager.swift @@ -265,6 +265,15 @@ class MusicManager: ObservableObject { self.bundleIdentifier = state.bundleIdentifier } + // Update shuffle and repeat state from controller + if state.isShuffled != self.isShuffled { + self.isShuffled = state.isShuffled + } + + if state.repeatMode != self.repeatMode { + self.repeatMode = state.repeatMode + } + self.timestampDate = state.lastUpdated } @@ -377,13 +386,38 @@ class MusicManager: ObservableObject { func toggleShuffle() { Task { + // Provide immediate UI feedback + await MainActor.run { + self.isShuffled.toggle() + } + + // Execute the actual command await activeController?.toggleShuffle() + + // Note: The actual state will be updated when the controller reports back + // via updateFromPlaybackState if the command provides status feedback } } func toggleRepeat() { Task { + // Provide immediate UI feedback + await MainActor.run { + switch self.repeatMode { + case .off: + self.repeatMode = .all + case .all: + self.repeatMode = .one + case .one: + self.repeatMode = .off + } + } + + // Execute the actual command await activeController?.toggleRepeat() + + // Note: The actual state will be updated when the controller reports back + // via updateFromPlaybackState if the command provides status feedback } }