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-trace = ["imap"]
|
||||
jmap = ["http"]
|
||||
jmap-trace = ["jmap"]
|
||||
nntp = ["tls"]
|
||||
nntp-trace = ["nntp"]
|
||||
maildir = ["notify"]
|
||||
|
|
|
@ -280,14 +280,15 @@ impl JmapConnection {
|
|||
} else {
|
||||
return Ok(());
|
||||
}
|
||||
let api_url = self.session.lock().unwrap().api_url.clone();
|
||||
let mut res = self
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
let mut res = self.post_async(None, serde_json::to_string(&req)?).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) {
|
||||
Err(err) => {
|
||||
*self.store.online_status.lock().await = (Instant::now(), Err(err.clone()));
|
||||
|
@ -410,8 +411,16 @@ impl JmapConnection {
|
|||
}
|
||||
Ok(_) => {}
|
||||
Err(err) => {
|
||||
debug!(mailbox_hash);
|
||||
debug!(err);
|
||||
log::error!(
|
||||
"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, .. } =
|
||||
|
@ -456,11 +465,15 @@ impl JmapConnection {
|
|||
}
|
||||
|
||||
pub async fn send_request(&self, request: String) -> Result<String> {
|
||||
let api_url = self.session.lock().unwrap().api_url.clone();
|
||||
let mut res = self.client.post_async(api_url.as_str(), request).await?;
|
||||
if cfg!(feature = "jmap-trace") {
|
||||
log::trace!("send_request(): request {:?}", request);
|
||||
}
|
||||
let mut res = self.post_async(None, request).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) {
|
||||
Err(err) => {
|
||||
log::error!("{}", &err);
|
||||
|
@ -471,4 +484,34 @@ impl JmapConnection {
|
|||
};
|
||||
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
|
||||
* 2. Email/import
|
||||
*/
|
||||
let (api_url, upload_url) = {
|
||||
let lck = conn.session.lock().unwrap();
|
||||
(lck.api_url.clone(), lck.upload_url.clone())
|
||||
};
|
||||
let upload_url = { conn.session.lock().unwrap().upload_url.clone() };
|
||||
let mut res = conn
|
||||
.client
|
||||
.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,
|
||||
)
|
||||
.await?;
|
||||
|
@ -472,10 +471,7 @@ impl MailBackend for JmapType {
|
|||
.emails(email_imports);
|
||||
|
||||
req.add_call(&import_call);
|
||||
let mut res = conn
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||
let res_text = res.text().await?;
|
||||
|
||||
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());
|
||||
req.add_call(&email_call);
|
||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
||||
|
||||
let mut res = conn
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||
|
||||
let res_text = res.text().await?;
|
||||
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
|
||||
|
@ -672,7 +664,6 @@ impl MailBackend for JmapType {
|
|||
}
|
||||
}
|
||||
let conn = connection.lock().await;
|
||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
||||
|
||||
let email_set_call: EmailSet = EmailSet::new(
|
||||
Set::<EmailObject>::new()
|
||||
|
@ -683,10 +674,7 @@ impl MailBackend for JmapType {
|
|||
let mut req = Request::new(conn.request_no.clone());
|
||||
let _prev_seq = req.add_call(&email_set_call);
|
||||
|
||||
let mut res = conn
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||
|
||||
let res_text = res.text().await?;
|
||||
|
||||
|
@ -789,12 +777,8 @@ impl MailBackend for JmapType {
|
|||
);
|
||||
|
||||
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
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
|
||||
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||
|
||||
let res_text = res.text().await?;
|
||||
/*
|
||||
|
|
|
@ -62,7 +62,6 @@ impl BackendOp for JmapOp {
|
|||
conn.connect().await?;
|
||||
let download_url = conn.session.lock().unwrap().download_url.clone();
|
||||
let mut res = conn
|
||||
.client
|
||||
.get_async(&download_request_format(
|
||||
download_url.as_str(),
|
||||
&conn.mail_account_id(),
|
||||
|
|
|
@ -185,11 +185,7 @@ pub async fn get_message_list(
|
|||
let mut req = Request::new(conn.request_no.clone());
|
||||
req.add_call(&email_call);
|
||||
|
||||
let api_url = conn.session.lock().unwrap().api_url.clone();
|
||||
let mut res = conn
|
||||
.client
|
||||
.post_async(api_url.as_str(), serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
|
||||
|
||||
let res_text = res.text().await?;
|
||||
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());
|
||||
req.add_call(&email_call);
|
||||
let mut res = conn
|
||||
.client
|
||||
.post_async(&conn.session.api_url, serde_json::to_string(&req)?)
|
||||
.post_async(None, serde_json::to_string(&req)?)
|
||||
.await?;
|
||||
|
||||
let res_text = res.text().await?;
|
||||
|
|
Loading…
Reference in New Issue