summaryrefslogtreecommitdiffstats
path: root/src
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 /src
parent27d624c536f4ef9de2ddedc2be8dab330858afdc (diff)
add ability to check whether a preview is outdated
Diffstat (limited to 'src')
-rw-r--r--src/config/preview.rs8
-rw-r--r--src/preview/preview_default.rs7
-rw-r--r--src/preview/preview_file.rs4
3 files changed, 14 insertions, 5 deletions
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,
}
}