Add an EnvelopeWrapper in compose
parent
d146c81d48
commit
5e7d73e6dc
|
@ -247,10 +247,11 @@ impl fmt::Display for Attachment {
|
|||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self.content_type {
|
||||
ContentType::MessageRfc822 => {
|
||||
let wrapper = EnvelopeWrapper::new(self.bytes().to_vec());
|
||||
write!(f, "message/rfc822: {} - {} - {}", wrapper.date(), wrapper.from_to_string(), wrapper.subject())
|
||||
}
|
||||
|
||||
match EnvelopeWrapper::new(self.bytes().to_vec()) {
|
||||
Ok(wrapper) => write!(f, "message/rfc822: {} - {} - {}", wrapper.date(), wrapper.from_to_string(), wrapper.subject()),
|
||||
Err(e) => write!(f, "{}", e),
|
||||
}
|
||||
},
|
||||
ContentType::Unsupported { .. } => {
|
||||
write!(f, "Data attachment of type {}", self.mime_type())
|
||||
}
|
||||
|
|
|
@ -224,15 +224,18 @@ impl Deref for EnvelopeWrapper {
|
|||
}
|
||||
|
||||
impl EnvelopeWrapper {
|
||||
pub fn new(buffer: Vec<u8>) -> Self {
|
||||
EnvelopeWrapper {
|
||||
envelope: Envelope::from_bytes(&buffer).unwrap(),
|
||||
pub fn new(buffer: Vec<u8>) -> Result<Self> {
|
||||
Ok(EnvelopeWrapper {
|
||||
envelope: Envelope::from_bytes(&buffer)?,
|
||||
buffer,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn update(&mut self, new_buffer: Vec<u8>) {
|
||||
*self = EnvelopeWrapper::new(new_buffer);
|
||||
// TODO: Propagate error.
|
||||
if let Ok(e) = EnvelopeWrapper::new(new_buffer) {
|
||||
*self = e;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn envelope(&self) -> &Envelope {
|
||||
|
@ -289,15 +292,15 @@ impl Envelope {
|
|||
flags: Flag::default(),
|
||||
}
|
||||
}
|
||||
pub fn from_bytes(bytes: &[u8]) -> Option<Envelope> {
|
||||
pub fn from_bytes(bytes: &[u8]) -> Result<Envelope> {
|
||||
let mut h = DefaultHasher::new();
|
||||
h.write(bytes);
|
||||
let mut e = Envelope::new(h.finish());
|
||||
let res = e.populate_headers(bytes).ok();
|
||||
if res.is_some() {
|
||||
return Some(e);
|
||||
return Ok(e);
|
||||
}
|
||||
None
|
||||
Err(MeliError::new("Couldn't parse mail."))
|
||||
}
|
||||
pub fn from_token(mut operation: Box<BackendOp>, hash: u64) -> Option<Envelope> {
|
||||
let mut e = Envelope::new(hash);
|
||||
|
|
|
@ -25,6 +25,7 @@ pub struct Composer {
|
|||
dirty: bool,
|
||||
mode: ViewMode,
|
||||
pager: Pager,
|
||||
buffer: String,
|
||||
}
|
||||
|
||||
impl Default for Composer {
|
||||
|
@ -33,6 +34,7 @@ impl Default for Composer {
|
|||
dirty: true,
|
||||
mode: ViewMode::Overview,
|
||||
pager: Pager::from_str("asdfs\nfdsfds\ndsfdsfs\n\n\n\naaaaaaaaaaaaaa\nfdgfd", None),
|
||||
buffer: String::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +56,10 @@ impl Component for Composer {
|
|||
if self.dirty {
|
||||
clear_area(grid, area);
|
||||
}
|
||||
if !self.buffer.is_empty() {
|
||||
eprintln!("{:?}", EnvelopeWrapper::new(self.buffer.as_bytes().to_vec()));
|
||||
|
||||
}
|
||||
let upper_left = upper_left!(area);
|
||||
let bottom_right = bottom_right!(area);
|
||||
|
||||
|
@ -109,7 +115,11 @@ impl Component for Composer {
|
|||
{
|
||||
context.input_kill();
|
||||
}
|
||||
let mut f = create_temp_file(&new_draft(context), None);
|
||||
let mut f = if self.buffer.is_empty() {
|
||||
create_temp_file(&new_draft(context), None)
|
||||
} else {
|
||||
create_temp_file(&self.buffer.as_bytes(), None)
|
||||
};
|
||||
//let mut f = Box::new(std::fs::File::create(&dir).unwrap());
|
||||
|
||||
// TODO: check exit status
|
||||
|
@ -120,7 +130,9 @@ impl Component for Composer {
|
|||
.stdout(Stdio::inherit())
|
||||
.output()
|
||||
.expect("failed to execute process");
|
||||
self.pager.update_from_string(f.read_to_string());
|
||||
let result = f.read_to_string();
|
||||
self.buffer = result.clone();
|
||||
self.pager.update_from_string(result);
|
||||
context.restore_input();
|
||||
self.dirty = true;
|
||||
return;
|
||||
|
|
|
@ -388,8 +388,20 @@ impl Component for MailView {
|
|||
match u.content_type() {
|
||||
ContentType::MessageRfc822 => {
|
||||
self.mode = ViewMode::Subview;
|
||||
let wrapper = EnvelopeWrapper::new(u.bytes().to_vec());
|
||||
self.subview = Some(Box::new(EnvelopeView::new(wrapper, None, None)));
|
||||
match EnvelopeWrapper::new(u.bytes().to_vec()) {
|
||||
Ok(wrapper) => {
|
||||
self.subview = Some(Box::new(EnvelopeView::new(wrapper, None, None)));
|
||||
},
|
||||
Err(e) => {
|
||||
context.replies.push_back(UIEvent {
|
||||
id: 0,
|
||||
event_type: UIEventType::StatusNotification(
|
||||
format!("{}", e)
|
||||
),
|
||||
});
|
||||
}
|
||||
}
|
||||
return;
|
||||
},
|
||||
|
||||
ContentType::Text { .. } => {
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
|
Loading…
Reference in New Issue