@@ -45,10 +45,20 @@ struct ListenerHandle(Arc<RwLock<ipc::Ipc>>);
4545
4646#[ cfg( target_os = "macos" ) ]
4747fn handle_uris ( app : & AppHandle , uris : Vec < String > ) {
48+ if uris. is_empty ( ) {
49+ return ;
50+ }
4851 let listener_state: State < ListenerHandle > = app. state ( ) ;
4952 let listener_lock = listener_state. 0 . clone ( ) ;
5053 let app_handle = app. clone ( ) ;
5154 async_runtime:: spawn ( async move {
55+ {
56+ let mut listener = listener_lock. write ( ) . await ;
57+ if !listener. listening {
58+ listener. push_pending ( uris) ;
59+ return ;
60+ }
61+ }
5262 let listener = listener_lock. read ( ) . await ;
5363 if let Err ( e) = listener. send ( & uris, app_handle) . await {
5464 println ! ( "Unable to send args to listener: {:?}" , e) ;
@@ -65,6 +75,8 @@ fn setup(app: &mut App) -> Result<(), Box<dyn std::error::Error>> {
6575 } )
6676 . expect ( "Unable to set apple event handler" ) ;
6777 macos:: listen_url ( ) ;
78+ macos:: listen_open_documents ( ) ;
79+ macos:: listen_reopen_app ( ) ;
6880 }
6981
7082 let mut torrents: Vec < String > = vec ! [ ] ;
@@ -129,16 +141,11 @@ fn setup(app: &mut App) -> Result<(), Box<dyn std::error::Error>> {
129141
130142 let app_clone = app. clone ( ) ;
131143 async_runtime:: spawn ( async move {
132- let listener = listener_lock. read ( ) . await ;
144+ let mut listener = listener_lock. write ( ) . await ;
145+ torrents. extend ( listener. take_pending ( ) ) ;
133146 if let Err ( e) = listener. send ( & torrents, app_clone) . await {
134147 println ! ( "Unable to send args to listener: {e}" ) ;
135148 }
136-
137- #[ cfg( target_os = "macos" ) ]
138- {
139- macos:: listen_open_documents ( ) ;
140- macos:: listen_reopen_app ( ) ;
141- }
142149 } ) ;
143150
144151 let app_clone = app. clone ( ) ;
0 commit comments