#![cfg(feature = "fs_watcher")]
pub use zng_ext_fs_watcher::{
FS_CHANGES_EVENT, FsChange, FsChangeNote, FsChangeNoteHandle, FsChangesArgs, WATCHER, WatchFile, WatcherHandle, WatcherReadStatus,
WatcherSyncStatus, WriteFile, fs_event,
};
#[cfg(feature = "image")]
mod images_ext {
use std::path::PathBuf;
use zng_app::hn;
use zng_ext_fs_watcher::WATCHER;
use zng_ext_image::*;
#[expect(non_camel_case_types)]
pub trait IMAGES_Ext {
fn watch(&self, path: impl Into<PathBuf>) -> ImageVar;
fn watch_image(&self, path: impl Into<PathBuf>, options: ImageOptions, limits: Option<ImageLimits>) -> ImageVar;
}
impl IMAGES_Ext for IMAGES {
fn watch(&self, path: impl Into<PathBuf>) -> ImageVar {
watch(path.into())
}
fn watch_image(&self, path: impl Into<PathBuf>, options: ImageOptions, limits: Option<ImageLimits>) -> ImageVar {
watch_image(path.into(), options, limits)
}
}
fn watch(path: PathBuf) -> ImageVar {
let img = IMAGES.read(path.clone());
let handle = WATCHER.on_file_changed(
path.clone(),
true,
hn!(|_| {
let mut opt = ImageOptions::cache();
opt.cache_mode = ImageCacheMode::Reload;
let _ = IMAGES.image(path.clone(), opt, None);
}),
);
img.hold(handle).perm();
img
}
fn watch_image(path: PathBuf, option: ImageOptions, limits: Option<ImageLimits>) -> ImageVar {
let img = IMAGES.image(ImageSource::Read(path.clone()), option.clone(), limits.clone());
let handle = WATCHER.on_file_changed(
path.clone(),
true,
hn!(|_| {
let mut opt = option.clone();
opt.cache_mode = ImageCacheMode::Reload;
let _ = IMAGES.image(ImageSource::Read(path.clone()), opt, limits.clone());
}),
);
img.hold(handle).perm();
img
}
}
#[cfg(feature = "image")]
pub use images_ext::*;