61 lines
1.7 KiB
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()
|
|
}
|
|
}
|