ui: save draft to draft_folder

tracking-issue: #38
embed
Manos Pitsidianakis 2019-02-16 16:37:14 +02:00
parent 7ff22229a9
commit 30b1808bdb
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
5 changed files with 32 additions and 2 deletions

View File

@ -150,6 +150,8 @@ pub trait MailBackend: ::std::fmt::Debug {
fn watch(&self, sender: RefreshEventConsumer) -> Result<()>; fn watch(&self, sender: RefreshEventConsumer) -> Result<()>;
fn folders(&self) -> Vec<Folder>; fn folders(&self) -> Vec<Folder>;
fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp>; fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp>;
fn save(&self, message: String, folder: &str) -> Result<()>;
//login function //login function
} }

View File

@ -27,7 +27,7 @@ extern crate xdg;
use super::{MaildirFolder, MaildirOp}; use super::{MaildirFolder, MaildirOp};
use async::*; use async::*;
use conf::AccountSettings; use conf::AccountSettings;
use error::Result; use error::{Result, MeliError};
use mailbox::backends::{ use mailbox::backends::{
BackendFolder, BackendOp, Folder, FolderHash, MailBackend, RefreshEvent, RefreshEventConsumer, BackendFolder, BackendOp, Folder, FolderHash, MailBackend, RefreshEvent, RefreshEventConsumer,
RefreshEventKind::*, RefreshEventKind::*,
@ -49,6 +49,7 @@ use std::ffi::OsStr;
use std::fs; use std::fs;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use std::io; use std::io;
use std::io::Write;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use std::path::{Component, Path, PathBuf}; use std::path::{Component, Path, PathBuf};
use std::result; use std::result;
@ -327,9 +328,27 @@ impl MailBackend for MaildirType {
})?; })?;
Ok(()) Ok(())
} }
fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp> { fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp> {
Box::new(MaildirOp::new(hash, self.hash_indexes.clone(), folder_hash)) Box::new(MaildirOp::new(hash, self.hash_indexes.clone(), folder_hash))
} }
fn save(&self, message: String, folder: &str) -> Result<()> {
for f in &self.folders {
if f.name == folder {
let mut path = f.path.clone();
path.push("cur");
path.push("draft:2,");
eprintln!("saving at {}", path.display());
let file = fs::File::create(path)?;
let mut writer = io::BufWriter::new(file);
writer.write(&message.into_bytes());
return Ok(());
}
}
Err(MeliError::new(format!("'{}' is not a valid folder.", folder)))
}
} }
impl MaildirType { impl MaildirType {

View File

@ -401,7 +401,11 @@ impl Component for Composer {
} }
('n', _) => {}, ('n', _) => {},
('y', ViewMode::Discard(u)) => { ('y', ViewMode::Discard(u)) => {
eprintln!("{:?}", self.draft.to_string()); let account = &context.accounts[self.account_cursor];
let draft = std::mem::replace(&mut self.draft, Draft::default());
eprintln!("{:?}", account.save_draft(draft));
//eprintln!("{:?}", self.draft.to_string());
context.replies.push_back(UIEvent { context.replies.push_back(UIEvent {
id: 0, id: 0,
event_type: UIEventType::Action(Tab(Kill(*u))), event_type: UIEventType::Action(Tab(Kill(*u))),

View File

@ -60,6 +60,7 @@ pub struct FileAccount {
root_folder: String, root_folder: String,
format: String, format: String,
sent_folder: String, sent_folder: String,
draft_folder: String,
identity: String, identity: String,
display_name: Option<String>, display_name: Option<String>,
threaded: bool, threaded: bool,

View File

@ -299,6 +299,10 @@ impl Account {
self.load_mailbox(index, m); self.load_mailbox(index, m);
Ok(()) Ok(())
} }
pub fn save_draft(&self, draft: Draft) -> Result<()> {
self.backend.save(draft.to_string()?, &self.settings.conf.draft_folder)
}
} }
impl Index<usize> for Account { impl Index<usize> for Account {