summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2022-07-01 10:56:48 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2022-07-01 10:56:48 -0400
commit18e13c98d364964df6bb481bb103e262f6e8f0a5 (patch)
tree487dd98305b83b7886be28cce58eb0807452da86
parent27d624c536f4ef9de2ddedc2be8dab330858afdc (diff)
add ability to check whether a preview is outdated
-rw-r--r--Cargo.lock12
-rw-r--r--src/config/preview.rs8
-rw-r--r--src/preview/preview_default.rs7
-rw-r--r--src/preview/preview_file.rs4
4 files changed, 20 insertions, 11 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 295b521..3219db2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -148,9 +148,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.9"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
+checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
dependencies = [
"cfg-if",
"once_cell",
@@ -893,9 +893,9 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
[[package]]
name = "smallvec"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
[[package]]
name = "str-buf"
@@ -1063,9 +1063,9 @@ checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
[[package]]
name = "unicode-normalization"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd"
dependencies = [
"tinyvec",
]
diff --git a/src/config/preview.rs b/src/config/preview.rs
index 7d0b0be..962c273 100644
--- a/src/config/preview.rs
+++ b/src/config/preview.rs
@@ -10,13 +10,13 @@ pub struct JoshutoPreviewEntry {
}
#[derive(Debug, Default, Deserialize)]
-struct JoshutoPreviewCrude {
+struct JoshutoPreviewRaw {
pub extension: Option<HashMap<String, JoshutoPreviewEntry>>,
pub mimetype: Option<HashMap<String, JoshutoPreviewEntry>>,
}
-impl From<JoshutoPreviewCrude> for JoshutoPreview {
- fn from(crude: JoshutoPreviewCrude) -> Self {
+impl From<JoshutoPreviewRaw> for JoshutoPreview {
+ fn from(crude: JoshutoPreviewRaw) -> Self {
let extension = crude.extension.unwrap_or_default();
let mimetype = crude.mimetype.unwrap_or_default();
@@ -35,6 +35,6 @@ pub struct JoshutoPreview {
impl TomlConfigFile for JoshutoPreview {
fn get_config(file_name: &str) -> Self {
- parse_to_config_file::<JoshutoPreviewCrude, JoshutoPreview>(file_name).unwrap_or_default()
+ parse_to_config_file::<JoshutoPreviewRaw, JoshutoPreview>(file_name).unwrap_or_default()
}
}
diff --git a/src/preview/preview_default.rs b/src/preview/preview_default.rs
index 8a216c9..bb5ea64 100644
--- a/src/preview/preview_default.rs
+++ b/src/preview/preview_default.rs
@@ -23,7 +23,12 @@ pub fn load_preview_path(context: &mut AppContext, p: path::PathBuf, metadata: J
let need_to_load = context
.preview_context_ref()
.get_preview_ref(p.as_path())
- .is_none();
+ .map(|p| {
+ p.as_ref()
+ .map(|p| p.modified < metadata.modified())
+ .unwrap_or(true)
+ })
+ .unwrap_or(true);
if need_to_load {
preview_file::Background::preview_path_with_script(context, p);
diff --git a/src/preview/preview_file.rs b/src/preview/preview_file.rs
index dac3ad2..f929b2e 100644
--- a/src/preview/preview_file.rs
+++ b/src/preview/preview_file.rs
@@ -1,6 +1,7 @@
use std::path;
use std::process::{Command, Output};
use std::thread;
+use std::time;
use crate::context::AppContext;
use crate::event::AppEvent;
@@ -10,6 +11,7 @@ pub struct FilePreview {
pub status: std::process::ExitStatus,
pub output: String,
pub index: usize,
+ pub modified: time::SystemTime,
}
impl std::convert::From<Output> for FilePreview {
@@ -17,9 +19,11 @@ impl std::convert::From<Output> for FilePreview {
let s = String::from_utf8_lossy(&output.stdout).to_string();
let s2 = s.replace('\t', " ");
let status = output.status;
+ let modified = time::SystemTime::now();
Self {
status,
output: s2,
+ modified,
index: 0,
}
}