melib/jmap: call req text(). asap

Call text() on a RequestBody as soon as it is returned, to avoid
exceeding timeout values, according to isahc documentation.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/458/head
Manos Pitsidianakis 3 months ago
parent f3d59ebf64
commit 8e300c4661
No known key found for this signature in database
GPG Key ID: 7729C7707F7E09D0

@ -278,8 +278,11 @@ impl JmapConnection {
let mut req = Request::new(self.request_no.clone());
let identity_get = IdentityGet::new().account_id(mail_account_id.clone());
req.add_call(&identity_get).await;
let mut res_text = self.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res_text.text().await?;
let res_text = self
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = self
@ -331,8 +334,11 @@ impl JmapConnection {
})),
);
req.add_call(&identity_set).await;
let mut res_text = self.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res_text.text().await?;
let res_text = self
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let _: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = self
@ -347,8 +353,11 @@ impl JmapConnection {
let mut req = Request::new(self.request_no.clone());
let identity_get = IdentityGet::new().account_id(mail_account_id.clone());
req.add_call(&identity_get).await;
let mut res_text = self.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res_text.text().await?;
let res_text = self
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = self
@ -457,9 +466,11 @@ impl JmapConnection {
} else {
return Ok(());
}
let mut res = self.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res.text().await?;
let res_text = self
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
if cfg!(feature = "jmap-trace") {
log::trace!(
"email_changes(): for mailbox {mailbox_hash} response {:?}",
@ -642,9 +653,7 @@ impl JmapConnection {
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?;
let res_text = self.post_async(None, request).await?.text().await?;
if cfg!(feature = "jmap-trace") {
log::trace!("send_request(): response {:?}", res_text);
}

@ -537,11 +537,13 @@ impl MailBackend for JmapType {
let g = conn.session_guard().await?;
(g.upload_url.clone(), g.mail_account_id())
};
let mut res = conn
let res_text = conn
.post_async(
Some(&upload_request_format(&upload_url, &mail_account_id)?),
bytes,
)
.await?
.text()
.await?;
let mailbox_id: Id<mailbox::MailboxObject> = {
@ -555,7 +557,6 @@ impl MailBackend for JmapType {
)));
}
};
let res_text = res.text().await?;
let upload_response: UploadResponse = match deserialize_from_str(&res_text) {
Err(err) => {
@ -578,8 +579,12 @@ impl MailBackend for JmapType {
});
req.add_call(&import_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res.text().await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
@ -656,9 +661,12 @@ impl MailBackend for JmapType {
let mut req = Request::new(conn.request_no.clone());
req.add_call(&email_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let res_text = res.text().await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = conn.store.online_status.set(None, Err(err.clone())).await;
@ -832,9 +840,11 @@ impl MailBackend for JmapType {
let mut req = Request::new(conn.request_no.clone());
let _prev_seq = req.add_call(&email_set_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res.text().await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
@ -951,17 +961,12 @@ impl MailBackend for JmapType {
req.add_call(&email_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let res_text = res.text().await?;
/*
*{"methodResponses":[["Email/set",{"notUpdated":null,"notDestroyed":null,"
* oldState":"86","newState":"87","accountId":"u148940c7","updated":{"
* M045926eed54b11423918f392":{"id":"M045926eed54b11423918f392"}},"created":
* null,"destroyed":null,"notCreated":null},"m3"]],"sessionState":"cyrus-0;
* p-5;vfs-0"}
*/
//debug!("res_text = {}", &res_text);
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = conn.store.online_status.set(None, Err(err.clone())).await;
@ -1109,13 +1114,14 @@ impl MailBackend for JmapType {
));
};
let upload_url = { conn.session_guard().await?.upload_url.clone() };
let mut res = conn
let res_text = conn
.post_async(
Some(&upload_request_format(&upload_url, &mail_account_id)?),
bytes,
)
.await?
.text()
.await?;
let res_text = res.text().await?;
let upload_response: UploadResponse = match deserialize_from_str(&res_text) {
Err(err) => {
@ -1143,8 +1149,11 @@ impl MailBackend for JmapType {
req.add_call(&import_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res.text().await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = conn.store.online_status.set(None, Err(err.clone())).await;
@ -1189,8 +1198,11 @@ impl MailBackend for JmapType {
req.add_call(&subm_set_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = res.text().await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
// [ref:TODO] parse/return any error.
let _: MethodResponse = match deserialize_from_str(&res_text) {

@ -71,17 +71,17 @@ impl BackendOp for JmapOp {
let g = store.online_status.session_guard().await?;
(g.download_url.clone(), g.mail_account_id())
};
let mut res = conn
let res_text = conn
.get_async(&download_request_format(
&download_url,
&mail_account_id,
&blob_id,
None,
)?)
.await?
.text()
.await?;
let res_text = res.text().await?;
store.byte_cache.lock().await.entry(hash).or_default().bytes = Some(res_text.clone());
Ok(res_text.into_bytes())
}))

@ -228,9 +228,12 @@ pub async fn get_message_list(
let mut req = Request::new(conn.request_no.clone());
req.add_call(&email_call).await;
let mut res = conn.post_async(None, serde_json::to_string(&req)?).await?;
let res_text = conn
.post_async(None, serde_json::to_string(&req)?)
.await?
.text()
.await?;
let res_text = res.text().await?;
let mut v: MethodResponse = match deserialize_from_str(&res_text) {
Err(err) => {
_ = conn.store.online_status.set(None, Err(err.clone())).await;
@ -245,31 +248,6 @@ pub async fn get_message_list(
Ok(ids)
}
/*
pub async fn get_message(conn: &JmapConnection, ids: &[String]) -> Result<Vec<Envelope>> {
let email_call: EmailGet = EmailGet::new(
Get::new()
.ids(Some(Argument::value(ids.to_vec())))
.account_id(conn.mail_account_id().to_string()),
);
let mut req = Request::new(conn.request_no.clone());
req.add_call(&email_call);
let mut res = conn
.post_async(None, serde_json::to_string(&req)?)
.await?;
let res_text = res.text().await?;
let mut v: MethodResponse = serde_json::from_str(&res_text).unwrap();
let e = GetResponse::<EmailObject>::try_from(v.method_responses.remove(0))?;
let GetResponse::<EmailObject> { list, .. } = e;
Ok(list
.into_iter()
.map(std::convert::Into::into)
.collect::<Vec<Envelope>>())
}
*/
#[derive(Clone, Copy)]
pub enum EmailFetchState {
Start { batch_size: u64 },

Loading…
Cancel
Save