1 parent
47c3cd7f65
commit
cfc74d9db6
33 files changed
+850
-244
No files matched your search
+42
-22
@@ -121,7 +121,7 @@ pub async fn list_messages(
|
||||
.await
|
||||
.map_err(AppError::InternalError)?;
|
||||
|
||||
if !folder_fresh {
|
||||
if query.refresh || !folder_fresh {
|
||||
let creds = build_creds(&session, &config)?;
|
||||
|
||||
let status = imap_client
|
||||
@@ -254,27 +254,44 @@ pub async fn list_messages(
|
||||
}
|
||||
|
||||
let name = folder.clone();
|
||||
let (messages, total_count, tags_map, flagged_on_top) = database
|
||||
.run(move |conn| {
|
||||
let flagged_on_top = db::folder_preferences::effective_flagged_on_top(conn, &name)?;
|
||||
let messages = db::messages::get_messages_sorted(
|
||||
conn,
|
||||
&name,
|
||||
query.page,
|
||||
query.per_page,
|
||||
&query.sort,
|
||||
flagged_on_top,
|
||||
)?;
|
||||
let total = db::messages::count_messages(conn, &name)?;
|
||||
let refs: Vec<_> = messages
|
||||
.iter()
|
||||
.map(|m| (m.uid, m.folder.as_str()))
|
||||
.collect();
|
||||
let tags = db::tags::get_tags_for_messages(conn, &refs)?;
|
||||
Ok((messages, total, tags, flagged_on_top))
|
||||
})
|
||||
.await
|
||||
.map_err(AppError::InternalError)?;
|
||||
let (messages, total_count, tags_map, flagged_on_top, folder_total_count, unread_count) =
|
||||
database
|
||||
.run(move |conn| {
|
||||
let flagged_on_top = db::folder_preferences::effective_flagged_on_top(conn, &name)?;
|
||||
let messages = db::messages::get_messages_sorted(
|
||||
conn,
|
||||
&name,
|
||||
query.page,
|
||||
query.per_page,
|
||||
&query.sort,
|
||||
flagged_on_top,
|
||||
)?;
|
||||
let total = db::messages::count_messages(conn, &name)?;
|
||||
let refs: Vec<_> = messages
|
||||
.iter()
|
||||
.map(|m| (m.uid, m.folder.as_str()))
|
||||
.collect();
|
||||
let tags = db::tags::get_tags_for_messages(conn, &refs)?;
|
||||
let folder_state = db::folders::get_folder(conn, &name)?;
|
||||
let folder_total_count = folder_state
|
||||
.as_ref()
|
||||
.map(|item| item.total_count)
|
||||
.unwrap_or(total);
|
||||
let unread_count = folder_state
|
||||
.as_ref()
|
||||
.map(|item| item.unread_count)
|
||||
.unwrap_or(0);
|
||||
Ok((
|
||||
messages,
|
||||
total,
|
||||
tags,
|
||||
flagged_on_top,
|
||||
folder_total_count,
|
||||
unread_count,
|
||||
))
|
||||
})
|
||||
.await
|
||||
.map_err(AppError::InternalError)?;
|
||||
|
||||
tracing::info!(
|
||||
folder = %folder,
|
||||
@@ -317,6 +334,8 @@ pub async fn list_messages(
|
||||
per_page: query.per_page,
|
||||
syncing,
|
||||
flagged_on_top,
|
||||
folder_total_count,
|
||||
unread_count,
|
||||
})
|
||||
.into_response())
|
||||
}
|
||||
@@ -1636,6 +1655,7 @@ mod sync_tests {
|
||||
page: 0,
|
||||
per_page: 50,
|
||||
sort: "date_desc".to_string(),
|
||||
refresh: false,
|
||||
}),
|
||||
)
|
||||
.await
|
||||
|
||||
Reference in new issue
Block a user