melib/jmap: avoid relying on hardcoded hash values
The hash values seem to have changed in the meantime, or aren't the same on all environments.pull/182/head
parent
d7ec97f03b
commit
2447a2cbfe
|
@ -159,30 +159,42 @@ pub struct Store {
|
||||||
|
|
||||||
impl Store {
|
impl Store {
|
||||||
pub fn add_envelope(&self, obj: EmailObject) -> Envelope {
|
pub fn add_envelope(&self, obj: EmailObject) -> Envelope {
|
||||||
|
let mut flags = Flag::default();
|
||||||
|
let mut labels: SmallVec<[TagHash; 8]> = SmallVec::new();
|
||||||
let mut tag_lck = self.collection.tag_index.write().unwrap();
|
let mut tag_lck = self.collection.tag_index.write().unwrap();
|
||||||
let tags = obj
|
for t in obj.keywords().keys() {
|
||||||
.keywords()
|
match t.as_str() {
|
||||||
.keys()
|
"$draft" => {
|
||||||
.map(|tag| {
|
flags |= Flag::DRAFT;
|
||||||
let tag_hash = TagHash::from_bytes(tag.as_bytes());
|
|
||||||
if !tag_lck.contains_key(&tag_hash) {
|
|
||||||
tag_lck.insert(tag_hash, tag.to_string());
|
|
||||||
}
|
}
|
||||||
tag_hash
|
"$seen" => {
|
||||||
})
|
flags |= Flag::SEEN;
|
||||||
.collect::<SmallVec<[TagHash; 1024]>>();
|
}
|
||||||
|
"$flagged" => {
|
||||||
|
flags |= Flag::FLAGGED;
|
||||||
|
}
|
||||||
|
"$answered" => {
|
||||||
|
flags |= Flag::REPLIED;
|
||||||
|
}
|
||||||
|
"$junk" | "$notjunk" => { /* ignore */ }
|
||||||
|
_ => {
|
||||||
|
let tag_hash = TagHash::from_bytes(t.as_bytes());
|
||||||
|
if !tag_lck.contains_key(&tag_hash) {
|
||||||
|
tag_lck.insert(tag_hash, t.to_string());
|
||||||
|
}
|
||||||
|
labels.push(tag_hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let id = obj.id.clone();
|
let id = obj.id.clone();
|
||||||
let mailbox_ids = obj.mailbox_ids.clone();
|
let mailbox_ids = obj.mailbox_ids.clone();
|
||||||
let blob_id = obj.blob_id.clone();
|
let blob_id = obj.blob_id.clone();
|
||||||
drop(tag_lck);
|
drop(tag_lck);
|
||||||
let mut ret: Envelope = obj.into();
|
let mut ret: Envelope = obj.into();
|
||||||
|
ret.set_flags(flags);
|
||||||
|
ret.tags_mut().append(&mut labels);
|
||||||
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$draft").0, 6613915297903591176);
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$seen").0, 1683863812294339685);
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$flagged").0, 2714010747478170100);
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$answered").0, 8940855303929342213);
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$junk").0, 2656839745430720464);
|
|
||||||
debug_assert_eq!(TagHash::from_bytes(b"$notjunk").0, 4091323799684325059);
|
|
||||||
let mut id_store_lck = self.id_store.lock().unwrap();
|
let mut id_store_lck = self.id_store.lock().unwrap();
|
||||||
let mut reverse_id_store_lck = self.reverse_id_store.lock().unwrap();
|
let mut reverse_id_store_lck = self.reverse_id_store.lock().unwrap();
|
||||||
let mut blob_id_store_lck = self.blob_id_store.lock().unwrap();
|
let mut blob_id_store_lck = self.blob_id_store.lock().unwrap();
|
||||||
|
@ -200,24 +212,6 @@ impl Store {
|
||||||
reverse_id_store_lck.insert(id.clone(), ret.hash());
|
reverse_id_store_lck.insert(id.clone(), ret.hash());
|
||||||
id_store_lck.insert(ret.hash(), id);
|
id_store_lck.insert(ret.hash(), id);
|
||||||
blob_id_store_lck.insert(ret.hash(), blob_id);
|
blob_id_store_lck.insert(ret.hash(), blob_id);
|
||||||
for t in tags {
|
|
||||||
match t.0 {
|
|
||||||
6613915297903591176 => {
|
|
||||||
ret.set_flags(ret.flags() | Flag::DRAFT);
|
|
||||||
}
|
|
||||||
1683863812294339685 => {
|
|
||||||
ret.set_flags(ret.flags() | Flag::SEEN);
|
|
||||||
}
|
|
||||||
2714010747478170100 => {
|
|
||||||
ret.set_flags(ret.flags() | Flag::FLAGGED);
|
|
||||||
}
|
|
||||||
8940855303929342213 => {
|
|
||||||
ret.set_flags(ret.flags() | Flag::REPLIED);
|
|
||||||
}
|
|
||||||
2656839745430720464 | 4091323799684325059 => { /* ignore */ }
|
|
||||||
_ => ret.tags_mut().push(t),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue