mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
fix(message): make markseen_msgs async compatible
Otherwise this method can not be called from an actually spawned async method, as `PreparedStatement` is `!Send`
This commit is contained in:
committed by
GitHub
parent
57870ec54a
commit
e22a9999d7
@@ -1417,33 +1417,37 @@ pub async fn markseen_msgs(context: &Context, msg_ids: Vec<MsgId>) -> Result<()>
|
|||||||
}
|
}
|
||||||
|
|
||||||
let conn = context.sql.get_conn().await?;
|
let conn = context.sql.get_conn().await?;
|
||||||
let mut stmt = conn.prepare_cached(concat!(
|
let msgs = async_std::task::spawn_blocking(move || -> Result<_> {
|
||||||
"SELECT",
|
let mut stmt = conn.prepare_cached(concat!(
|
||||||
" m.chat_id AS chat_id,",
|
"SELECT",
|
||||||
" m.state AS state,",
|
" m.chat_id AS chat_id,",
|
||||||
" c.blocked AS blocked",
|
" m.state AS state,",
|
||||||
" FROM msgs m LEFT JOIN chats c ON c.id=m.chat_id",
|
" c.blocked AS blocked",
|
||||||
" WHERE m.id=? AND m.chat_id>9"
|
" FROM msgs m LEFT JOIN chats c ON c.id=m.chat_id",
|
||||||
))?;
|
" WHERE m.id=? AND m.chat_id>9"
|
||||||
|
))?;
|
||||||
|
|
||||||
let mut msgs = Vec::with_capacity(msg_ids.len());
|
let mut msgs = Vec::with_capacity(msg_ids.len());
|
||||||
for id in msg_ids.into_iter() {
|
for id in msg_ids.into_iter() {
|
||||||
let query_res = stmt.query_row(paramsv![id], |row| {
|
let query_res = stmt.query_row(paramsv![id], |row| {
|
||||||
Ok((
|
Ok((
|
||||||
row.get::<_, ChatId>("chat_id")?,
|
row.get::<_, ChatId>("chat_id")?,
|
||||||
row.get::<_, MessageState>("state")?,
|
row.get::<_, MessageState>("state")?,
|
||||||
row.get::<_, Option<Blocked>>("blocked")?
|
row.get::<_, Option<Blocked>>("blocked")?
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
))
|
))
|
||||||
});
|
});
|
||||||
if let Err(rusqlite::Error::QueryReturnedNoRows) = query_res {
|
if let Err(rusqlite::Error::QueryReturnedNoRows) = query_res {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
let (chat_id, state, blocked) = query_res.map_err(Into::<anyhow::Error>::into)?;
|
||||||
|
msgs.push((id, chat_id, state, blocked));
|
||||||
}
|
}
|
||||||
let (chat_id, state, blocked) = query_res.map_err(Into::<anyhow::Error>::into)?;
|
drop(stmt);
|
||||||
msgs.push((id, chat_id, state, blocked));
|
drop(conn);
|
||||||
}
|
Ok(msgs)
|
||||||
drop(stmt);
|
})
|
||||||
drop(conn);
|
.await?;
|
||||||
|
|
||||||
let mut updated_chat_ids = BTreeMap::new();
|
let mut updated_chat_ids = BTreeMap::new();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user