Skip to content

Commit

Permalink
dont force unwrap cachedentities
Browse files Browse the repository at this point in the history
  • Loading branch information
robbiet480 committed Apr 11, 2017
1 parent 1fb73f2 commit f6529b8
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 87 deletions.
62 changes: 32 additions & 30 deletions HomeAssistant/HAAPI.swift
Expand Up @@ -286,40 +286,42 @@ public class HomeAssistantAPI {
Crashlytics.sharedInstance().recordError(error)
}

if let zoneEntities: [Zone] = HomeAssistantAPI.sharedInstance.cachedEntities!.filter({ (entity) -> Bool in
return entity.Domain == "zone"
// swiftlint:disable:next force_cast
}) as? [Zone] {
for zone in zoneEntities {
if zone.TrackingEnabled == false {
print("Skipping zone set to not track!")
continue
}
do {
try Location.monitor(regionAt: zone.locationCoordinates(), radius: zone.Radius, enter: { _ in
print("Entered in region!")
self.submitLocation(updateType: LocationUpdateTypes.RegionEnter,
coordinates: zone.locationCoordinates(),
accuracy: 1,
zone: zone)
}, exit: { _ in
print("Exited from the region")
self.submitLocation(updateType: LocationUpdateTypes.RegionExit,
coordinates: zone.locationCoordinates(),
accuracy: 1,
zone: zone)
}, error: { req, error in
CLSLogv("Error in region monitoring: %@", getVaList([error.localizedDescription]))
if let cachedEntities = HomeAssistantAPI.sharedInstance.cachedEntities {
if let zoneEntities: [Zone] = cachedEntities.filter({ (entity) -> Bool in
return entity.Domain == "zone"
// swiftlint:disable:next force_cast
}) as? [Zone] {
for zone in zoneEntities {
if zone.TrackingEnabled == false {
print("Skipping zone set to not track!")
continue
}
do {
try Location.monitor(regionAt: zone.locationCoordinates(), radius: zone.Radius, enter: { _ in
print("Entered in region!")
self.submitLocation(updateType: LocationUpdateTypes.RegionEnter,
coordinates: zone.locationCoordinates(),
accuracy: 1,
zone: zone)
}, exit: { _ in
print("Exited from the region")
self.submitLocation(updateType: LocationUpdateTypes.RegionExit,
coordinates: zone.locationCoordinates(),
accuracy: 1,
zone: zone)
}, error: { req, error in
CLSLogv("Error in region monitoring: %@", getVaList([error.localizedDescription]))
Crashlytics.sharedInstance().recordError(error)
req.cancel()
})
} catch let error {
CLSLogv("Error when setting up zones for tracking: %@", getVaList([error.localizedDescription]))
Crashlytics.sharedInstance().recordError(error)
req.cancel()
})
} catch let error {
CLSLogv("Error when setting up zones for tracking: %@", getVaList([error.localizedDescription]))
Crashlytics.sharedInstance().recordError(error)
}
}
}
}

}
// let location = Location()
//
// self.getBeacons().then { beacons -> Void in
Expand Down
68 changes: 33 additions & 35 deletions HomeAssistant/Views/DevicesMapViewController.swift
Expand Up @@ -77,43 +77,41 @@ class DevicesMapViewController: UIViewController, MKMapViewDelegate {

self.setToolbarItems([locateMeButton, flexibleSpace, segmentedControlButtonItem, flexibleSpace], animated: true)

if let zoneEntities: [Zone] = HomeAssistantAPI.sharedInstance.cachedEntities!.filter({ (entity) -> Bool in
return entity.Domain == "zone"
}) as? [Zone] {
for zone in zoneEntities {
let circle = HACircle.init(center: zone.locationCoordinates(), radius: CLLocationDistance(zone.Radius))
circle.type = "zone"
mapView.add(circle)
}
}

// swiftlint:disable:next line_length
if let deviceEntities: [DeviceTracker] = HomeAssistantAPI.sharedInstance.cachedEntities!.filter({ (entity) -> Bool in
return entity.Domain == "device_tracker"
}) as? [DeviceTracker] {
for device in deviceEntities {
if device.Latitude.value == nil || device.Longitude.value == nil {
continue
}
let dropPin = DeviceAnnotation()
dropPin.coordinate = device.locationCoordinates()
dropPin.title = device.Name
var subtitlePieces: [String] = []
// if let changedTime = device.LastChanged {
// subtitlePieces.append("Last seen: "+changedTime.toRelativeString(abbreviated: true,
// maxUnits: 1)!+" ago")
// }
if let battery = device.Battery.value {
subtitlePieces.append("Battery: "+String(battery)+"%")
if let cachedEntities = HomeAssistantAPI.sharedInstance.cachedEntities {
if let zoneEntities: [Zone] = cachedEntities.filter({ (entity) -> Bool in
return entity.Domain == "zone"
}) as? [Zone] {
for zone in zoneEntities {
// swiftlint:disable:next line_length
let circle = HACircle.init(center: zone.locationCoordinates(), radius: CLLocationDistance(zone.Radius))
circle.type = "zone"
mapView.add(circle)
}
dropPin.subtitle = subtitlePieces.joined(separator: " / ")
dropPin.device = device
mapView.addAnnotation(dropPin)
}

if let radius = device.GPSAccuracy.value {
let circle = HACircle.init(center: device.locationCoordinates(), radius: radius)
circle.type = "device"
mapView.add(circle)
if let deviceEntities: [DeviceTracker] = cachedEntities.filter({ (entity) -> Bool in
return entity.Domain == "device_tracker"
}) as? [DeviceTracker] {
for device in deviceEntities {
if device.Latitude.value == nil || device.Longitude.value == nil {
continue
}
let dropPin = DeviceAnnotation()
dropPin.coordinate = device.locationCoordinates()
dropPin.title = device.Name
var subtitlePieces: [String] = []
if let battery = device.Battery.value {
subtitlePieces.append("Battery: "+String(battery)+"%")
}
dropPin.subtitle = subtitlePieces.joined(separator: " / ")
dropPin.device = device
mapView.addAnnotation(dropPin)

if let radius = device.GPSAccuracy.value {
let circle = HACircle.init(center: device.locationCoordinates(), radius: radius)
circle.type = "device"
mapView.add(circle)
}
}
}
}
Expand Down
48 changes: 26 additions & 22 deletions HomeAssistant/Views/SettingsDetailViewController.swift
Expand Up @@ -44,32 +44,36 @@ class SettingsDetailViewController: FormViewController {
// }
case "location":
self.title = "Location Settings"
if let zoneEntities: [Zone] = HomeAssistantAPI.sharedInstance.cachedEntities!.filter({ (entity) -> Bool in
return entity.Domain == "zone"
}) as? [Zone] {
for zone in zoneEntities {
self.form
+++ Section(header: zone.Name, footer: "") {
$0.tag = zone.ID
if let cachedEntities = HomeAssistantAPI.sharedInstance.cachedEntities {
if let zoneEntities: [Zone] = cachedEntities.filter({ (entity) -> Bool in
return entity.Domain == "zone"
}) as? [Zone] {
for zone in zoneEntities {
self.form
+++ Section(header: zone.Name, footer: "") {
$0.tag = zone.ID
}
<<< SwitchRow {
$0.title = "Enter/exit tracked"
$0.value = zone.TrackingEnabled
$0.disabled = Condition(booleanLiteral: true)
}
<<< LocationRow {
$0.title = "Location"
$0.value = zone.location()
}
<<< LabelRow {
$0.title = "Radius"
$0.value = "\(Int(zone.Radius)) m"
}
<<< SwitchRow {
$0.title = "Enter/exit tracked"
$0.value = zone.TrackingEnabled
$0.disabled = Condition(booleanLiteral: true)
}
<<< LocationRow {
$0.title = "Location"
$0.value = zone.location()
}
<<< LabelRow {
$0.title = "Radius"
$0.value = "\(Int(zone.Radius)) m"
}
if zoneEntities.count > 0 {
self.form
+++ Section(header: "",
footer: "To enable location tracking add track_ios: true to each zone")
}
}
}
self.form
+++ Section(header: "",
footer: "To enable location tracking add track_ios: true to each zone")

case "notifications":
self.title = "Notification Settings"
Expand Down

0 comments on commit f6529b8

Please sign in to comment.