@@ -90,6 +90,8 @@ enum Route: Hashable, Identifiable {
9090 StatusMediaScreen ( accountType: accountType, statusKey: statusKey, initialIndex: Int ( selectedIndex) , preview: preview)
9191 case . appLog:
9292 AppLogScreen ( )
93+ case . deepLinkAccountPicker( let originalUrl, let data) :
94+ DeepLinkAccountPicker ( originalUrl: originalUrl, data: data, onNavigate: onNavigate)
9395 default :
9496 Text ( " Not done yet for \( self ) " )
9597 }
@@ -133,6 +135,7 @@ enum Route: Hashable, Identifiable {
133135 case userFans( AccountType , MicroBlogKey )
134136 case dmConversation( AccountType , MicroBlogKey , String )
135137 case appLog
138+ case deepLinkAccountPicker( String , [ MicroBlogKey : Route ] )
136139
137140 fileprivate static func fromCompose( _ compose: DeeplinkRoute . Compose ) -> Route ? {
138141 switch onEnum ( of: compose) {
@@ -192,28 +195,37 @@ enum Route: Hashable, Identifiable {
192195
193196 static func fromDeepLink( url: String ) -> Route ? {
194197 if let deeplinkRoute = DeeplinkRoute . companion. parse ( url: url) {
195- switch onEnum ( of: deeplinkRoute) {
196- case . compose( let compose) :
197- return fromCompose ( compose)
198- case . media( let media) :
199- return fromMedia ( media)
200- case . profile( let profile) :
201- return fromProfile ( profile)
202- case . rss( let rss) :
203- switch onEnum ( of: rss) {
204- case . detail( let data) :
205- return Route . rssDetail ( data. url)
206- }
207- case . search( let search) :
208- return Route . search ( search. accountType, search. query)
209- case . status( let status) :
210- return fromStatus ( status)
211- case . login:
212- return Route . serviceSelect
213- }
198+ return fromDeepLinkRoute ( deeplinkRoute: deeplinkRoute)
214199 } else {
215200 return nil
216201 }
217-
202+ }
203+
204+ static func fromDeepLinkRoute( deeplinkRoute: DeeplinkRoute ) -> Route ? {
205+ switch onEnum ( of: deeplinkRoute) {
206+ case . compose( let compose) :
207+ return fromCompose ( compose)
208+ case . media( let media) :
209+ return fromMedia ( media)
210+ case . profile( let profile) :
211+ return fromProfile ( profile)
212+ case . rss( let rss) :
213+ switch onEnum ( of: rss) {
214+ case . detail( let data) :
215+ return Route . rssDetail ( data. url)
216+ }
217+ case . search( let search) :
218+ return Route . search ( search. accountType, search. query)
219+ case . status( let status) :
220+ return fromStatus ( status)
221+ case . login:
222+ return Route . serviceSelect
223+ case . deepLinkAccountPicker( let picker) :
224+ return . deepLinkAccountPicker( picker. originalUrl, picker. data. mapValues { route in
225+ return fromDeepLinkRoute ( deeplinkRoute: route)
226+ } . compactMapValues { $0 } )
227+ case . openLinkDirectly( _) :
228+ return nil
229+ }
218230 }
219231}
0 commit comments