Compare commits

...

5 Commits

Author SHA1 Message Date
Jørgen Henrichsen 6cad96b4f8 Update podscpec
Bump version to 0.3.5
2018-10-22 14:20:40 +02:00
Jørgen Henrichsen 50a58c2306 Merge pull request #24 from jorgenhenrichsen/handle-remote-commands
Handle remote commands
2018-10-22 14:18:17 +02:00
Jørgen Henrichsen 2dbaf3d4dc Update Readme
Add description of how to override remote command handlers.
2018-10-22 10:11:04 +02:00
Jørgen Henrichsen 851d8704d9 Made remotecommandcontroller public. 2018-10-21 19:44:24 +02:00
Jørgen Henrichsen 7c4dc27868 Made it possible to override remote command handlers 2018-10-21 10:42:29 +02:00
7 changed files with 43 additions and 20 deletions
+5 -1
View File
@@ -13,7 +13,7 @@ import SwiftAudio
class AudioController {
static let shared = AudioController()
let player = QueuedAudioPlayer()
let player: QueuedAudioPlayer
let audioSessionController = AudioSessionController.shared
let sources: [AudioItem] = [
@@ -24,8 +24,12 @@ class AudioController {
]
init() {
let controller = RemoteCommandController()
player = QueuedAudioPlayer(remoteCommandController: controller)
player.remoteCommands = [
.stop,
.play,
.pause,
.togglePlayPause,
.next,
.previous,
+10
View File
@@ -103,6 +103,16 @@ These commands will be activated for each `AudioItem`. If you need some audio it
**Remember** to go to App Settings -> Capabilites -> Background Modes -> Check 'Remote notifications'
#### Custom handlers for remote commands
To supply custom handlers for your remote commands, just override the handlers contained in the player's `RemoteCommandController`:
```swift
let player = QueuedAudioPlayer()
player.remoteCommandController.handlePlayCommand = { (event) in
// Handle remote command here.
}
```
All available overrides can be found by looking at `RemoteCommandController`.
## Configuration
+1 -1
View File
@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = 'SwiftAudio'
s.version = '0.3.4'
s.version = '0.3.5'
s.summary = 'Easy audio streaming for iOS'
# This description is used to generate tags and improve search results.
+3 -3
View File
@@ -34,7 +34,7 @@ public class AudioPlayer: AVPlayerWrapperDelegate {
let wrapper: AVPlayerWrapper
let nowPlayingInfoController: NowPlayingInfoController
let remoteCommandController: RemoteCommandController
public let remoteCommandController: RemoteCommandController
var _currentItem: AudioItem?
@@ -130,10 +130,10 @@ public class AudioPlayer: AVPlayerWrapperDelegate {
- parameter infoCenter: The InfoCenter to update. Default is `MPNowPlayingInfoCenter.default()`.
*/
init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default()) {
init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default(), remoteCommandController: RemoteCommandController? = nil) {
self.wrapper = AVPlayerWrapper()
self.nowPlayingInfoController = NowPlayingInfoController(infoCenter: infoCenter)
self.remoteCommandController = RemoteCommandController()
self.remoteCommandController = remoteCommandController ?? RemoteCommandController()
self.wrapper.delegate = self
self.remoteCommandController.audioPlayer = self
+2 -2
View File
@@ -21,8 +21,8 @@ public class QueuedAudioPlayer: AudioPlayer {
*/
public var automaticallyPlayNextSong: Bool = true
public override init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default()) {
super.init(infoCenter: infoCenter)
public override init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default(), remoteCommandController: RemoteCommandController? = nil) {
super.init(infoCenter: infoCenter, remoteCommandController: remoteCommandController)
}
public override var currentItem: AudioItem? {
@@ -20,7 +20,7 @@ public class RemoteCommandController {
var commandTargetPointers: [String: Any] = [:]
init() {}
public init() {}
/**
Enable a set of RemoteCommands. Calling this will disable all earlier set commands, so include all commands that needs to be active.
@@ -62,7 +62,6 @@ public class RemoteCommandController {
case .changePlaybackPosition: self.enableCommand(ChangePlaybackPositionCommand.changePlaybackPosition)
case .skipForward(let preferredIntervals): self.enableCommand(SkipIntervalCommand.skipForward.set(preferredIntervals: preferredIntervals))
case .skipBackward(let preferredIntervals): self.enableCommand(SkipIntervalCommand.skipBackward.set(preferredIntervals: preferredIntervals))
}
}
@@ -82,7 +81,17 @@ public class RemoteCommandController {
// MARK: - Handlers
lazy var handlePlayCommand: RemoteCommandHandler = { (event) in
public lazy var handlePlayCommand: RemoteCommandHandler = self.handlePlayCommandDefault
public lazy var handlePauseCommand: RemoteCommandHandler = self.handlePauseCommandDefault
public lazy var handleStopCommand: RemoteCommandHandler = self.handleStopCommandDefault
public lazy var handleTogglePlayPauseCommand: RemoteCommandHandler = self.handleTogglePlayPauseCommandDefault
public lazy var handleSkipForwardCommand: RemoteCommandHandler = self.handleSkipForwardCommandDefault
public lazy var handleSkipBackwardCommand: RemoteCommandHandler = self.handleSkipBackwardDefault
public lazy var handleChangePlaybackPositionCommand: RemoteCommandHandler = self.handleChangePlaybackPositionCommandDefault
public lazy var handleNextTrackCommand: RemoteCommandHandler = self.handleNextTrackCommandDefault
public lazy var handlePreviousTrackCommand: RemoteCommandHandler = self.handlePreviousTrackCommandDefault
private func handlePlayCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let audioPlayer = self.audioPlayer {
do {
try audioPlayer.play()
@@ -95,7 +104,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handlePauseCommand: RemoteCommandHandler = { (event) in
private func handlePauseCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let audioPlayer = self.audioPlayer {
do {
try audioPlayer.pause()
@@ -108,7 +117,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleStopCommand: RemoteCommandHandler = { (event) in
private func handleStopCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let audioPlayer = self.audioPlayer {
audioPlayer.stop()
return .success
@@ -116,7 +125,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleTogglePlayPauseCommand: RemoteCommandHandler = { (event) in
private func handleTogglePlayPauseCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let audioPlayer = self.audioPlayer {
do {
try audioPlayer.togglePlaying()
@@ -129,7 +138,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleSkipForwardCommand: RemoteCommandHandler = { (event) in
private func handleSkipForwardCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let command = event.command as? MPSkipIntervalCommand,
let interval = command.preferredIntervals.first,
let audioPlayer = self.audioPlayer {
@@ -144,7 +153,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleSkipBackwardCommand: RemoteCommandHandler = { (event) in
private func handleSkipBackwardDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let command = event.command as? MPSkipIntervalCommand,
let interval = command.preferredIntervals.first,
let audioPlayer = self.audioPlayer {
@@ -159,7 +168,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleChangePlaybackPositionCommand: RemoteCommandHandler = { (event) in
private func handleChangePlaybackPositionCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let event = event as? MPChangePlaybackPositionCommandEvent,
let audioPlayer = self.audioPlayer {
do {
@@ -173,7 +182,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handleNextTrackCommand: RemoteCommandHandler = { (event) in
private func handleNextTrackCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let player = self.audioPlayer as? QueuedAudioPlayer {
do {
try player.next()
@@ -186,7 +195,7 @@ public class RemoteCommandController {
return MPRemoteCommandHandlerStatus.commandFailed
}
lazy var handlePreviousTrackCommand: RemoteCommandHandler = { (event) in
private func handlePreviousTrackCommandDefault(event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
if let player = self.audioPlayer as? QueuedAudioPlayer {
do {
try player.previous()
+2 -2
View File
@@ -13,8 +13,8 @@ import MediaPlayer
*/
public class SimpleAudioPlayer: AudioPlayer {
public override init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default()) {
super.init(infoCenter: infoCenter)
public override init(infoCenter: MPNowPlayingInfoCenter = MPNowPlayingInfoCenter.default(), remoteCommandController: RemoteCommandController? = nil) {
super.init(infoCenter: infoCenter, remoteCommandController: remoteCommandController)
}
/**