mirror of
https://github.com/alexpasmantier/television.git
synced 2025-06-07 12:05:34 +00:00
fix(preview): remove redundant tokio task when generating builtin file previews (#86)
This commit is contained in:
parent
c96d855290
commit
128a6116c3
@ -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(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user