summaryrefslogtreecommitdiffstats
path: root/src/config/general/preview_crude.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/general/preview_crude.rs')
-rw-r--r--src/config/general/preview_crude.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/config/general/preview_crude.rs b/src/config/general/preview_crude.rs
new file mode 100644
index 0000000..0d9c670
--- /dev/null
+++ b/src/config/general/preview_crude.rs
@@ -0,0 +1,51 @@
+use std::convert::From;
+use std::path;
+
+use serde_derive::Deserialize;
+
+use crate::config::option::PreviewOption;
+use crate::config::search_directories;
+use crate::CONFIG_HIERARCHY;
+
+pub const fn default_max_preview_size() -> u64 {
+ 2 * 1024 * 1024 // 2 MB
+}
+
+#[derive(Clone, Debug, Deserialize)]
+pub struct PreviewOptionCrude {
+ #[serde(default = "default_max_preview_size")]
+ pub max_preview_size: u64,
+ #[serde(default)]
+ pub preview_images: bool,
+ #[serde(default)]
+ pub preview_script: Option<String>,
+}
+
+impl std::default::Default for PreviewOptionCrude {
+ fn default() -> Self {
+ Self {
+ max_preview_size: default_max_preview_size(),
+ preview_images: false,
+ preview_script: None,
+ }
+ }
+}
+
+impl From<PreviewOptionCrude> for PreviewOption {
+ fn from(crude: PreviewOptionCrude) -> Self {
+ let preview_script = match crude.preview_script {
+ Some(s) => {
+ let tilde_cow = shellexpand::tilde_with_context(s.as_str(), dirs_next::home_dir);
+ let tilde_path = path::PathBuf::from(tilde_cow.as_ref());
+ Some(tilde_path)
+ }
+ None => search_directories("preview.sh", &CONFIG_HIERARCHY),
+ };
+
+ Self {
+ max_preview_size: crude.max_preview_size,
+ preview_images: crude.preview_images,
+ preview_script,
+ }
+ }
+}