use super::engine::{BrowseProgressCallback, TabCallbackRegistry};
use crate::tools::ProgressCallback;
use parking_lot::Mutex;
pub(crate) struct BrowseCallbacks {
progress: Mutex<Option<ProgressCallback>>,
browse: Mutex<Option<BrowseProgressCallback>>,
}
impl BrowseCallbacks {
pub fn new() -> Self {
Self {
progress: Mutex::new(None),
browse: Mutex::new(None),
}
}
pub fn store_progress(&self, cb: ProgressCallback) {
*self.progress.lock() = Some(cb);
}
pub fn store_browse(&self, cb: BrowseProgressCallback) {
*self.browse.lock() = Some(cb);
}
pub fn register_on_registry(&self, tab_id: uuid::Uuid, registry: &TabCallbackRegistry) {
if let Some(cb) = self.progress.lock().take() {
registry.set(tab_id, cb);
}
if let Some(bcb) = self.browse.lock().take() {
registry.set_browse(tab_id, bcb);
}
}
pub fn register_on_tab(&self, _tab: &dyn super::engine::BrowserTab) {
#[cfg(feature = "native-browser")]
{
use super::oxibrowser_backend::OxiTab;
if let Some(oxi_tab) = _tab.as_any().downcast_ref::<OxiTab>() {
if let Some(cb) = self.progress.lock().take() {
oxi_tab.set_progress_callback(cb);
}
if let Some(bcb) = self.browse.lock().take() {
oxi_tab.set_browse_progress_callback_impl(bcb);
}
}
}
#[cfg(not(feature = "native-browser"))]
{
self.progress.lock().take();
self.browse.lock().take();
}
}
pub fn register_browse_on_registry(&self, tab_id: uuid::Uuid, registry: &TabCallbackRegistry) {
if let Some(bcb) = self.browse.lock().take() {
registry.set_browse(tab_id, bcb);
}
}
pub fn register_progress_on_registry(
&self,
tab_id: uuid::Uuid,
registry: &TabCallbackRegistry,
) {
if let Some(cb) = self.progress.lock().take() {
registry.set(tab_id, cb);
}
}
#[cfg(feature = "native-browser")]
pub fn take_progress(&self) -> Option<ProgressCallback> {
self.progress.lock().take()
}
}
impl Default for BrowseCallbacks {
fn default() -> Self {
Self::new()
}
}