fix(preview): remove redundant tokio task when generating builtin file previews (#86)

This commit is contained in:
Alexandre Pasmantier 2024-11-28 00:34:32 +01:00 committed by GitHub
parent c96d855290
commit 128a6116c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -104,13 +104,13 @@ impl FilePreviewer {
let last_previewed = self.last_previewed.clone(); let last_previewed = self.last_previewed.clone();
tokio::spawn(async move { tokio::spawn(async move {
try_preview( try_preview(
entry_c, &entry_c,
path, &path,
cache, &cache,
syntax_set, &syntax_set,
syntax_theme, &syntax_theme,
concurrent_tasks, &concurrent_tasks,
last_previewed, &last_previewed,
); );
}); });
} }
@ -147,53 +147,51 @@ impl FilePreviewer {
} }
pub fn try_preview( pub fn try_preview(
entry: entry::Entry, entry: &entry::Entry,
path: PathBuf, path: &PathBuf,
cache: Arc<Mutex<PreviewCache>>, cache: &Arc<Mutex<PreviewCache>>,
syntax_set: Arc<SyntaxSet>, syntax_set: &Arc<SyntaxSet>,
syntax_theme: Arc<Theme>, syntax_theme: &Arc<Theme>,
concurrent_tasks: Arc<AtomicU8>, concurrent_tasks: &Arc<AtomicU8>,
last_previewed: Arc<Mutex<Arc<Preview>>>, last_previewed: &Arc<Mutex<Arc<Preview>>>,
) { ) {
debug!("Computing preview for {:?}", entry.name); debug!("Computing preview for {:?}", entry.name);
tokio::spawn(async move { // check file size
// check file size if get_file_size(path).map_or(false, |s| s > MAX_FILE_SIZE) {
if get_file_size(&path).map_or(false, |s| s > MAX_FILE_SIZE) { debug!("File too large: {:?}", entry.name);
debug!("File too large: {:?}", entry.name); let preview = meta::file_too_large(&entry.name);
let preview = meta::file_too_large(&entry.name); cache.lock().insert(entry.name.clone(), preview);
cache.lock().insert(entry.name.clone(), preview); }
}
if matches!(FileType::from(&path), FileType::Text) { if matches!(FileType::from(&path), FileType::Text) {
debug!("File is text-based: {:?}", entry.name); debug!("File is text-based: {:?}", entry.name);
match File::open(&path) { match File::open(path) {
Ok(file) => { Ok(file) => {
// compute the highlighted version in the background // compute the highlighted version in the background
let mut reader = BufReader::new(file); let mut reader = BufReader::new(file);
reader.seek(std::io::SeekFrom::Start(0)).unwrap(); reader.seek(std::io::SeekFrom::Start(0)).unwrap();
let preview = compute_highlighted_text_preview( let preview = compute_highlighted_text_preview(
&entry, entry,
reader, reader,
&syntax_set, syntax_set,
&syntax_theme, syntax_theme,
); );
cache.lock().insert(entry.name.clone(), preview.clone()); cache.lock().insert(entry.name.clone(), preview.clone());
let mut tp = last_previewed.lock(); let mut tp = last_previewed.lock();
*tp = preview; *tp = preview;
} }
Err(e) => { Err(e) => {
warn!("Error opening file: {:?}", e); warn!("Error opening file: {:?}", e);
let p = meta::not_supported(&entry.name); let p = meta::not_supported(&entry.name);
cache.lock().insert(entry.name.clone(), p); cache.lock().insert(entry.name.clone(), p);
}
} }
} else {
debug!("File isn't text-based: {:?}", entry.name);
let preview = meta::not_supported(&entry.name);
cache.lock().insert(entry.name.clone(), preview);
} }
concurrent_tasks.fetch_sub(1, Ordering::Relaxed); } else {
}); debug!("File isn't text-based: {:?}", entry.name);
let preview = meta::not_supported(&entry.name);
cache.lock().insert(entry.name.clone(), preview);
}
concurrent_tasks.fetch_sub(1, Ordering::Relaxed);
} }
fn compute_highlighted_text_preview( fn compute_highlighted_text_preview(