mirror of
https://github.com/tauri-apps/tauri.git
synced 2026-04-01 10:01:07 +02:00
fix(core): properly handle command not found error (#6341)
This commit is contained in:
committed by
GitHub
parent
ed879513d3
commit
9cd8735574
@@ -59,7 +59,6 @@ impl From<Handler> for proc_macro::TokenStream {
|
||||
match #cmd {
|
||||
#(stringify!(#commands) => #wrappers!(#paths, #invoke),)*
|
||||
_ => {
|
||||
#invoke.resolver.reject(format!("command {} not found", #cmd));
|
||||
return false;
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1173,8 +1173,8 @@ mod test {
|
||||
}
|
||||
|
||||
impl<R: Runtime> WindowManager<R> {
|
||||
pub fn run_invoke_handler(&self, invoke: Invoke<R>) {
|
||||
(self.inner.invoke_handler)(invoke);
|
||||
pub fn run_invoke_handler(&self, invoke: Invoke<R>) -> bool {
|
||||
(self.inner.invoke_handler)(invoke)
|
||||
}
|
||||
|
||||
pub fn run_on_page_load(&self, window: Window<R>, payload: PageLoadPayload) {
|
||||
|
||||
@@ -1487,16 +1487,20 @@ impl<R: Runtime> Window<R> {
|
||||
.map(|c| c.to_string())
|
||||
.unwrap_or_else(String::new);
|
||||
|
||||
let command = invoke.message.command.clone();
|
||||
let resolver = invoke.resolver.clone();
|
||||
#[cfg(mobile)]
|
||||
let (message, resolver) = (invoke.message.clone(), invoke.resolver.clone());
|
||||
let message = invoke.message.clone();
|
||||
|
||||
#[allow(unused_variables)]
|
||||
let handled = manager.extend_api(plugin, invoke);
|
||||
#[allow(unused_mut)]
|
||||
let mut handled = manager.extend_api(plugin, invoke);
|
||||
|
||||
#[cfg(target_os = "ios")]
|
||||
{
|
||||
if !handled {
|
||||
handled = true;
|
||||
let plugin = plugin.to_string();
|
||||
let (callback, error) = (resolver.callback, resolver.error);
|
||||
self.with_webview(move |webview| {
|
||||
unsafe {
|
||||
crate::ios::post_ipc_message(
|
||||
@@ -1515,6 +1519,8 @@ impl<R: Runtime> Window<R> {
|
||||
#[cfg(target_os = "android")]
|
||||
{
|
||||
if !handled {
|
||||
handled = true;
|
||||
let resolver_ = resolver.clone();
|
||||
let runtime_handle = self.app_handle.runtime_handle.clone();
|
||||
let plugin = plugin.to_string();
|
||||
self.with_webview(move |webview| {
|
||||
@@ -1566,19 +1572,28 @@ impl<R: Runtime> Window<R> {
|
||||
&plugin,
|
||||
&runtime_handle,
|
||||
message,
|
||||
(resolver.callback, resolver.error),
|
||||
(resolver_.callback, resolver_.error),
|
||||
env,
|
||||
activity,
|
||||
webview,
|
||||
) {
|
||||
resolver.reject(format!("failed to reach Android layer: {e}"));
|
||||
resolver_.reject(format!("failed to reach Android layer: {e}"));
|
||||
}
|
||||
});
|
||||
})?;
|
||||
}
|
||||
}
|
||||
|
||||
if !handled {
|
||||
resolver.reject(format!("Command {command} not found"));
|
||||
}
|
||||
} else {
|
||||
manager.run_invoke_handler(invoke);
|
||||
let command = invoke.message.command.clone();
|
||||
let resolver = invoke.resolver.clone();
|
||||
let handled = manager.run_invoke_handler(invoke);
|
||||
if !handled {
|
||||
resolver.reject(format!("Command {command} not found"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user