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,18 +147,17 @@ 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);
@ -166,16 +165,16 @@ pub fn try_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();
@ -193,7 +192,6 @@ pub fn try_preview(
cache.lock().insert(entry.name.clone(), preview); cache.lock().insert(entry.name.clone(), preview);
} }
concurrent_tasks.fetch_sub(1, Ordering::Relaxed); concurrent_tasks.fetch_sub(1, Ordering::Relaxed);
});
} }
fn compute_highlighted_text_preview( fn compute_highlighted_text_preview(