@@ -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
0 commit comments