Skip to content

Commit

Permalink
Add bitfields for supported features
Browse files Browse the repository at this point in the history
  • Loading branch information
robbiet480 committed Sep 24, 2016
1 parent 2107d57 commit acc4e84
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 3 deletions.
17 changes: 17 additions & 0 deletions HomeAssistant/FanComponent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,32 @@ class Fan: Entity {

dynamic var Oscillating = false
dynamic var Speed: String? = nil
dynamic var SupportsSetSpeed: Bool = false
dynamic var SupportsOscillate: Bool = false

override func mapping(map: Map) {
super.mapping(map: map)

Oscillating <- map["attributes.oscillating"]
Speed <- map["attributes.speed"]

let features = FanSupportedFeatures(rawValue: map["attributes.supported_features"].value()!)
self.SupportsSetSpeed = features.contains(.SetSpeed)
self.SupportsOscillate = features.contains(.Oscillate)
}

override var ComponentIcon: String {
return "mdi:fan"
}

override class func ignoredProperties() -> [String] {
return ["SupportsSetSpeed", "SupportsOscillate"]
}
}

struct FanSupportedFeatures: OptionSet {
let rawValue: Int

static let SetSpeed = FanSupportedFeatures(rawValue: 1)
static let Oscillate = FanSupportedFeatures(rawValue: 2)
}
34 changes: 32 additions & 2 deletions HomeAssistant/LightComponent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,31 @@ class Light: SwitchableEntity {
var Brightness = RealmOptional<Float>()
var ColorTemp = RealmOptional<Float>()
dynamic var RGBColor: [Int]?
dynamic var XYColor: [Int]?
dynamic var SupportsBrightness: Bool = false
dynamic var SupportsColorTemp: Bool = false
dynamic var SupportsEffect: Bool = false
dynamic var SupportsFlash: Bool = false
dynamic var SupportsRGBColor: Bool = false
dynamic var SupportsTransition: Bool = false
dynamic var SupportsXYColor: Bool = false

override func mapping(map: Map) {
super.mapping(map: map)

Brightness.value <- map["attributes.brightness"]
ColorTemp.value <- map["attributes.color_temp"]
RGBColor <- map["attributes.rgb_color"]
RGBColor <- map["attributes.rgb_color"]
XYColor <- map["attributes.xy_color"]

let features = LightSupportedFeatures(rawValue: map["attributes.supported_features"].value()!)
self.SupportsBrightness = features.contains(.Brightness)
self.SupportsColorTemp = features.contains(.ColorTemp)
self.SupportsEffect = features.contains(.Effect)
self.SupportsFlash = features.contains(.Flash)
self.SupportsRGBColor = features.contains(.RGBColor)
self.SupportsTransition = features.contains(.Transition)
self.SupportsXYColor = features.contains(.XYColor)
}

override func EntityColor() -> UIColor {
Expand All @@ -45,6 +63,18 @@ class Light: SwitchableEntity {
}

override class func ignoredProperties() -> [String] {
return ["RGBColor"]
return ["SupportsBrightness", "SupportsColorTemp", "SupportsEffect", "SupportsFlash", "SupportsRGBColor", "SupportsTransition", "SupportsXYColor", "RGBColor", "XYColor"]
}
}

struct LightSupportedFeatures: OptionSet {
let rawValue: Int

static let Brightness = LightSupportedFeatures(rawValue: 1)
static let ColorTemp = LightSupportedFeatures(rawValue: 2)
static let Effect = LightSupportedFeatures(rawValue: 4)
static let Flash = LightSupportedFeatures(rawValue: 8)
static let RGBColor = LightSupportedFeatures(rawValue: 16)
static let Transition = LightSupportedFeatures(rawValue: 32)
static let XYColor = LightSupportedFeatures(rawValue: 64)
}
48 changes: 47 additions & 1 deletion HomeAssistant/MediaPlayerComponent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@ class MediaPlayer: SwitchableEntity {
dynamic var Source: String? = nil
dynamic var SourceList: [String] = [String]()
let StoredSourceList = List<StringObject>()
dynamic var SupportsPause: Bool = false
dynamic var SupportsSeek: Bool = false
dynamic var SupportsVolumeSet: Bool = false
dynamic var SupportsVolumeMute: Bool = false
dynamic var SupportsPreviousTrack: Bool = false
dynamic var SupportsNextTrack: Bool = false
dynamic var SupportsTurnOn: Bool = false
dynamic var SupportsTurnOff: Bool = false
dynamic var SupportsPlayMedia: Bool = false
dynamic var SupportsVolumeStep: Bool = false
dynamic var SupportsSelectSource: Bool = false
dynamic var SupportsStop: Bool = false
dynamic var SupportsClearPlaylist: Bool = false


override func mapping(map: Map) {
Expand All @@ -46,10 +59,25 @@ class MediaPlayer: SwitchableEntity {
value.value = option
self.StoredSourceList.append(value)
}

let features = MediaPlayerSupportedCommands(rawValue: map["attributes.supported_media_commands"].value()!)
self.SupportsPause = features.contains(.Pause)
self.SupportsSeek = features.contains(.Seek)
self.SupportsVolumeSet = features.contains(.VolumeSet)
self.SupportsVolumeMute = features.contains(.VolumeMute)
self.SupportsPreviousTrack = features.contains(.PreviousTrack)
self.SupportsNextTrack = features.contains(.NextTrack)
self.SupportsTurnOn = features.contains(.TurnOn)
self.SupportsTurnOff = features.contains(.TurnOff)
self.SupportsPlayMedia = features.contains(.PlayMedia)
self.SupportsVolumeStep = features.contains(.VolumeStep)
self.SupportsSelectSource = features.contains(.SelectSource)
self.SupportsStop = features.contains(.Stop)
self.SupportsClearPlaylist = features.contains(.ClearPlaylist)
}

override class func ignoredProperties() -> [String] {
return ["SourceList"]
return ["SourceList", "SupportsPause", "SupportsSeek", "SupportsVolumeSet", "SupportsVolumeMute", "SupportsPreviousTrack", "SupportsNextTrack", "SupportsTurnOn", "SupportsTurnOff", "SupportsPlayMedia", "SupportsVolumeStep", "SupportsSelectSource", "SupportsStop", "SupportsClearPlaylist"]
}

func humanReadableMediaDuration() -> String {
Expand Down Expand Up @@ -82,3 +110,21 @@ class MediaPlayer: SwitchableEntity {
return (self.State != "off" && self.State != "idle") ? "mdi:cast-connected" : "mdi:cast"
}
}

struct MediaPlayerSupportedCommands: OptionSet {
let rawValue: Int

static let Pause = MediaPlayerSupportedCommands(rawValue: 1)
static let Seek = MediaPlayerSupportedCommands(rawValue: 2)
static let VolumeSet = MediaPlayerSupportedCommands(rawValue: 4)
static let VolumeMute = MediaPlayerSupportedCommands(rawValue: 8)
static let PreviousTrack = MediaPlayerSupportedCommands(rawValue: 16)
static let NextTrack = MediaPlayerSupportedCommands(rawValue: 32)
static let TurnOn = MediaPlayerSupportedCommands(rawValue: 128)
static let TurnOff = MediaPlayerSupportedCommands(rawValue: 256)
static let PlayMedia = MediaPlayerSupportedCommands(rawValue: 512)
static let VolumeStep = MediaPlayerSupportedCommands(rawValue: 1024)
static let SelectSource = MediaPlayerSupportedCommands(rawValue: 2048)
static let Stop = MediaPlayerSupportedCommands(rawValue: 4096)
static let ClearPlaylist = MediaPlayerSupportedCommands(rawValue: 8192)
}

0 comments on commit acc4e84

Please sign in to comment.