Check self/cc using all identities

This commit is contained in:
M66B 2019-09-23 13:04:34 +02:00
parent cc15eda190
commit 1790a15fdf
3 changed files with 22 additions and 29 deletions

View File

@ -2168,26 +2168,22 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("message", message); args.putSerializable("message", message);
new SimpleTask<EntityIdentity>() { new SimpleTask<List<TupleIdentityEx>>() {
@Override @Override
protected EntityIdentity onExecute(Context context, Bundle args) { protected List<TupleIdentityEx> onExecute(Context context, Bundle args) {
TupleMessageEx message = (TupleMessageEx) args.getSerializable("message");
if (message.identity == null)
return null;
DB db = DB.getInstance(context); DB db = DB.getInstance(context);
return db.identity().getIdentity(message.identity); return db.identity().getComposableIdentities(null);
} }
@Override @Override
protected void onExecuted(Bundle args, EntityIdentity identity) { protected void onExecuted(Bundle args, List<TupleIdentityEx> identities) {
TupleMessageEx message = (TupleMessageEx) args.getSerializable("message"); TupleMessageEx message = (TupleMessageEx) args.getSerializable("message");
TupleMessageEx amessage = getMessage(); TupleMessageEx amessage = getMessage();
if (amessage == null || !amessage.id.equals(message.id)) if (amessage == null || !amessage.id.equals(message.id))
return; return;
Address[] recipients = message.getAllRecipients(identity); Address[] recipients = message.getAllRecipients(identities);
View anchor = bnvActions.findViewById(R.id.action_reply); View anchor = bnvActions.findViewById(R.id.action_reply);
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(context, powner, anchor); PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(context, powner, anchor);

View File

@ -162,31 +162,32 @@ public class EntityMessage implements Serializable {
return "<" + UUID.randomUUID() + "@localhost" + '>'; return "<" + UUID.randomUUID() + "@localhost" + '>';
} }
boolean replySelf(EntityIdentity identity) { boolean replySelf(List<TupleIdentityEx> identities) {
if (identity == null) if (identities != null) {
return false;
Address[] senders = (reply == null || reply.length == 0 ? from : reply); Address[] senders = (reply == null || reply.length == 0 ? from : reply);
if (senders != null) if (senders != null)
for (Address sender : senders) for (Address sender : senders)
for (TupleIdentityEx identity : identities)
if (identity.similarAddress(sender)) if (identity.similarAddress(sender))
return true; return true;
}
return false; return false;
} }
Address[] getAllRecipients(EntityIdentity identity) { Address[] getAllRecipients(List<TupleIdentityEx> identities) {
List<Address> addresses = new ArrayList<>(); List<Address> addresses = new ArrayList<>();
if (to != null && !replySelf(identity)) if (to != null && !replySelf(identities))
addresses.addAll(Arrays.asList(to)); addresses.addAll(Arrays.asList(to));
if (cc != null) if (cc != null)
addresses.addAll(Arrays.asList(cc)); addresses.addAll(Arrays.asList(cc));
// Filter self // Filter self
if (identity != null) if (identities != null)
for (Address address : new ArrayList<>(addresses)) for (Address address : new ArrayList<>(addresses))
for (TupleIdentityEx identity : identities)
if (identity.similarAddress(address)) if (identity.similarAddress(address))
addresses.remove(address); addresses.remove(address);

View File

@ -2096,17 +2096,13 @@ public class FragmentCompose extends FragmentBase {
data.draft.inreplyto = ref.msgid; data.draft.inreplyto = ref.msgid;
data.draft.thread = ref.thread; data.draft.thread = ref.thread;
EntityIdentity ridentity = null;
if (ref.identity != null)
ridentity = db.identity().getIdentity(ref.identity);
if ("list".equals(action) && ref.list_post != null) if ("list".equals(action) && ref.list_post != null)
data.draft.to = ref.list_post; data.draft.to = ref.list_post;
else if ("receipt".equals(action) && ref.receipt_to != null) else if ("receipt".equals(action) && ref.receipt_to != null)
data.draft.to = ref.receipt_to; data.draft.to = ref.receipt_to;
else { else {
// Prevent replying to self // Prevent replying to self
if (ref.replySelf(ridentity)) { if (ref.replySelf(data.identities)) {
data.draft.from = ref.from; data.draft.from = ref.from;
data.draft.to = ref.to; data.draft.to = ref.to;
} else { } else {
@ -2116,7 +2112,7 @@ public class FragmentCompose extends FragmentBase {
} }
if ("reply_all".equals(action)) if ("reply_all".equals(action))
data.draft.cc = ref.getAllRecipients(ridentity); data.draft.cc = ref.getAllRecipients(data.identities);
else if ("receipt".equals(action)) else if ("receipt".equals(action))
data.draft.receipt_request = true; data.draft.receipt_request = true;