Skip to content

Commit a13cf7a

Browse files
committed
improve notifications
navigate to subpage in sitemap and allow no parameters in rule call Signed-off-by: Tassilo Karge <tassilo.karge@web.de>
1 parent 882ea9d commit a13cf7a

2 files changed

Lines changed: 48 additions & 27 deletions

File tree

openHAB/OpenHABRootViewController.swift

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,6 @@ class OpenHABRootViewController: UIViewController {
336336
self.modalDismissed(to: .settings)
337337
}
338338
case let .sitemap(sitemap):
339-
Preferences.shared.modifyActiveHome { homePreferences in
340-
homePreferences.defaultSitemap = sitemap
341-
}
342339
SideMenuManager.default.rightMenuNavigationController?.dismiss(animated: true) {
343340
self.modalDismissed(to: .sitemap(sitemap))
344341
}
@@ -466,21 +463,21 @@ class OpenHABRootViewController: UIViewController {
466463
logger.info("handleNotificationInternal: \(action ?? "<none>")")
467464

468465
guard let action else { return }
466+
let actionParts = action.split(separator: ":")
467+
let cmd = actionParts.dropFirst().joined(separator: ":")
469468

470-
let cmd = action.split(separator: ":").dropFirst().joined(separator: ":")
471-
472-
switch true {
473-
case action.hasPrefix("ui"):
469+
switch actionParts[0] {
470+
case "ui":
474471
uiCommandAction(cmd)
475-
case action.hasPrefix("command"):
472+
case "command":
476473
sendCommandAction(cmd)
477-
case action.hasPrefix("http"):
474+
case "http":
478475
httpCommandAction(action)
479-
case action.hasPrefix("app"):
476+
case "app":
480477
appCommandAction(cmd)
481-
case action.hasPrefix("rule"):
478+
case "rule":
482479
ruleCommandAction(cmd)
483-
case action.hasPrefix("device"):
480+
case "device":
484481
deviceAction(cmd)
485482
default:
486483
return
@@ -503,20 +500,28 @@ class OpenHABRootViewController: UIViewController {
503500
let path = String(firstMatch.1)
504501
logger.info("navigateCommandAction path: \(path)")
505502
if path.starts(with: "/basicui/app?") {
503+
logger.info("Navigating to sitemap target")
504+
let defaultSitemap = Preferences.shared.currentHomePreferences.defaultSitemap
505+
guard let urlComponents = URLComponents(string: path) else {
506+
logger.warning("No parameters for specifying sitemap or widget to navigate to")
507+
if currentView != sitemapViewController {
508+
switchView(target: .sitemap(defaultSitemap))
509+
}
510+
return
511+
}
512+
let queryItems = urlComponents.queryItems
513+
let sitemap = queryItems?.first { $0.name == "sitemap" }?.value
514+
let widgetId = queryItems?.first { $0.name == "w" }?.value
506515
if currentView != sitemapViewController {
507-
switchView(target: .sitemap(""))
516+
switchView(target: .sitemap(sitemap ?? defaultSitemap))
508517
}
509-
if let urlComponents = URLComponents(string: path) {
510-
let queryItems = urlComponents.queryItems
511-
let sitemap = queryItems?.first { $0.name == "sitemap" }?.value
512-
let subview = queryItems?.first { $0.name == "w" }?.value
513-
if let sitemap {
514-
Task {
515-
await sitemapViewController.pushSitemap(name: sitemap, path: subview)
516-
}
518+
if let sitemap {
519+
Task { @MainActor in
520+
await sitemapViewController.pushSitemap(name: sitemap, path: widgetId)
517521
}
518522
}
519523
} else {
524+
logger.info("Navigating to webview target")
520525
if currentView != webViewController {
521526
switchView(target: .webview)
522527
}
@@ -653,10 +658,13 @@ class OpenHABRootViewController: UIViewController {
653658
private func ruleCommandAction(_ command: String) {
654659
let components = command.split(separator: ":", maxSplits: 2)
655660

656-
guard components.count == 2 else { return }
661+
guard !components.isEmpty else {
662+
logger.warning("No rule to execute found in action")
663+
return
664+
}
657665

658666
let uuid = String(components[0])
659-
let propertiesString = String(components[1])
667+
let propertiesString = if components.count > 1 { String(components[1]) } else { "" }
660668

661669
let propertyPairs = propertiesString.split(separator: ",")
662670
var properties: [String: String] = [:]
@@ -731,7 +739,10 @@ class OpenHABRootViewController: UIViewController {
731739
let targetView: OpenHABViewController
732740

733741
switch target {
734-
case .sitemap:
742+
case let .sitemap(sitemap):
743+
Preferences.shared.modifyActiveHome { preferences in
744+
preferences.defaultSitemap = sitemap
745+
}
735746
targetView = sitemapViewController
736747
case .webview:
737748
targetView = webViewController
@@ -763,10 +774,12 @@ class OpenHABRootViewController: UIViewController {
763774

764775
private func switchToSavedView() {
765776
if Preferences.shared.currentHomePreferences.demomode {
766-
switchView(target: .sitemap(""))
777+
switchView(target: .sitemap("demo"))
767778
} else {
768-
logger.info("OpenHABRootViewController switchToSavedView \(Preferences.shared.currentHomePreferences.defaultView == "sitemap" ? "sitemap" : "web")")
769-
switchView(target: Preferences.shared.currentHomePreferences.defaultView == "sitemap" ? .sitemap("") : .webview)
779+
let defaultView = Preferences.shared.currentHomePreferences.defaultView
780+
let defaultSitemap = Preferences.shared.currentHomePreferences.defaultSitemap
781+
logger.info("OpenHABRootViewController switchToSavedView \(defaultView == "sitemap" ? "sitemap/\(defaultSitemap)" : "web")")
782+
switchView(target: defaultView == "sitemap" ? .sitemap(defaultSitemap) : .webview)
770783
}
771784
}
772785

openHAB/OpenHABSitemapViewController.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,11 @@ extension OpenHABSitemapViewController {
441441
return
442442
}
443443

444+
guard name != pageId || path != nil else {
445+
logger.info("pushSitemap: Already at the required sitemap")
446+
return
447+
}
448+
444449
logger.info("pushSitemap: pushing page")
445450

446451
guard let baseUrl = URL(string: activeConnection.configuration.url) else {
@@ -461,6 +466,9 @@ extension OpenHABSitemapViewController {
461466
return
462467
}
463468

469+
if let pageId = path {
470+
newViewController.pageId = pageId
471+
}
464472
newViewController.pageUrl = url.absoluteString
465473
newViewController.openHABRootUrl = activeConnection.configuration.url
466474
navigationController?.pushViewController(newViewController, animated: true)

0 commit comments

Comments
 (0)