AppState.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Foundation
  2. /// Persists app state (last playlist, last track, playback position) to UserDefaults.
  3. struct AppState {
  4. private static let defaults = UserDefaults.standard
  5. private static let keyLastPlaylistID = "appState.lastPlaylistID"
  6. private static let keyLastEntryID = "appState.lastEntryID"
  7. private static let keyLastTrackFilePath = "appState.lastTrackFilePath"
  8. private static let keyLastPlaybackTime = "appState.lastPlaybackTime"
  9. // MARK: - Save
  10. static func saveLastPlaylist(id: UUID) {
  11. defaults.set(id.uuidString, forKey: keyLastPlaylistID)
  12. }
  13. static func saveLastEntry(id: UUID) {
  14. defaults.set(id.uuidString, forKey: keyLastEntryID)
  15. }
  16. static func saveLastTrack(filePath: String) {
  17. defaults.set(filePath, forKey: keyLastTrackFilePath)
  18. }
  19. static func savePlaybackTime(_ time: TimeInterval) {
  20. defaults.set(time, forKey: keyLastPlaybackTime)
  21. }
  22. static func savePlaybackState(
  23. playlistID: UUID?,
  24. entryID: UUID?,
  25. trackFilePath: String?,
  26. playbackTime: TimeInterval
  27. ) {
  28. if let id = playlistID { saveLastPlaylist(id: id) }
  29. if let id = entryID { saveLastEntry(id: id) }
  30. if let path = trackFilePath { saveLastTrack(filePath: path) }
  31. savePlaybackTime(playbackTime)
  32. }
  33. // MARK: - Load
  34. static var lastPlaylistID: UUID? {
  35. defaults.string(forKey: keyLastPlaylistID).flatMap { UUID(uuidString: $0) }
  36. }
  37. static var lastEntryID: UUID? {
  38. defaults.string(forKey: keyLastEntryID).flatMap { UUID(uuidString: $0) }
  39. }
  40. static var lastTrackFilePath: String? {
  41. defaults.string(forKey: keyLastTrackFilePath)
  42. }
  43. static var lastPlaybackTime: TimeInterval {
  44. defaults.double(forKey: keyLastPlaybackTime)
  45. }
  46. }