mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
64 lines
1.6 KiB
Swift
64 lines
1.6 KiB
Swift
//
|
|
// ArtistViewController.swift
|
|
// Persephone
|
|
//
|
|
// Created by Daniel Barber on 2019/9/20.
|
|
// Copyright © 2019 Dan Barber. All rights reserved.
|
|
//
|
|
|
|
import AppKit
|
|
import ReSwift
|
|
import Differ
|
|
|
|
class ArtistViewController: NSViewController,
|
|
NSCollectionViewDelegateFlowLayout {
|
|
var dataSource = ArtistDataSource()
|
|
let layout = FlexibleGridViewLayout(coder: NSCoder())
|
|
|
|
@IBOutlet var artistCollectionView: NSCollectionView!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
App.store.subscribe(self) {
|
|
$0.select { $0.artistListState }
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(didConnect), name: .didConnect, object: nil)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(willDisconnect), name: .willDisconnect, object: nil)
|
|
|
|
artistCollectionView.dataSource = dataSource
|
|
layout?.extraHeight = 26
|
|
artistCollectionView.collectionViewLayout = layout
|
|
}
|
|
|
|
deinit {
|
|
App.store.unsubscribe(self)
|
|
}
|
|
|
|
@objc func didConnect() {
|
|
App.mpdClient.fetchAllArtists()
|
|
}
|
|
|
|
@objc func willDisconnect() {
|
|
DispatchQueue.main.async {
|
|
App.store.dispatch(UpdateArtistListAction(artists: []))
|
|
}
|
|
}
|
|
}
|
|
|
|
extension ArtistViewController: StoreSubscriber {
|
|
typealias StoreSubscriberStateType = ArtistListState
|
|
|
|
func newState(state: StoreSubscriberStateType) {
|
|
let oldArtists = dataSource.artists
|
|
|
|
dataSource.artists = state.artists
|
|
|
|
artistCollectionView.animateItemChanges(
|
|
oldData: oldArtists,
|
|
newData: dataSource.artists
|
|
)
|
|
}
|
|
}
|