mirror of
https://github.com/danbee/persephone
synced 2025-03-04 08:39:11 +00:00
1. Move all the mpdClient actions into a reducer. 2. Move global stuff into their own global struct
53 lines
1.2 KiB
Swift
53 lines
1.2 KiB
Swift
//
|
|
// TrackTimer.swift
|
|
// Persephone
|
|
//
|
|
// Created by Daniel Barber on 2019/4/19.
|
|
// Copyright © 2019 Dan Barber. All rights reserved.
|
|
//
|
|
|
|
import AppKit
|
|
|
|
class TrackTimer: NSObject {
|
|
var timer: Timer?
|
|
var startTime: CFTimeInterval = CACurrentMediaTime()
|
|
var startElapsed: Double = 0
|
|
|
|
func start(elapsedTimeMs: UInt?) {
|
|
guard let elapsedTimeMs = elapsedTimeMs else { return }
|
|
|
|
startTime = CACurrentMediaTime()
|
|
startElapsed = Double(elapsedTimeMs) / 1000
|
|
|
|
DispatchQueue.main.async {
|
|
self.timer?.invalidate()
|
|
|
|
self.timer = Timer.scheduledTimer(
|
|
withTimeInterval: 0.25,
|
|
repeats: true
|
|
) { _ in
|
|
let currentTime = CACurrentMediaTime()
|
|
|
|
let timeDiff = currentTime - self.startTime
|
|
let newElapsedTimeMs = UInt((self.startElapsed + timeDiff) * 1000)
|
|
|
|
App.store.dispatch(
|
|
UpdateElapsedTimeAction(elapsedTimeMs: newElapsedTimeMs)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
func stop(elapsedTimeMs: UInt?) {
|
|
guard let elapsedTimeMs = elapsedTimeMs else { return }
|
|
|
|
DispatchQueue.main.async {
|
|
self.timer?.invalidate()
|
|
|
|
App.store.dispatch(
|
|
UpdateElapsedTimeAction(elapsedTimeMs: elapsedTimeMs)
|
|
)
|
|
}
|
|
}
|
|
}
|