jellyflood/JellyfinPlayer/OpenCastSwift/Models/CastMediaStatus.swift

61 lines
1.7 KiB
Swift

//
// CastMediaStatus.swift
// OpenCastSwift
//
// Created by Miles Hollingsworth on 4/22/18
// Copyright © 2018 Miles Hollingsworth. All rights reserved.
//
import Foundation
import SwiftyJSON
public enum CastMediaPlayerState: String {
case buffering = "BUFFERING"
case playing = "PLAYING"
case paused = "PAUSED"
case stopped = "STOPPED"
}
public final class CastMediaStatus: NSObject {
public let mediaSessionId: Int
public let playbackRate: Int
public let playerState: CastMediaPlayerState
public let currentTime: Double
public let metadata: JSON?
public let contentID: String?
private let createdDate = Date()
public var adjustedCurrentTime: Double {
return currentTime - Double(playbackRate)*createdDate.timeIntervalSinceNow
}
public var state: String {
return playerState.rawValue
}
public override var description: String {
return "MediaStatus(mediaSessionId: \(mediaSessionId), playbackRate: \(playbackRate), playerState: \(playerState.rawValue), currentTime: \(currentTime))"
}
init(json: JSON) {
mediaSessionId = json[CastJSONPayloadKeys.mediaSessionId].int ?? 0
playbackRate = json[CastJSONPayloadKeys.playbackRate].int ?? 1
playerState = json[CastJSONPayloadKeys.playerState].string.flatMap(CastMediaPlayerState.init) ?? .buffering
currentTime = json[CastJSONPayloadKeys.currentTime].double ?? 0
metadata = json[CastJSONPayloadKeys.media][CastJSONPayloadKeys.metadata]
if let contentID = json[CastJSONPayloadKeys.media][CastJSONPayloadKeys.contentId].string, let data = contentID.data(using: .utf8) {
self.contentID = (try? JSON(data: data))?[CastJSONPayloadKeys.contentId].string ?? contentID
} else {
contentID = nil
}
super.init()
}
}