@@ -163,28 +163,35 @@ impl MimeFactory {
163
163
context
164
164
. sql
165
165
. query_map (
166
- "SELECT c.authname, c.addr, c.id \
167
- FROM chats_contacts cc \
168
- LEFT JOIN contacts c ON cc.contact_id=c.id \
169
- WHERE cc.chat_id=? AND cc.contact_id>9; ",
166
+ "SELECT c.authname, c.addr, c.id, cc.add_timestamp, cc.remove_timestamp
167
+ FROM chats_contacts cc
168
+ LEFT JOIN contacts c ON cc.contact_id=c.id
169
+ WHERE cc.chat_id=? AND cc.contact_id>9" ,
170
170
( msg. chat_id , ) ,
171
171
|row| {
172
172
let authname: String = row. get ( 0 ) ?;
173
173
let addr: String = row. get ( 1 ) ?;
174
174
let id: ContactId = row. get ( 2 ) ?;
175
- Ok ( ( authname, addr, id) )
175
+ let add_timestamp: i64 = row. get ( 3 ) ?;
176
+ let remove_timestamp: i64 = row. get ( 4 ) ?;
177
+ Ok ( ( authname, addr, id, add_timestamp, remove_timestamp) )
176
178
} ,
177
179
|rows| {
178
180
for row in rows {
179
- let ( authname, addr, id) = row?;
180
- if !recipients_contain_addr ( & recipients, & addr) {
181
- let name = match attach_profile_data {
182
- true => authname,
183
- false => "" . to_string ( ) ,
184
- } ;
185
- recipients. push ( ( name, addr) ) ;
181
+ let ( authname, addr, id, add_timestamp, remove_timestamp) = row?;
182
+ if add_timestamp >= remove_timestamp {
183
+ if !recipients_contain_addr ( & recipients, & addr) {
184
+ let name = match attach_profile_data {
185
+ true => authname,
186
+ false => "" . to_string ( ) ,
187
+ } ;
188
+ recipients. push ( ( name, addr) ) ;
189
+ }
190
+ recipient_ids. insert ( id) ;
191
+ } else {
192
+ // Row is a tombstone,
193
+ // member is not actually part of the group.
186
194
}
187
- recipient_ids. insert ( id) ;
188
195
}
189
196
Ok ( ( ) )
190
197
} ,
0 commit comments