(project_root: &str, source: &str, raw_name: &str)
| 1447 | .collect(); |
| 1448 | } |
| 1449 | state.active_asset_path = target.clone(); |
| 1450 | state.file_scope = parent_res_folder(&target); |
| 1451 | reveal_file_path_in_tree(state, &target); |
| 1452 | state.log = format!("rename asset\n{source} -> {target}"); |
| 1453 | let next_open = state |
| 1454 | .open_paths |
| 1455 | .get(state.active_open) |
| 1456 | .filter(|open| *open == &target) |
| 1457 | .cloned(); |
| 1458 | ( |
| 1459 | next_open, |
| 1460 | state.scene_paths.clone(), |
| 1461 | state.dirty_scene_paths.clone(), |
| 1462 | ) |
| 1463 | }) |
| 1464 | .unwrap_or((None, Vec::new(), Vec::new())); |
| 1465 | let rewrite_count = |
| 1466 | rewrite_clean_scene_asset_refs(&root, &scene_paths, &dirty_paths, &source, &target); |
| 1467 | if rewrite_count > 0 { |
| 1468 | let _ = with_state_mut!(ctx.run, EditorState, ctx.id, |state| { |
| 1469 | state.project_file_sigs = editor_file_watch::scan_project(Path::new(&root)); |
| 1470 | state.log = |
| 1471 | format!("rename asset\n{source} -> {target}\nupd refs={rewrite_count}"); |
| 1472 | }); |
| 1473 | } |
| 1474 | if let Some(next) = next_open { |
| 1475 | open_scene_path(ctx, &next); |
| 1476 | } else { |
| 1477 | refresh_all(ctx); |
| 1478 | } |
| 1479 | } |
| 1480 | Err(err) => set_log(ctx, &format!("rename asset fail\n{source}\n{err}")), |
| 1481 | } |
| 1482 | } |
| 1483 | |
| 1484 | pub fn rewrite_clean_scene_asset_refs( |
| 1485 | root: &str, |
| 1486 | scene_paths: &[String], |
| 1487 | dirty_paths: &[String], |
| 1488 | source: &str, |
| 1489 | target: &str, |
| 1490 | ) -> usize { |
| 1491 | let mut changed = 0; |
| 1492 | for path in scene_paths { |
| 1493 | if dirty_paths.iter().any(|dirty| dirty == path) { |
| 1494 | continue; |
| 1495 | } |
| 1496 | let abs = res_to_abs(root, path); |
| 1497 | let Ok(text) = FileMod::load_string(&abs) else { |
| 1498 | continue; |
| 1499 | }; |
| 1500 | let mut doc = SceneDoc::parse(&text); |
| 1501 | if !rewrite_asset_refs_in_doc(&mut doc, source, target) { |
| 1502 | continue; |
nothing calls this directly
no test coverage detected