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 folders(&self) -> Vec<Folder>;
fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp>;
fn save(&self, message: String, folder: &str) -> Result<()>;
//login function
}

View File

@ -27,7 +27,7 @@ extern crate xdg;
use super::{MaildirFolder, MaildirOp};
use async::*;
use conf::AccountSettings;
use error::Result;
use error::{Result, MeliError};
use mailbox::backends::{
BackendFolder, BackendOp, Folder, FolderHash, MailBackend, RefreshEvent, RefreshEventConsumer,
RefreshEventKind::*,
@ -49,6 +49,7 @@ use std::ffi::OsStr;
use std::fs;
use std::hash::{Hash, Hasher};
use std::io;
use std::io::Write;
use std::ops::{Deref, DerefMut};
use std::path::{Component, Path, PathBuf};
use std::result;
@ -327,9 +328,27 @@ impl MailBackend for MaildirType {
})?;
Ok(())
}
fn operation(&self, hash: EnvelopeHash, folder_hash: FolderHash) -> Box<BackendOp> {
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 {

View File

@ -401,7 +401,11 @@ impl Component for Composer {
}
('n', _) => {},
('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 {
id: 0,
event_type: UIEventType::Action(Tab(Kill(*u))),

View File

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

View File

@ -299,6 +299,10 @@ impl Account {
self.load_mailbox(index, m);
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 {