summaryrefslogtreecommitdiffstats
path: root/melib/src/thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'melib/src/thread.rs')
-rw-r--r--melib/src/thread.rs59
1 files changed, 26 insertions, 33 deletions
diff --git a/melib/src/thread.rs b/melib/src/thread.rs
index 31b4403b..8934fadc 100644
--- a/melib/src/thread.rs
+++ b/melib/src/thread.rs
@@ -48,6 +48,7 @@ use std::mem;
use std::ops::Index;
use std::result::Result as StdResult;
use std::str::FromStr;
+use std::string::ToString;
type Envelopes = FnvHashMap<EnvelopeHash, Envelope>;
@@ -82,9 +83,12 @@ fn rec_change_root_parent(
idx: ThreadHash,
new_root: ThreadHash,
) {
- let entry = b.entry(idx).or_default();
- entry.thread_group = new_root;
- if let Some(p) = entry.parent {
+ let parent = {
+ let entry = b.entry(idx).or_default();
+ entry.thread_group = new_root;
+ entry.parent
+ };
+ if let Some(p) = parent {
rec_change_children(b, p, new_root);
rec_change_root_parent(b, p, new_root);
}
@@ -109,8 +113,8 @@ fn rec_change_children(
macro_rules! remove_from_parent {
($buf:expr, $idx:expr) => {{
let mut parent: Option<ThreadHash> = None;
- let entry = $buf.entry($idx).or_default();
- if let Some(p) = entry.parent {
+ let entry_parent = $buf.entry($idx).or_default().parent;
+ if let Some(p) = entry_parent {
parent = Some(p);
if let Some(pos) = $buf[&p].children.iter().position(|c| *c == $idx) {
$buf.entry(p).and_modify(|e| {
@@ -964,14 +968,14 @@ impl Threads {
.get(
envelopes[&env_hash]
.in_reply_to()
- .map(|mgid| mgid.raw())
+ .map(crate::email::StrBuild::raw)
.unwrap_or(&[]),
)
- .map(|h| *h);
+ .cloned();
if let Some(id) = self
.message_ids
.get(envelopes[&env_hash].message_id().raw())
- .map(|h| *h)
+ .cloned()
{
self.thread_nodes.entry(id).and_modify(|n| {
n.message = Some(env_hash);
@@ -1069,11 +1073,8 @@ impl Threads {
}
}
let no_parent: bool = if let Some(node) = self.thread_nodes.get(&node_idx) {
- match (node.parent, node.message, node.children.len()) {
- (None, None, 0) => {
- return;
- }
- _ => {}
+ if let (None, None, 0) = (node.parent, node.message, node.children.len()) {
+ return;
}
node.parent.is_none()
} else {
@@ -1085,10 +1086,10 @@ impl Threads {
if no_parent {
let tree = self.tree.get_mut();
- if let Some(tree) = tree.iter_mut().find(|t| t.id == id) {
- *tree = ThreadTree::new(id);
+ if let Some(pos) = tree.iter().position(|t| t.id == id) {
+ tree[pos] = ThreadTree::new(id);
node_build(
- tree,
+ &mut tree[pos],
id,
*(self.sort.borrow()),
&mut self.thread_nodes,
@@ -1481,7 +1482,7 @@ impl Threads {
ref_ptr = parent_id;
continue;
} */
- if !self.thread_nodes[&ref_ptr].parent.is_none() {
+ if self.thread_nodes[&ref_ptr].parent.is_some() {
if self.thread_nodes[&parent_id].parent == Some(ref_ptr) {
eprintln!("ALARM");
remove_from_parent!(&mut self.thread_nodes, parent_id);
@@ -1506,12 +1507,9 @@ impl Threads {
while i < tree.len() {
// Evaluate if useless
let node = &self.thread_nodes[&tree[i].id];
- match (node.parent, node.message, node.children.len()) {
- (None, None, 0) => {
- tree.remove(i);
- continue;
- }
- _ => {}
+ if let (None, None, 0) = (node.parent, node.message, node.children.len()) {
+ tree.remove(i);
+ continue;
}
i += 1;
}
@@ -1570,14 +1568,9 @@ fn node_build(
}
}
}
- } else {
- if let Some(node) = thread_nodes.get(&idx) {
- match (node.parent, node.message, node.children.len()) {
- (None, None, 0) => {
- return;
- }
- _ => {}
- }
+ } else if let Some(node) = thread_nodes.get(&idx) {
+ if let (None, None, 0) = (node.parent, node.message, node.children.len()) {
+ return;
}
}
@@ -1648,9 +1641,9 @@ fn print_threadnodes(
"\t".repeat(level),
node_hash,
"\t".repeat(level),
- nodes[&node_hash].message().as_ref().map(|m| format!("{} - {}\n{}\t\t{}", envelopes[m].message_id_display(), envelopes[m].subject(), "\t".repeat(level), envelopes[m].references().iter().map(|r| r.to_string()).collect::<Vec<String>>().join(", "))).unwrap_or_else(|| "None".to_string()),
+ nodes[&node_hash].message().as_ref().map(|m| format!("{} - {}\n{}\t\t{}", envelopes[m].message_id_display(), envelopes[m].subject(), "\t".repeat(level), envelopes[m].references().iter().map(ToString::to_string).collect::<Vec<String>>().join(", "))).unwrap_or_else(|| "None".to_string()),
"\t".repeat(level),
- nodes[&node_hash].parent().as_ref().map(|p| p.to_string()).unwrap_or_else(|| "None".to_string()),
+ nodes[&node_hash].parent().as_ref().map(ToString::to_string).unwrap_or_else(|| "None".to_string()),
"\t".repeat(level),
nodes[&node_hash].thread_group,
"\t".repeat(level),