mirror of
https://github.com/pimalaya/himalaya.git
synced 2026-06-17 13:17:55 +08:00
158bc86cfa
* make use of mailparse::MailAddr * move addr logic to a dedicated file * update changelog * add suffix to downoalded attachments with same name (#204) * implement sort command (#34) * introduce backends structure (#296) * implement backend structure poc * improve config namings * improve account namings and structure * rename imap vars to backend * maildir backend (#299) * refactor config system, preparing maildir backend * rename deserializable by deserialized * wrap backend in a Box * reword backend trait methods * merge list envelopes functions * remove find_raw_msg from backend trait * remove expunge fn from backend trait * rename add_msg from backend trait * init maildir integration tests, start impl maildir backend fns * implement remaining methods maildir backend, refactor trait * improve backend trait, add copy and move fns * remove usage of Mbox in handlers * reorganize backends folder structure * move mbox out of domain folder * rename mbox entities * improve mbox structure * remove unused files, move smtp module * improve envelope, impl get_envelopes for maildir * link maildir mail entry id to envelope id * use erased-serde to make backend get_mboxes return a trait object * remove unused mbox files * rename Output trait * make get_envelopes return a trait object * remove unused impl for imap envelope * update backend return signature with Box * replace impl from imap::Fetch to mailparse::ParsedMail * split flags by backends * remove unused flags from msg * remove remaining flags from domain * impl maildir copy and move, improve maildir e2e tests * set up imap backend e2e tests * move domain/msg to msg * repair broken tests * fix maildir envelopes encoding issues * add date column to maildir envelopes * implement maildir list pagination * improve maildir subdir path management * add pgp and maildir features to readme * update changelog * bump version v0.5.6
32 lines
915 B
Rust
32 lines
915 B
Rust
use anyhow::{Context, Result};
|
|
use log::debug;
|
|
use std::{env, fs, process::Command};
|
|
|
|
use crate::msg::msg_utils;
|
|
|
|
pub fn open_with_tpl(tpl: String) -> Result<String> {
|
|
let path = msg_utils::local_draft_path();
|
|
|
|
debug!("create draft");
|
|
fs::write(&path, tpl.as_bytes()).context(format!("cannot write local draft at {:?}", path))?;
|
|
|
|
debug!("open editor");
|
|
Command::new(env::var("EDITOR").context(r#"cannot find "$EDITOR" env var"#)?)
|
|
.arg(&path)
|
|
.status()
|
|
.context("cannot launch editor")?;
|
|
|
|
debug!("read draft");
|
|
let content =
|
|
fs::read_to_string(&path).context(format!("cannot read local draft at {:?}", path))?;
|
|
|
|
Ok(content)
|
|
}
|
|
|
|
pub fn open_with_draft() -> Result<String> {
|
|
let path = msg_utils::local_draft_path();
|
|
let tpl =
|
|
fs::read_to_string(&path).context(format!("cannot read local draft at {:?}", path))?;
|
|
open_with_tpl(tpl)
|
|
}
|