@@ -54,34 +54,25 @@ impl EncryptHelper {
54
54
peerstates : & [ ( Option < Peerstate > , String ) ] ,
55
55
) -> Result < bool > {
56
56
let is_chatmail = context. is_chatmail ( ) . await ?;
57
- let mut prefer_encrypt_count = 1 ;
58
- for ( peerstate, addr) in peerstates {
59
- match peerstate {
60
- Some ( peerstate) => {
61
- if match peerstate. prefer_encrypt {
62
- EncryptPreference :: Reset => is_chatmail,
63
- EncryptPreference :: NoPreference | EncryptPreference :: Mutual => true ,
64
- } {
65
- prefer_encrypt_count += 1 ;
66
- }
67
- }
68
- None => {
69
- let msg = format ! ( "Peerstate for {addr:?} missing, cannot encrypt" ) ;
70
- if e2ee_guaranteed {
71
- return Err ( format_err ! ( "{msg}" ) ) ;
72
- } else {
73
- info ! ( context, "{msg}." ) ;
74
- return Ok ( false ) ;
75
- }
57
+ let missing_peerstate_addr = peerstates. iter ( ) . find_map ( |( peerstate, addr) | {
58
+ if let Some ( peerstate) = peerstate {
59
+ if is_chatmail
60
+ || e2ee_guaranteed
61
+ || peerstate. prefer_encrypt != EncryptPreference :: Reset
62
+ {
63
+ return None ;
76
64
}
77
65
}
66
+ Some ( addr)
67
+ } ) ;
68
+ if let Some ( addr) = missing_peerstate_addr {
69
+ if e2ee_guaranteed {
70
+ return Err ( format_err ! (
71
+ "Peerstate for {addr:?} missing, cannot encrypt"
72
+ ) ) ;
73
+ }
78
74
}
79
-
80
- // Count number of recipients, including self.
81
- // This does not depend on whether we send a copy to self or not.
82
- let recipients_count = peerstates. len ( ) + 1 ;
83
-
84
- Ok ( e2ee_guaranteed || 2 * prefer_encrypt_count > recipients_count)
75
+ Ok ( missing_peerstate_addr. is_none ( ) )
85
76
}
86
77
87
78
/// Tries to encrypt the passed in `mail`.
0 commit comments