diff --git a/src/scheduler.rs b/src/scheduler.rs
index 538cc1aecf..a3f5e315d3 100644
--- a/src/scheduler.rs
+++ b/src/scheduler.rs
@@ -325,8 +325,8 @@ impl Drop for IoPausedGuard {
#[derive(Debug)]
struct SchedBox {
- /// Hostname of used chatmail/email relay
- host: String,
+ /// Address at the used chatmail/email relay
+ addr: String,
meaning: FolderMeaning,
conn_state: ImapConnectionState,
@@ -883,14 +883,9 @@ impl Scheduler {
let ctx = ctx.clone();
task::spawn(inbox_loop(ctx, inbox_start_send, inbox_handlers))
};
- let host = configured_login_param
- .addr
- .split("@")
- .last()
- .context("address has no host")?
- .to_owned();
+ let addr = configured_login_param.addr.clone();
let inbox = SchedBox {
- host: host.clone(),
+ addr: addr.clone(),
meaning: FolderMeaning::Inbox,
conn_state,
handle,
@@ -906,7 +901,7 @@ impl Scheduler {
let meaning = FolderMeaning::Mvbox;
let handle = task::spawn(simple_imap_loop(ctx, start_send, handlers, meaning));
oboxes.push(SchedBox {
- host,
+ addr,
meaning,
conn_state,
handle,
diff --git a/src/scheduler/connectivity.rs b/src/scheduler/connectivity.rs
index c131242ff1..67d8d819df 100644
--- a/src/scheduler/connectivity.rs
+++ b/src/scheduler/connectivity.rs
@@ -375,7 +375,7 @@ impl Context {
.boxes()
.map(|b| {
(
- b.host.clone(),
+ b.addr.clone(),
b.meaning,
b.conn_state.state.connectivity.clone(),
)
@@ -396,73 +396,15 @@ impl Context {
// =============================================================================================
// Add e.g.
// Incoming messages
- // - "Inbox": Connected
+ // - [X] nine.testrun.org: Connected
+ // 1.34 GiB of 2 GiB used
+ // [======67%===== ]
// =============================================================================================
let watched_folders = get_watched_folder_configs(self).await?;
let incoming_messages = stock_str::incoming_messages(self).await;
ret += &format!("
{incoming_messages}
");
- for (host, folder, state) in &folders_states {
- let mut folder_added = false;
- if let Some(config) = folder.to_config().filter(|c| watched_folders.contains(c)) {
- let f = self.get_config(config).await.log_err(self).ok().flatten();
-
- if let Some(foldername) = f {
- let detailed = &state.get_detailed();
- ret += "- ";
- ret += &*detailed.to_icon();
- ret += " ";
- if folder == &FolderMeaning::Inbox {
- ret += &*escaper::encode_minimal(host);
- } else {
- ret += &*escaper::encode_minimal(&foldername);
- }
- ret += ": ";
- ret += &*escaper::encode_minimal(&detailed.to_string_imap(self).await);
- ret += "
";
-
- folder_added = true;
- }
- }
-
- if !folder_added && folder == &FolderMeaning::Inbox {
- let detailed = &state.get_detailed();
- if let DetailedConnectivity::Error(_) = detailed {
- // On the inbox thread, we also do some other things like scan_folders and run jobs
- // so, maybe, the inbox is not watched, but something else went wrong
- ret += "- ";
- ret += &*detailed.to_icon();
- ret += " ";
- ret += &*escaper::encode_minimal(&detailed.to_string_imap(self).await);
- ret += "
";
- }
- }
- }
- ret += "
";
-
- // =============================================================================================
- // Add e.g.
- // Outgoing messages
- // Your last message was sent successfully
- // =============================================================================================
-
- let outgoing_messages = stock_str::outgoing_messages(self).await;
- ret += &format!("{outgoing_messages}
- ");
- let detailed = smtp.get_detailed();
- ret += &*detailed.to_icon();
- ret += " ";
- ret += &*escaper::encode_minimal(&detailed.to_string_smtp(self).await);
- ret += "
";
-
- // =============================================================================================
- // Add e.g.
- // Storage on testrun.org
- // 1.34 GiB of 2 GiB used
- // [======67%===== ]
- // =============================================================================================
-
- ret += "Message Buffers
";
let transports = self
.sql
.query_map_vec("SELECT id, addr FROM transports", (), |row| {
@@ -472,31 +414,71 @@ impl Context {
})
.await?;
let quota = self.quota.read().await;
- ret += "";
for (transport_id, transport_addr) in transports {
let domain = &deltachat_contact_tools::EmailAddress::new(&transport_addr)
- .map_or(transport_addr, |email| email.domain);
+ .map_or(transport_addr.clone(), |email| email.domain);
let domain_escaped = escaper::encode_minimal(domain);
+
+ ret += "- ";
+ let folders = folders_states
+ .iter()
+ .filter(|(folder_addr, ..)| *folder_addr == transport_addr);
+ for (_addr, folder, state) in folders {
+ let mut folder_added = false;
+
+ if let Some(config) = folder.to_config().filter(|c| watched_folders.contains(c)) {
+ let f = self.get_config(config).await.log_err(self).ok().flatten();
+
+ if let Some(foldername) = f {
+ let detailed = &state.get_detailed();
+ ret += &*detailed.to_icon();
+ ret += " ";
+ if folder == &FolderMeaning::Inbox {
+ ret += &*domain_escaped;
+ } else {
+ ret += &*escaper::encode_minimal(&foldername);
+ }
+ ret += ": ";
+ ret += &*escaper::encode_minimal(&detailed.to_string_imap(self).await);
+ ret += "
";
+
+ folder_added = true;
+ }
+ }
+
+ if !folder_added && folder == &FolderMeaning::Inbox {
+ let detailed = &state.get_detailed();
+ if let DetailedConnectivity::Error(_) = detailed {
+ // On the inbox thread, we also do some other things like scan_folders and run jobs
+ // so, maybe, the inbox is not watched, but something else went wrong
+
+ ret += &*detailed.to_icon();
+ ret += " ";
+ ret += &*escaper::encode_minimal(&detailed.to_string_imap(self).await);
+ ret += "
";
+ }
+ }
+ }
+
let Some(quota) = quota.get(&transport_id) else {
- let not_connected = stock_str::not_connected(self).await;
- ret += &format!(" - {domain_escaped} · {not_connected}
");
+ ret += "";
continue;
};
match "a.recent {
Err(e) => {
let error_escaped = escaper::encode_minimal(&e.to_string());
- ret += &format!("- {domain_escaped} · {error_escaped}
");
+ ret += &format!("- {error_escaped}
");
}
Ok(quota) => {
if quota.is_empty() {
ret += &format!(
- "- {domain_escaped} · Warning: {domain_escaped} claims to support quota but gives no information
"
+ "- Warning: {domain_escaped} claims to support quota but gives no information
"
);
} else {
for (root_name, resources) in quota {
use async_imap::types::QuotaResourceName::*;
for resource in resources {
- ret += &format!("- {domain_escaped} · ");
+ ret += &format!("
- ");
// root name is empty eg. for gmail and redundant eg. for riseup.
// therefore, use it only if there are really several roots.
@@ -562,9 +544,24 @@ impl Context {
}
}
}
+ ret += "
";
}
ret += "
";
+ // =============================================================================================
+ // Add e.g.
+ // Outgoing messages
+ // Your last message was sent successfully
+ // =============================================================================================
+
+ let outgoing_messages = stock_str::outgoing_messages(self).await;
+ ret += &format!("{outgoing_messages}
- ");
+ let detailed = smtp.get_detailed();
+ ret += &*detailed.to_icon();
+ ret += " ";
+ ret += &*escaper::encode_minimal(&detailed.to_string_smtp(self).await);
+ ret += "
";
+
// =============================================================================================
ret += "