diff --git a/bevy_editor_panes/bevy_asset_browser/src/io/task.rs b/bevy_editor_panes/bevy_asset_browser/src/io/task.rs index 0a6f04d6..ba7b8910 100644 --- a/bevy_editor_panes/bevy_asset_browser/src/io/task.rs +++ b/bevy_editor_panes/bevy_asset_browser/src/io/task.rs @@ -1,4 +1,4 @@ -use crate::{AssetBrowserLocation, DirectoryContent, DirectoryContentOrder, Entry}; +use crate::{AssetBrowserLocation, DirectoryContent, Entry}; use bevy::{ asset::io::AssetSourceBuilders, prelude::*, @@ -20,12 +20,9 @@ pub(crate) fn fetch_task_is_running( pub(crate) fn poll_task( mut commands: Commands, mut task_query: Query<(Entity, &mut FetchDirectoryContentTask)>, - content_order: Res, ) { let (task_entity, mut task) = task_query.single_mut().unwrap(); - if let Some(mut content) = block_on(poll_once(&mut task.0)) { - content_order.sort(&mut content); - + if let Some(content) = block_on(poll_once(&mut task.0)) { commands.entity(task_entity).despawn(); commands.insert_resource(content); } diff --git a/bevy_editor_panes/bevy_asset_browser/src/lib.rs b/bevy_editor_panes/bevy_asset_browser/src/lib.rs index ebb770c6..f52fedbc 100644 --- a/bevy_editor_panes/bevy_asset_browser/src/lib.rs +++ b/bevy_editor_panes/bevy_asset_browser/src/lib.rs @@ -57,9 +57,13 @@ impl Plugin for AssetBrowserPanePlugin { ) .add_systems( Update, - ui::directory_content::refresh_ui + ( + ui::directory_content::sort_directory_content, + ui::directory_content::refresh_ui, + ) .run_if(directory_content_as_changed) - .after(io::task::poll_task), + .after(io::task::poll_task) + .chain(), ) .add_systems( Update, @@ -103,15 +107,6 @@ pub enum DirectoryContentOrder { /// Ordered reverse alphabetically with respect to folders ReverseAlphabetical, } -impl DirectoryContentOrder { - /// Sorts a given [`DirectoryContent`] with the current method - pub fn sort(&self, content: &mut DirectoryContent) { - match self { - Self::Alphabetical => content.0.sort_by(alphabetical_sort), - Self::ReverseAlphabetical => content.0.sort_by(reverse_alphabetical_sort), - } - } -} /// One entry of [`DirectoryContent`] #[derive(Debug, Clone, PartialEq, Eq)] @@ -127,6 +122,15 @@ pub enum Entry { /// The content of the directory pointed by [`AssetBrowserLocation`] #[derive(Resource, Default, Debug, Clone, PartialEq, Eq)] pub struct DirectoryContent(pub Vec); +impl DirectoryContent { + /// Sorts the directory by the given [`DirectoryContentOrder`] + pub fn sort(&mut self, order: &DirectoryContentOrder) { + match order { + DirectoryContentOrder::Alphabetical => self.0.sort_by(alphabetical_sort), + DirectoryContentOrder::ReverseAlphabetical => self.0.sort_by(reverse_alphabetical_sort), + } + } +} /// Check if the [`DirectoryContent`] has changed, which relate to the content of the current [`AssetBrowserLocation`] pub(crate) fn directory_content_as_changed(directory_content: Res) -> bool { diff --git a/bevy_editor_panes/bevy_asset_browser/src/ui/directory_content.rs b/bevy_editor_panes/bevy_asset_browser/src/ui/directory_content.rs index e9edc11f..b020d202 100644 --- a/bevy_editor_panes/bevy_asset_browser/src/ui/directory_content.rs +++ b/bevy_editor_panes/bevy_asset_browser/src/ui/directory_content.rs @@ -3,7 +3,9 @@ use bevy_context_menu::{ContextMenu, ContextMenuOption}; use bevy_editor_styles::Theme; use bevy_scroll_box::{ScrollBox, ScrollBoxContent, spawn_scroll_box}; -use crate::{AssetBrowserLocation, DefaultSourceFilePath, DirectoryContent, Entry, io}; +use crate::{ + AssetBrowserLocation, DefaultSourceFilePath, DirectoryContent, DirectoryContentOrder, Entry, io, +}; use crate::ui::nodes::{spawn_file_node, spawn_folder_node, spawn_source_node}; @@ -76,6 +78,13 @@ fn asset_browser_context_menu() -> ContextMenu { ]) } +pub(crate) fn sort_directory_content( + mut directory_content: ResMut, + directory_content_order: Res, +) { + directory_content.sort(&directory_content_order); +} + /// Refresh the UI with the content of the current [`AssetBrowserLocation`] pub(crate) fn refresh_ui( mut commands: Commands,