damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

MusicController.swift (1319B)


      1 //
      2 //  MusicController.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2023-08-21.
      6 //
      7 import SwiftUI
      8 import MediaPlayer
      9 
     10 enum MusicState {
     11     case playback_state(MPMusicPlaybackState)
     12     case song(MPMediaItem?)
     13 }
     14 
     15 class MusicController {
     16     let player: MPMusicPlayerController
     17 
     18     let onChange: (MusicState) -> ()
     19 
     20     init(onChange: @escaping (MusicState) -> ()) {
     21         player = .systemMusicPlayer
     22 
     23         player.beginGeneratingPlaybackNotifications()
     24 
     25         self.onChange = onChange
     26 
     27         print("Playback State: \(player.playbackState)")
     28         print("Now Playing Item: \(player.nowPlayingItem?.title ?? "None")")
     29 
     30         NotificationCenter.default.addObserver(self, selector: #selector(self.songChanged(notification:)), name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: player)
     31 
     32         NotificationCenter.default.addObserver(self, selector: #selector(self.playbackStatusChanged(notification:)), name: .MPMusicPlayerControllerPlaybackStateDidChange, object: player)
     33     }
     34 
     35     deinit {
     36         print("deinit musiccontroller")
     37     }
     38 
     39     @objc
     40     func songChanged(notification: Notification) {
     41         onChange(.song(player.nowPlayingItem))
     42     }
     43 
     44     @objc
     45     func playbackStatusChanged(notification: Notification) {
     46         onChange(.playback_state(player.playbackState))
     47     }
     48 }