Skip to content

Commit

Permalink
feat: expose WebviewWinowBuilder::on_download (#9922)
Browse files Browse the repository at this point in the history
* feat: expose `WebviewWinowBuilder::on_download`

closes #9921

* fix tests
  • Loading branch information
amrbashir authored Jun 3, 2024
1 parent 3cca5c2 commit ddaabda
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changes/webview-builder-on-download.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"tauri": "patch:feat"
---

Add `WebviewWindowBuilder::on_download`.
50 changes: 50 additions & 0 deletions core/tauri/src/webview/webview_window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ use tauri_macros::default_runtime;
#[cfg(windows)]
use windows::Win32::Foundation::HWND;

use super::DownloadEvent;

/// A builder for [`WebviewWindow`], a window that hosts a single webview.
pub struct WebviewWindowBuilder<'a, R: Runtime, M: Manager<R>> {
window_builder: WindowBuilder<'a, R, M>,
Expand Down Expand Up @@ -263,6 +265,54 @@ tauri::Builder::default()
self
}

/// Set a download event handler to be notified when a download is requested or finished.
///
/// Returning `false` prevents the download from happening on a [`DownloadEvent::Requested`] event.
///
/// # Examples
///
#[cfg_attr(
feature = "unstable",
doc = r####"
```rust,no_run
use tauri::{
utils::config::{Csp, CspDirectiveSources, WebviewUrl},
webview::{DownloadEvent, WebviewWindowBuilder},
};
tauri::Builder::default()
.setup(|app| {
let handle = app.handle();
let webview_window = WebviewWindowBuilder::new(handle, "core", WebviewUrl::App("index.html".into()))
.on_download(|webview, event| {
match event {
DownloadEvent::Requested { url, destination } => {
println!("downloading {}", url);
*destination = "/home/tauri/target/path".into();
}
DownloadEvent::Finished { url, path, success } => {
println!("downloaded {} to {:?}, success: {}", url, path, success);
}
_ => (),
}
// let the download start
true
})
.build()?;
Ok(())
});
```
"####
)]
pub fn on_download<F: Fn(Webview<R>, DownloadEvent<'_>) -> bool + Send + Sync + 'static>(
mut self,
f: F,
) -> Self {
self.webview_builder.download_handler.replace(Arc::new(f));
self
}

/// Defines a closure to be executed when a page load event is triggered.
/// The event can be either [`tauri_runtime::webview::PageLoadEvent::Started`] if the page has started loading
/// or [`tauri_runtime::webview::PageLoadEvent::Finished`] when the page finishes loading.
Expand Down

0 comments on commit ddaabda

Please sign in to comment.