@@ -70,17 +70,14 @@ fn init_deep_link<R: Runtime>(
70
70
#[ cfg( desktop) ]
71
71
{
72
72
let args = std:: env:: args ( ) ;
73
- let current = if let Some ( config) = api. config ( ) {
74
- imp:: deep_link_from_args ( config, args)
75
- } else {
76
- None
77
- } ;
78
-
79
- Ok ( DeepLink {
73
+ let deep_link = DeepLink {
80
74
app : app. clone ( ) ,
81
- current : std :: sync :: Mutex :: new ( current . map ( |url| vec ! [ url ] ) ) ,
75
+ current : Default :: default ( ) ,
82
76
config : api. config ( ) . clone ( ) ,
83
- } )
77
+ } ;
78
+ deep_link. handle_cli_arguments ( args) ;
79
+
80
+ Ok ( deep_link)
84
81
}
85
82
}
86
83
@@ -179,31 +176,6 @@ mod imp {
179
176
pub ( crate ) config : Option < crate :: config:: Config > ,
180
177
}
181
178
182
- pub ( crate ) fn deep_link_from_args < S : AsRef < str > , I : Iterator < Item = S > > (
183
- config : & crate :: config:: Config ,
184
- mut args : I ,
185
- ) -> Option < url:: Url > {
186
- if cfg ! ( windows) || cfg ! ( target_os = "linux" ) {
187
- args. next ( ) ; // bin name
188
- let arg = args. next ( ) ;
189
-
190
- let maybe_deep_link = args. next ( ) . is_none ( ) ; // single argument
191
- if !maybe_deep_link {
192
- return None ;
193
- }
194
-
195
- if let Some ( url) = arg. and_then ( |arg| arg. as_ref ( ) . parse :: < url:: Url > ( ) . ok ( ) ) {
196
- if config. desktop . contains_scheme ( & url. scheme ( ) . to_string ( ) ) {
197
- return Some ( url) ;
198
- } else if cfg ! ( debug_assertions) {
199
- log:: warn!( "argument {url} does not match any configured deep link scheme; skipping it" ) ;
200
- }
201
- }
202
- }
203
-
204
- None
205
- }
206
-
207
179
impl < R : Runtime > DeepLink < R > {
208
180
/// Checks if the provided list of arguments (which should match [`std::env::args`])
209
181
/// contains a deep link argument (for Linux and Windows).
@@ -216,17 +188,31 @@ mod imp {
216
188
///
217
189
/// This function updates the [`Self::get_current`] value and emits a `deep-link://new-url` event.
218
190
#[ cfg( desktop) ]
219
- pub fn handle_cli_arguments < S : AsRef < str > , I : Iterator < Item = S > > ( & self , args : I ) {
191
+ pub fn handle_cli_arguments < S : AsRef < str > , I : Iterator < Item = S > > ( & self , mut args : I ) {
220
192
use tauri:: Emitter ;
221
193
222
194
let Some ( config) = & self . config else {
223
195
return ;
224
196
} ;
225
197
226
- if let Some ( url) = deep_link_from_args ( config, args) {
227
- let mut current = self . current . lock ( ) . unwrap ( ) ;
228
- current. replace ( vec ! [ url. clone( ) ] ) ;
229
- let _ = self . app . emit ( "deep-link://new-url" , vec ! [ url] ) ;
198
+ if cfg ! ( windows) || cfg ! ( target_os = "linux" ) {
199
+ args. next ( ) ; // bin name
200
+ let arg = args. next ( ) ;
201
+
202
+ let maybe_deep_link = args. next ( ) . is_none ( ) ; // single argument
203
+ if !maybe_deep_link {
204
+ return ;
205
+ }
206
+
207
+ if let Some ( url) = arg. and_then ( |arg| arg. as_ref ( ) . parse :: < url:: Url > ( ) . ok ( ) ) {
208
+ if config. desktop . contains_scheme ( & url. scheme ( ) . to_string ( ) ) {
209
+ let mut current = self . current . lock ( ) . unwrap ( ) ;
210
+ current. replace ( vec ! [ url. clone( ) ] ) ;
211
+ let _ = self . app . emit ( "deep-link://new-url" , vec ! [ url] ) ;
212
+ } else if cfg ! ( debug_assertions) {
213
+ log:: warn!( "argument {url} does not match any configured deep link scheme; skipping it" ) ;
214
+ }
215
+ }
230
216
}
231
217
}
232
218
0 commit comments