From 169b2b5cb8f0efddb10e5de435d82011e934e84c Mon Sep 17 00:00:00 2001 From: Antoine Gersant Date: Fri, 9 Aug 2024 08:30:10 -0700 Subject: [PATCH] Keep directory entries sorted as we add them --- src/app/index.rs | 4 ++-- src/app/index/browser.rs | 18 ++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/app/index.rs b/src/app/index.rs index 6db2366..9c9ed83 100644 --- a/src/app/index.rs +++ b/src/app/index.rs @@ -212,9 +212,9 @@ impl Builder { self.collection_builder.add_song(song); } - pub fn build(mut self) -> Index { + pub fn build(self) -> Index { Index { - browser: self.browser_builder.build(&mut self.strings), + browser: self.browser_builder.build(), collection: self.collection_builder.build(), strings: self.strings, } diff --git a/src/app/index/browser.rs b/src/app/index/browser.rs index 0d705c3..1bb7b16 100644 --- a/src/app/index/browser.rs +++ b/src/app/index/browser.rs @@ -1,5 +1,5 @@ use std::{ - collections::HashMap, + collections::{BTreeSet, HashMap}, ffi::OsStr, hash::Hash, path::{Path, PathBuf}, @@ -21,7 +21,7 @@ pub enum File { #[derive(Serialize, Deserialize)] pub struct Browser { - directories: HashMap>, + directories: HashMap>, flattened: Trie, } @@ -97,7 +97,7 @@ impl Browser { #[derive(Default)] pub struct Builder { - directories: HashMap>, + directories: HashMap>, flattened: TrieBuilder, } @@ -119,7 +119,7 @@ impl Builder { self.directories .entry(parent_id) .or_default() - .push(storage::File::Directory(path_id)); + .insert(storage::File::Directory(path_id)); } pub fn add_song(&mut self, strings: &mut ThreadedRodeo, song: &scanner::Song) { @@ -134,7 +134,7 @@ impl Builder { self.directories .entry(parent_id) .or_default() - .push(storage::File::Song(path_id)); + .insert(storage::File::Song(path_id)); self.flattened.push( song.virtual_path @@ -144,13 +144,7 @@ impl Builder { ); } - pub fn build(mut self, strings: &mut ThreadedRodeo) -> Browser { - for directory in self.directories.values_mut() { - directory.sort_by_key(|f| match f { - storage::File::Directory(p) => strings.resolve(&p.0), - storage::File::Song(p) => strings.resolve(&p.0), - }); - } + pub fn build(self) -> Browser { Browser { directories: self.directories, flattened: self.flattened.build(),