fix(core): properly handle command not found error (#6341)

This commit is contained in:
Lucas Fernandes Nogueira
2023-02-22 08:54:52 -08:00
committed by GitHub
parent ed879513d3
commit 9cd8735574
3 changed files with 23 additions and 9 deletions

View File

@@ -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;
},
}

View File

@@ -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) {

View File

@@ -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"));
}
}
}
}