melib/nntp: update total/new counters on new articles
parent
69916f267b
commit
526a246430
|
@ -251,7 +251,7 @@ impl MailBackend for NntpType {
|
||||||
/* To get updates, either issue NEWNEWS if it's supported by the server, and fallback
|
/* To get updates, either issue NEWNEWS if it's supported by the server, and fallback
|
||||||
* to OVER otherwise */
|
* to OVER otherwise */
|
||||||
let mbox: NntpMailbox = uid_store.mailboxes.lock().await.get(&mailbox_hash).map(std::clone::Clone::clone).ok_or_else(|| MeliError::new(format!("Mailbox with hash {} not found in NNTP connection, this could possibly be a bug or it was deleted.", mailbox_hash)))?;
|
let mbox: NntpMailbox = uid_store.mailboxes.lock().await.get(&mailbox_hash).map(std::clone::Clone::clone).ok_or_else(|| MeliError::new(format!("Mailbox with hash {} not found in NNTP connection, this could possibly be a bug or it was deleted.", mailbox_hash)))?;
|
||||||
let mut latest_article: Option<crate::UnixTimestamp> =
|
let latest_article: Option<crate::UnixTimestamp> =
|
||||||
mbox.latest_article.lock().unwrap().clone();
|
mbox.latest_article.lock().unwrap().clone();
|
||||||
let (over_msgid_support, newnews_support): (bool, bool) = {
|
let (over_msgid_support, newnews_support): (bool, bool) = {
|
||||||
let caps = uid_store.capabilities.lock().unwrap();
|
let caps = uid_store.capabilities.lock().unwrap();
|
||||||
|
@ -263,8 +263,8 @@ impl MailBackend for NntpType {
|
||||||
};
|
};
|
||||||
let mut res = String::with_capacity(8 * 1024);
|
let mut res = String::with_capacity(8 * 1024);
|
||||||
let mut conn = timeout(Some(Duration::from_secs(60 * 16)), connection.lock()).await?;
|
let mut conn = timeout(Some(Duration::from_secs(60 * 16)), connection.lock()).await?;
|
||||||
if let Some(ref mut latest_article) = latest_article {
|
if let Some(mut latest_article) = latest_article {
|
||||||
let timestamp = *latest_article - 10 * 60;
|
let timestamp = latest_article - 10 * 60;
|
||||||
let datetime_str =
|
let datetime_str =
|
||||||
crate::datetime::timestamp_to_string(timestamp, Some("%Y%m%d %H%M%S"), true);
|
crate::datetime::timestamp_to_string(timestamp, Some("%Y%m%d %H%M%S"), true);
|
||||||
|
|
||||||
|
@ -286,6 +286,7 @@ impl MailBackend for NntpType {
|
||||||
if message_ids.is_empty() || !over_msgid_support {
|
if message_ids.is_empty() || !over_msgid_support {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
let mut env_hash_set: BTreeSet<EnvelopeHash> = Default::default();
|
||||||
for msg_id in message_ids {
|
for msg_id in message_ids {
|
||||||
conn.send_command(format!("OVER {}", msg_id).as_bytes())
|
conn.send_command(format!("OVER {}", msg_id).as_bytes())
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -295,10 +296,11 @@ impl MailBackend for NntpType {
|
||||||
let mut uid_index_lck = uid_store.uid_index.lock().unwrap();
|
let mut uid_index_lck = uid_store.uid_index.lock().unwrap();
|
||||||
for l in res.split_rn().skip(1) {
|
for l in res.split_rn().skip(1) {
|
||||||
let (_, (num, env)) = protocol_parser::over_article(&l)?;
|
let (_, (num, env)) = protocol_parser::over_article(&l)?;
|
||||||
|
env_hash_set.insert(env.hash());
|
||||||
message_id_lck.insert(env.message_id_display().to_string(), env.hash());
|
message_id_lck.insert(env.message_id_display().to_string(), env.hash());
|
||||||
hash_index_lck.insert(env.hash(), (num, mailbox_hash));
|
hash_index_lck.insert(env.hash(), (num, mailbox_hash));
|
||||||
uid_index_lck.insert((mailbox_hash, num), env.hash());
|
uid_index_lck.insert((mailbox_hash, num), env.hash());
|
||||||
*latest_article = std::cmp::max(*latest_article, env.timestamp);
|
latest_article = std::cmp::max(latest_article, env.timestamp);
|
||||||
(uid_store.event_consumer)(
|
(uid_store.event_consumer)(
|
||||||
uid_store.account_hash,
|
uid_store.account_hash,
|
||||||
crate::backends::BackendEvent::Refresh(RefreshEvent {
|
crate::backends::BackendEvent::Refresh(RefreshEvent {
|
||||||
|
@ -309,6 +311,15 @@ impl MailBackend for NntpType {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
let f = &uid_store.mailboxes.lock().await[&mailbox_hash];
|
||||||
|
*f.latest_article.lock().unwrap() = Some(latest_article);
|
||||||
|
f.exists
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.insert_existing_set(env_hash_set.clone());
|
||||||
|
f.unseen.lock().unwrap().insert_existing_set(env_hash_set);
|
||||||
|
}
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue