summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2020-01-23 16:10:34 +0100
committerrabite <rabite@posteo.de>2020-01-23 16:10:34 +0100
commitcd773727ebd3fe76f776598b55b3d1f22e8e2b87 (patch)
treecf44dfdd4a5f195691228666d23efaf8a065c4ab
parentfa73d2cb8c1730eda07d660ed6b0e05202875062 (diff)
fix updates ignoring sort/filter/etc settings when rendering
-rw-r--r--src/file_browser.rs57
-rw-r--r--src/files.rs29
2 files changed, 41 insertions, 45 deletions
diff --git a/src/file_browser.rs b/src/file_browser.rs
index 2da07f6..c0b0a0f 100644
--- a/src/file_browser.rs
+++ b/src/file_browser.rs
@@ -255,7 +255,7 @@ impl FileBrowser {
let left_path = main_path.parent().map(|p| p.to_path_buf());
let cache = fs_cache.clone();
- let main_widget = AsyncWidget::new(&core, move |_| {
+ let main_widget = AsyncWidget::new(&core, move |stale| {
let name = if main_path.parent().is_none() {
"root".to_string()
} else {
@@ -266,16 +266,16 @@ impl FileBrowser {
let main_dir = File::new(&name,
main_path.clone(),
None);
- let mut files = cache.get_files_sync(&main_dir)?;
- let selection = cache.get_selection(&main_dir).ok();
+ let (selected_file, files) = cache.get_files(&main_dir,
+ stale.clone())?;
+ let mut files = files.run_sync()?;
files.meta_all();
let mut list = ListView::new(&core_m.clone(),
files);
- if let Some(file) = selection {
- list.select_file(&file);
- }
+ selected_file.map(|f| list.select_file(&f));
+
list.refresh().log();
@@ -284,7 +284,7 @@ impl FileBrowser {
let cache = fs_cache.clone();
if let Some(left_path) = left_path {
- let left_widget = AsyncWidget::new(&core, move |_| {
+ let left_widget = AsyncWidget::new(&core, move |stale| {
let name = if left_path.parent().is_none() {
"root".to_string()
} else {
@@ -295,14 +295,12 @@ impl FileBrowser {
let left_dir = File::new(&name,
left_path.clone(),
None);
- let files = cache.get_files_sync(&left_dir)?;
- let selection = cache.get_selection(&left_dir).ok();
- let mut list = ListView::new(&core_l,
- files);
- if let Some(file) = selection {
- list.select_file(&file);
- }
+ let (selected_file, files) = cache.get_files(&left_dir,
+ stale.clone())?;
+ let files = files.run_sync()?;
+ let mut list = ListView::new(&core_l, files);
+ selected_file.map(|f| list.select_file(&f));
list.refresh().log();
Ok(list)
@@ -375,20 +373,20 @@ impl FileBrowser {
let core = self.core.clone();
let cache = self.fs_cache.clone();
- let main_widget = AsyncWidget::new(&core.clone(), move |_| {
- let files = match previewer_files {
- Some(files) => files,
- None => cache.get_files_sync(&dir)?
+ let main_widget = AsyncWidget::new(&core.clone(), move |stale| {
+ let (selected_file, files) = match previewer_files {
+ Some(files) => (None, files),
+ None => {
+ let (selected_file, files) = cache.get_files(&dir,
+ stale.clone())?;
+ let files = files.run_sync()?;
+ (selected_file, files)
+ }
};
- let selection = cache.get_selection(&dir).ok();
-
let mut list = ListView::new(&core, files);
- if let Some(file) = selection {
- list.select_file(&file);
- }
-
+ selected_file.map(|f| list.select_file(&f));
list.content.meta_all();
Ok(list)
@@ -557,9 +555,12 @@ impl FileBrowser {
if let Ok(left_dir) = new_cwd.parent_as_file() {
let cache = self.fs_cache.clone();
- let left_widget = AsyncWidget::new(&core.clone(), move |_| {
- let files = cache.get_files_sync(&left_dir)?;
- let list = ListView::new(&core, files);
+ let left_widget = AsyncWidget::new(&core.clone(), move |stale| {
+ let (selected_file, files) = cache.get_files(&left_dir,
+ stale.clone())?;
+ let files = files.run_sync()?;
+ let mut list = ListView::new(&core, files);
+ selected_file.map(|f| list.select_file(&f));
Ok(list)
});
@@ -674,7 +675,7 @@ impl FileBrowser {
}
let preview = self.preview_widget_mut()?;
- preview.set_file(file).log();
+ preview.set_file(&file).log();
Ok(())
}
diff --git a/src/files.rs b/src/files.rs
index 25d21ad..7720aa7 100644
--- a/src/files.rs
+++ b/src/files.rs
@@ -190,26 +190,12 @@ impl RefreshPackage {
// Files added, removed, renamed to hidden, etc...
files.recalculate_len();
- let new_len = files.len();
- // Need to unpack this to prevent issue with recursive Files type
- // Also, if no files remain add placeholder
- let files = if files.len() > 0 {
- // Sort again to make sure new/changed files are in correct order
- files.sort();
- files.files
- } else {
- let placeholder = File::new_placeholder(&files.directory.path).unwrap();
- files.files.push(placeholder);
-
- // Need to sort because of possible hidden files
- files.sort();
- files.files
- };
+ files.sort();
+ // Prerender new buffer in current thread
let mut old_buffer = old_buffer;
- // Prerender new buffer in current thread
- let new_buffer = files.iter()
+ let new_buffer = files.iter_files()
.map(|file| {
match list_pos_map.get(&file) {
Some(&old_pos) =>
@@ -221,6 +207,15 @@ impl RefreshPackage {
}
}).collect();
+ // Need to unpack this to prevent issue with recursive Files type
+ // Also, if no files remain add placeholder and set len
+ let (files, new_len) = if files.len() > 0 {
+ (files.files, files.len)
+ } else {
+ let placeholder = File::new_placeholder(&files.directory.path).unwrap();
+ files.files.push(placeholder);
+ (files.files, 1)
+ };
RefreshPackage {