melib/jmap: add jmap-trace feature
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>pull/279/head
parent
3433f7c41e
commit
f7a4741bf1
|
@ -71,6 +71,7 @@ http-static = ["isahc", "isahc/static-curl"]
|
||||||
imap = ["imap-codec", "tls"]
|
imap = ["imap-codec", "tls"]
|
||||||
imap-trace = ["imap"]
|
imap-trace = ["imap"]
|
||||||
jmap = ["http"]
|
jmap = ["http"]
|
||||||
|
jmap-trace = ["jmap"]
|
||||||
nntp = ["tls"]
|
nntp = ["tls"]
|
||||||
nntp-trace = ["nntp"]
|
nntp-trace = ["nntp"]
|
||||||
maildir = ["notify"]
|
maildir = ["notify"]
|
||||||
|
|
|
@ -280,14 +280,15 @@ impl JmapConnection {
|
||||||
} else {
|
} else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let api_url = self.session.lock().unwrap().api_url.clone();
|
let mut res = self.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
let mut res = self
|
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
debug!(&res_text);
|
if cfg!(feature = "jmap-trace") {
|
||||||
|
log::trace!(
|
||||||
|
"email_changes(): for mailbox {mailbox_hash} response {:?}",
|
||||||
|
res_text
|
||||||
|
);
|
||||||
|
}
|
||||||
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
*self.store.online_status.lock().await = (Instant::now(), Err(err.clone()));
|
*self.store.online_status.lock().await = (Instant::now(), Err(err.clone()));
|
||||||
|
@ -410,8 +411,16 @@ impl JmapConnection {
|
||||||
}
|
}
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
debug!(mailbox_hash);
|
log::error!(
|
||||||
debug!(err);
|
"Could not deserialize EmailQueryChangesResponse from server response:
|
||||||
|
- mailbox_hash: {mailbox_hash}
|
||||||
|
- error: {err}
|
||||||
|
- debug details:
|
||||||
|
Json request was: {:?}
|
||||||
|
Json reply was: {}",
|
||||||
|
serde_json::to_string(&req),
|
||||||
|
res_text
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let GetResponse::<EmailObject> { list, .. } =
|
let GetResponse::<EmailObject> { list, .. } =
|
||||||
|
@ -456,11 +465,15 @@ impl JmapConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn send_request(&self, request: String) -> Result<String> {
|
pub async fn send_request(&self, request: String) -> Result<String> {
|
||||||
let api_url = self.session.lock().unwrap().api_url.clone();
|
if cfg!(feature = "jmap-trace") {
|
||||||
let mut res = self.client.post_async(api_url.as_str(), request).await?;
|
log::trace!("send_request(): request {:?}", request);
|
||||||
|
}
|
||||||
|
let mut res = self.post_async(None, request).await?;
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
debug!(&res_text);
|
if cfg!(feature = "jmap-trace") {
|
||||||
|
log::trace!("send_request(): response {:?}", res_text);
|
||||||
|
}
|
||||||
let _: MethodResponse = match deserialize_from_str(&res_text) {
|
let _: MethodResponse = match deserialize_from_str(&res_text) {
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
log::error!("{}", &err);
|
log::error!("{}", &err);
|
||||||
|
@ -471,4 +484,34 @@ impl JmapConnection {
|
||||||
};
|
};
|
||||||
Ok(res_text)
|
Ok(res_text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_async(&self, url: &str) -> Result<isahc::Response<isahc::AsyncBody>> {
|
||||||
|
if cfg!(feature = "jmap-trace") {
|
||||||
|
let res = self.client.get_async(url).await;
|
||||||
|
log::trace!("get_async(): url `{}` response {:?}", url, res);
|
||||||
|
Ok(res?)
|
||||||
|
} else {
|
||||||
|
Ok(self.client.get_async(url).await?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn post_async<T: Into<Vec<u8>> + Send + Sync>(
|
||||||
|
&self,
|
||||||
|
api_url: Option<&str>,
|
||||||
|
request: T,
|
||||||
|
) -> Result<isahc::Response<isahc::AsyncBody>> {
|
||||||
|
let request: Vec<u8> = request.into();
|
||||||
|
if cfg!(feature = "jmap-trace") {
|
||||||
|
log::trace!(
|
||||||
|
"post_async(): request {:?}",
|
||||||
|
String::from_utf8_lossy(&request)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if let Some(api_url) = api_url {
|
||||||
|
Ok(self.client.post_async(api_url, request).await?)
|
||||||
|
} else {
|
||||||
|
let api_url = self.session.lock().unwrap().api_url.clone();
|
||||||
|
Ok(self.client.post_async(api_url.as_str(), request).await?)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -423,14 +423,13 @@ impl MailBackend for JmapType {
|
||||||
* 1. upload binary blob, get blobId
|
* 1. upload binary blob, get blobId
|
||||||
* 2. Email/import
|
* 2. Email/import
|
||||||
*/
|
*/
|
||||||
let (api_url, upload_url) = {
|
let upload_url = { conn.session.lock().unwrap().upload_url.clone() };
|
||||||
let lck = conn.session.lock().unwrap();
|
|
||||||
(lck.api_url.clone(), lck.upload_url.clone())
|
|
||||||
};
|
|
||||||
let mut res = conn
|
let mut res = conn
|
||||||
.client
|
|
||||||
.post_async(
|
.post_async(
|
||||||
&upload_request_format(upload_url.as_str(), &conn.mail_account_id()),
|
Some(&upload_request_format(
|
||||||
|
upload_url.as_str(),
|
||||||
|
&conn.mail_account_id(),
|
||||||
|
)),
|
||||||
bytes,
|
bytes,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -472,10 +471,7 @@ impl MailBackend for JmapType {
|
||||||
.emails(email_imports);
|
.emails(email_imports);
|
||||||
|
|
||||||
req.add_call(&import_call);
|
req.add_call(&import_call);
|
||||||
let mut res = conn
|
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
|
|
||||||
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
||||||
|
@ -549,12 +545,8 @@ impl MailBackend for JmapType {
|
||||||
|
|
||||||
let mut req = Request::new(conn.request_no.clone());
|
let mut req = Request::new(conn.request_no.clone());
|
||||||
req.add_call(&email_call);
|
req.add_call(&email_call);
|
||||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
|
||||||
|
|
||||||
let mut res = conn
|
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
||||||
|
@ -672,7 +664,6 @@ impl MailBackend for JmapType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let conn = connection.lock().await;
|
let conn = connection.lock().await;
|
||||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
|
||||||
|
|
||||||
let email_set_call: EmailSet = EmailSet::new(
|
let email_set_call: EmailSet = EmailSet::new(
|
||||||
Set::<EmailObject>::new()
|
Set::<EmailObject>::new()
|
||||||
|
@ -683,10 +674,7 @@ impl MailBackend for JmapType {
|
||||||
let mut req = Request::new(conn.request_no.clone());
|
let mut req = Request::new(conn.request_no.clone());
|
||||||
let _prev_seq = req.add_call(&email_set_call);
|
let _prev_seq = req.add_call(&email_set_call);
|
||||||
|
|
||||||
let mut res = conn
|
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
|
|
||||||
|
@ -789,12 +777,8 @@ impl MailBackend for JmapType {
|
||||||
);
|
);
|
||||||
|
|
||||||
req.add_call(&email_call);
|
req.add_call(&email_call);
|
||||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
|
||||||
//debug!(serde_json::to_string(&req)?);
|
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
let mut res = conn
|
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -62,7 +62,6 @@ impl BackendOp for JmapOp {
|
||||||
conn.connect().await?;
|
conn.connect().await?;
|
||||||
let download_url = conn.session.lock().unwrap().download_url.clone();
|
let download_url = conn.session.lock().unwrap().download_url.clone();
|
||||||
let mut res = conn
|
let mut res = conn
|
||||||
.client
|
|
||||||
.get_async(&download_request_format(
|
.get_async(&download_request_format(
|
||||||
download_url.as_str(),
|
download_url.as_str(),
|
||||||
&conn.mail_account_id(),
|
&conn.mail_account_id(),
|
||||||
|
|
|
@ -185,11 +185,7 @@ pub async fn get_message_list(
|
||||||
let mut req = Request::new(conn.request_no.clone());
|
let mut req = Request::new(conn.request_no.clone());
|
||||||
req.add_call(&email_call);
|
req.add_call(&email_call);
|
||||||
|
|
||||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||||
let mut res = conn
|
|
||||||
.client
|
|
||||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
||||||
|
@ -216,8 +212,7 @@ pub async fn get_message(conn: &JmapConnection, ids: &[String]) -> Result<Vec<En
|
||||||
let mut req = Request::new(conn.request_no.clone());
|
let mut req = Request::new(conn.request_no.clone());
|
||||||
req.add_call(&email_call);
|
req.add_call(&email_call);
|
||||||
let mut res = conn
|
let mut res = conn
|
||||||
.client
|
.post_async(None, serde_json::to_string(&req)?)
|
||||||
.post_async(&conn.session.api_url, serde_json::to_string(&req)?)
|
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let res_text = res.text().await?;
|
let res_text = res.text().await?;
|
||||||
|
|
Loading…
Reference in New Issue