mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
56 lines
1.2 KiB
Swift
56 lines
1.2 KiB
Swift
//
|
|
// QueueReducer.swift
|
|
// Persephone
|
|
//
|
|
// Created by Daniel Barber on 2019/4/21.
|
|
// Copyright © 2019 Dan Barber. All rights reserved.
|
|
//
|
|
|
|
import Cocoa
|
|
import ReSwift
|
|
|
|
func queueReducer(action: Action, state: QueueState?) -> QueueState {
|
|
var state = state ?? QueueState()
|
|
|
|
switch action {
|
|
case let action as UpdateQueueAction:
|
|
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[oldSongRowPos].isPlaying = false
|
|
}
|
|
if newSongRowPos >= 0 {
|
|
state.queue[newSongRowPos].isPlaying = true
|
|
}
|
|
|
|
DispatchQueue.main.async {
|
|
AppDelegate.store.dispatch(
|
|
UpdateCurrentSongAction(currentSong: state.queue[newSongRowPos].song)
|
|
)
|
|
}
|
|
|
|
case let action as UpdateQueuePlayerStateAction:
|
|
state.state = action.state
|
|
|
|
default:
|
|
break
|
|
}
|
|
|
|
return state
|
|
}
|