|
@@ -1,5 +1,5 @@
|
|
|
use std::error::Error;
|
|
|
-use super::util::xml_safe as x;
|
|
|
+use super::util::{parse_email, xml_safe as x};
|
|
|
use crate::models::*;
|
|
|
use crate::templates::PAGE_SIZE;
|
|
|
use crate::util::*;
|
|
@@ -208,18 +208,6 @@ impl MailAddress {
|
|
|
}
|
|
|
|
|
|
impl Thread {
|
|
|
- fn extract_html_content(&self, part: &ParsedMail) -> Option<String> {
|
|
|
- if part.ctype.mimetype == "text/html" {
|
|
|
- return part.get_body().ok();
|
|
|
- }
|
|
|
- for subpart in &part.subparts {
|
|
|
- if let Some(html) = self.extract_html_content(subpart) {
|
|
|
- return Some(html);
|
|
|
- }
|
|
|
- }
|
|
|
- None
|
|
|
- }
|
|
|
-
|
|
|
fn retrieve_attachments(parsed_mail: ParsedMail, dir_parent: PathBuf, file_name: String) -> io::Result<Vec<PathBuf>> {
|
|
|
// lists of all paths to attachments
|
|
|
let mut paths = Vec::new();
|
|
@@ -256,19 +244,6 @@ impl Thread {
|
|
|
Ok(paths)
|
|
|
}
|
|
|
|
|
|
- fn parse_email(&self, parsed_mail: &ParsedMail) -> Result<String, Box<dyn Error>> {
|
|
|
- if let Some(html_content) = self.extract_html_content(&parsed_mail) {
|
|
|
- return Ok(html_content.replace("\r\n", ""));
|
|
|
- } else if parsed_mail.ctype.mimetype.starts_with("text/plain") {
|
|
|
- // Convert plain text to simple HTML
|
|
|
- let plain_text = parsed_mail.get_body()?.replace("\r\n", "<br>");
|
|
|
- let html_content = format!("<html><body>{}</body></html>", plain_text);
|
|
|
- return Ok(html_content);
|
|
|
- }
|
|
|
-
|
|
|
- Err(From::from("No HTML or text content found"))
|
|
|
- }
|
|
|
-
|
|
|
pub fn to_html(&self, out_dir: PathBuf) -> String {
|
|
|
fn extract_styles(html: &str) -> String {
|
|
|
let style_pattern = Regex::new(r"(?is)<style[^>]*>(.*?)</style>").unwrap();
|
|
@@ -379,7 +354,7 @@ impl Thread {
|
|
|
}
|
|
|
);
|
|
|
|
|
|
- let data = match fs::read_to_string(&msg.original_path) {
|
|
|
+ let data = match fs::read_to_string(&msg.original_path.clone()) {
|
|
|
Ok(content) => content,
|
|
|
Err(e) => {
|
|
|
eprintln!("Error reading file: {}", e);
|
|
@@ -392,7 +367,7 @@ impl Thread {
|
|
|
Err(e) => return format!("Error parsing email: {}", e),
|
|
|
};
|
|
|
|
|
|
- let html = self.parse_email(&parsed_mail).unwrap_or_else(|_| msg.body.clone());
|
|
|
+ let html = parse_email(&parsed_mail).unwrap_or_else(|_| msg.body.clone());
|
|
|
let styles = extract_styles(&html);
|
|
|
let mut body_content = remove_style_tags(&extract_body(&html));
|
|
|
body_content = purple_numbers(&*body_content, "#");
|