Skip to content

Commit 09b6c6c

Browse files
Fix toggle
Put version check after async menu population
1 parent c844e46 commit 09b6c6c

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

HA Menu/MenuItemController.swift

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,16 @@ final class MenuItemController: NSObject, NSMenuDelegate {
5353

5454
public func menuWillOpen(_ menu: NSMenu){
5555
self.removeDynamicMenuItems()
56-
self.addDynamicMenuItems()
57-
self.checkForUpdate()
56+
57+
self.addDynamicMenuItems(){
58+
result in
59+
switch result {
60+
case .success( _):
61+
self.checkForUpdate()
62+
case .failure( _):
63+
break
64+
}
65+
}
5866
}
5967

6068
public func menuDidClose(_ menu: NSMenu){
@@ -107,7 +115,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
107115
}
108116
}
109117

110-
func addDynamicMenuItems() {
118+
func addDynamicMenuItems(completionHandler: @escaping (Result<Bool, HaService.HaServiceApiError>) -> Void) {
111119
haService.getStates() {
112120
result in
113121
switch result {
@@ -131,6 +139,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
131139
self.addMenuItem(menuItem: menuItem)
132140
}
133141
}
142+
completionHandler(.success(true))
134143

135144
case .failure(let haServiceApiError):
136145
switch haServiceApiError {
@@ -147,8 +156,9 @@ final class MenuItemController: NSObject, NSMenuDelegate {
147156
case .JSONDecodeError:
148157
self.addErrorMenuItem(message: "Error Decoding JSON")
149158
case .UnknownError:
150-
self.addErrorMenuItem(message: "Unknown Error")
159+
self.addErrorMenuItem(message: "Unknown Error (check your server/port)")
151160
}
161+
completionHandler(.failure(haServiceApiError))
152162
break
153163
}
154164
}
@@ -158,7 +168,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
158168
switch menuItem.itemType {
159169
case itemTypes.Domain:
160170
let domainItems = self.haService.filterEntities(entityDomain: menuItem.entityId)
161-
self.addEntitiesToMenu(menuItem: menuItem, entities: domainItems)
171+
self.addMenuItem(menuItem: menuItem, entities: domainItems)
162172
case itemTypes.Group:
163173
self.haService.getState(entityId: "group.\(menuItem.entityId)") { result in
164174
switch result {
@@ -213,7 +223,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
213223

214224
entities = entities.reversed()
215225

216-
self.addEntitiesToMenu(menuItem: menuItem, entities: entities)
226+
self.addMenuItem(menuItem: menuItem, entities: entities)
217227

218228
break
219229
case .failure( _):
@@ -224,7 +234,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
224234

225235
}
226236

227-
func addEntitiesToMenu(menuItem: PrefMenuItem, entities: [HaEntity]) {
237+
func addMenuItem(menuItem: PrefMenuItem, entities: [HaEntity]) {
228238
DispatchQueue.main.async {
229239

230240
if entities.count == 0 {
@@ -258,7 +268,7 @@ final class MenuItemController: NSObject, NSMenuDelegate {
258268

259269
func addEntityMenuItem(parent: NSMenu, haEntity: HaEntity) {
260270

261-
if haEntity.domain == EntityDomains.inputSelectDomain {
271+
if haEntity.domainType == EntityDomains.inputSelectDomain {
262272
let inputSelectMenuItem = NSMenuItem()
263273
inputSelectMenuItem.title = haEntity.friendlyName
264274
inputSelectMenuItem.tag = haEntity.type.rawValue

HA Menu/Models/HaEntity.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct HaEntity {
3535
var state: String
3636
var options: [String]
3737

38-
var domain: EntityDomains {
38+
var domainType: EntityDomains {
3939
get {
4040
switch entityId.components(separatedBy: ".")[0]{
4141
case EntityDomains.switchDomain.rawValue:
@@ -56,9 +56,15 @@ struct HaEntity {
5656
}
5757
}
5858

59+
var domain: String {
60+
get {
61+
return entityId.components(separatedBy: ".")[0]
62+
}
63+
}
64+
5965
var type: EntityTypes {
6066
get {
61-
switch domain{
67+
switch domainType{
6268
case EntityDomains.switchDomain:
6369
return EntityTypes.switchType
6470
case EntityDomains.lightDomain:

HA Menu/Models/HaService.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class HaService {
4040
return request
4141
}
4242

43-
func getStates(completionHandler: @escaping (Result<Int, HaServiceApiError>) -> Void) {
43+
func getStates(completionHandler: @escaping (Result<Bool, HaServiceApiError>) -> Void) {
4444

4545
if (prefs.server.count == 0 ) {
4646
completionHandler(.failure(.URLMissing))
@@ -76,7 +76,7 @@ class HaService {
7676
let decodedResponse = try JSONDecoder().decode([HaState].self, from: data)
7777
self.haStates = decodedResponse
7878

79-
completionHandler(.success(1))
79+
completionHandler(.success(true))
8080

8181
} catch {
8282
completionHandler(.failure(.JSONDecodeError))
@@ -120,8 +120,9 @@ class HaService {
120120

121121
func toggleEntityState(haEntity: HaEntity) {
122122
let params = ["entity_id": haEntity.entityId]
123+
let urlString = "\(prefs.server)/api/services/\(haEntity.domain)/toggle"
123124

124-
var request = createAuthURLRequest(url: URL(string: "\(prefs.server)/api/services/\(haEntity.domain)/toggle")!)
125+
var request = createAuthURLRequest(url: URL(string: urlString)!)
125126

126127
request.httpMethod = "POST"
127128
request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])

HA Menu/Models/Preferences.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ import Foundation
1010

1111
struct Preferences {
1212

13+
var settingsVersion: Int {
14+
get {
15+
return UserDefaults.standard.integer(forKey: "settingsVersion")
16+
}
17+
set {
18+
UserDefaults.standard.set(newValue, forKey: "settingsVersion")
19+
}
20+
}
21+
1322
var server: String {
1423
get {
1524
var serverUrl = UserDefaults.standard.string(forKey: "server") ?? ""
@@ -176,7 +185,8 @@ struct Preferences {
176185
let data = try JSONEncoder().encode(newValue)
177186
let dataString = String(data: data, encoding: .utf8)!
178187
UserDefaults.standard.set(dataString, forKey: "menu_items")
179-
UserDefaults.standard.synchronize()
188+
189+
settingsVersion = 2
180190
}
181191
catch {
182192
// Error encoding json, don't write new value

0 commit comments

Comments
 (0)