1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00
persephone/Persephone/State/Reducers/QueueReducer.swift

64 lines
1.4 KiB
Swift

//
// QueueReducer.swift
// Persephone
//
// Created by Daniel Barber on 2019/4/21.
// Copyright © 2019 Dan Barber. All rights reserved.
//
import AppKit
import ReSwift
func queueReducer(action: Action, state: QueueState?) -> QueueState {
var state = state ?? QueueState()
switch action {
case let action as UpdateQueueAction:
if state.queuePos >= action.queue.count {
state.queuePos = -1
}
state.queue = action.queue.enumerated().map { index, mpdSong in
let song = Song(mpdSong: mpdSong)
return QueueItem(
song: song,
queuePos: index,
isPlaying: index == state.queuePos
)
}
case let action as UpdateQueuePosAction:
let oldSongRowPos = state.queuePos
let newSongRowPos = action.queuePos
state.queuePos = action.queuePos
if oldSongRowPos >= 0 && state.queue.count > 0 {
state.queue[oldSongRowPos].isPlaying = false
}
if newSongRowPos >= 0 && state.queue.count > newSongRowPos {
state.queue[newSongRowPos].isPlaying = true
DispatchQueue.main.async {
App.store.dispatch(
UpdateCurrentSongAction(currentSong: state.queue[newSongRowPos].song)
)
}
} else {
DispatchQueue.main.async {
App.store.dispatch(
UpdateCurrentSongAction(currentSong: nil)
)
}
}
case let action as UpdateQueuePlayerStateAction:
state.state = action.state
default:
break
}
return state
}