use crate::export::utils;
use fyrox_core::{
futures::executor, futures::future::join_all, log::Log, platform::TargetPlatform, SafeLock,
};
use fyrox_resource::manager::ResourceManager;
use std::{fs, io, path::Path};
pub fn copy_and_convert_assets(
src_folder: impl AsRef<Path>,
dst_folder: impl AsRef<Path>,
target_platform: TargetPlatform,
filter: &dyn Fn(&Path) -> bool,
resource_manager: &ResourceManager,
convert: bool,
) -> io::Result<()> {
if convert {
let rm = resource_manager.state();
let io = rm.resource_io.clone();
let loaders = rm.loaders.safe_lock();
let mut tasks = Vec::new();
utils::copy_dir_ex(
src_folder,
dst_folder,
&filter,
&mut |src_file, dst_file| {
if let Some(loader) = loaders.loader_for(src_file) {
tasks.push(loader.convert(
src_file.to_path_buf(),
dst_file.to_path_buf(),
target_platform,
io.clone(),
));
Ok(())
} else {
fs::copy(src_file, dst_file)?;
Ok(())
}
},
)?;
for result in executor::block_on(join_all(tasks)) {
Log::verify(result);
}
Ok(())
} else {
utils::copy_dir(src_folder, dst_folder, &filter)
}
}