diff --git a/CHANGELOG.md b/CHANGELOG.md index 7581689..1e841b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Default page size to config [#96] - Custom config path [#86] +- Setting idle-hook-cmds + +### Fixed + +- Improve config compatibility on Windows [#111](https://github.com/soywod/himalaya/pull/111) ## [0.2.6] - 2021-04-17 diff --git a/src/config/model.rs b/src/config/model.rs index 7a4e686..4352a6e 100644 --- a/src/config/model.rs +++ b/src/config/model.rs @@ -1,7 +1,8 @@ use error_chain::error_chain; use lettre::transport::smtp::authentication::Credentials as SmtpCredentials; +use log::debug; use serde::Deserialize; -use std::{collections::HashMap, env, fs::File, io::Read, path::PathBuf}; +use std::{collections::HashMap, env, fs::File, io::Read, path::PathBuf, thread}; use toml; use crate::output::utils::run_cmd; @@ -103,6 +104,9 @@ pub struct Config { pub signature: Option, pub default_page_size: Option, + #[serde(default)] + pub idle_hook_cmds: Vec, + #[serde(flatten)] pub accounts: HashMap, } @@ -199,7 +203,7 @@ impl Config { let cmd = self .notify_cmd .as_ref() - .map(|s| format!(r#"{} "{}" "{}""#, s, subject, sender)) + .map(|cmd| format!(r#"{} {:?} {:?}"#, cmd, subject, sender)) .unwrap_or(default_cmd); run_cmd(&cmd).chain_err(|| "Cannot run notify cmd")?; @@ -224,4 +228,19 @@ impl Config { .unwrap() .to_owned() } + + pub fn exec_idle_hooks(&self) -> Result<()> { + let cmds = self.idle_hook_cmds.to_owned(); + + thread::spawn(move || { + debug!("batch execution of {} cmd(s)", cmds.len()); + cmds.iter().for_each(|cmd| { + debug!("execute cmd {:?}", cmd); + let res = run_cmd(&cmd); + debug!("res: {:?}", res); + }) + }); + + Ok(()) + } } diff --git a/src/imap/model.rs b/src/imap/model.rs index 0392ff7..7ca1f27 100644 --- a/src/imap/model.rs +++ b/src/imap/model.rs @@ -164,6 +164,7 @@ impl<'ic> ImapConnector<'ic> { } } + config.exec_idle_hooks()?; debug!("[imap::model::idle] end loop"); } } diff --git a/vim/autoload/himalaya/msg.vim b/vim/autoload/himalaya/msg.vim index d1a6d80..741e00c 100644 --- a/vim/autoload/himalaya/msg.vim +++ b/vim/autoload/himalaya/msg.vim @@ -33,15 +33,15 @@ function! himalaya#msg#list_with(mbox, page, should_throw) endfunction function! himalaya#msg#list() - try + " try let mbox = himalaya#mbox#curr_mbox() let page = himalaya#mbox#curr_page() call himalaya#msg#list_with(mbox, page, 0) - catch - if !empty(v:exception) - redraw | call himalaya#shared#log#err(v:exception) - endif - endtry + " catch + " if !empty(v:exception) + " redraw | call himalaya#shared#log#err(v:exception) + " endif + " endtry endfunction function! himalaya#msg#read() diff --git a/wiki b/wiki index dca4845..a022c95 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit dca48456982e1d214c0a21d5bf9bcf8b6fc1a759 +Subproject commit a022c9580de7f4837cd1e6b028f8da7be96787b8