mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-07 09:33:39 +02:00
Added reply to list
This commit is contained in:
@@ -2882,6 +2882,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
||||
View anchor = bnvActions.findViewById(R.id.action_reply);
|
||||
PopupMenu popupMenu = new PopupMenu(context, anchor);
|
||||
popupMenu.inflate(R.menu.menu_reply);
|
||||
popupMenu.getMenu().findItem(R.id.menu_reply_list).setVisible(data.message.list_post != null);
|
||||
popupMenu.getMenu().findItem(R.id.menu_reply_receipt).setVisible(data.message.receipt_to != null);
|
||||
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@@ -2894,6 +2895,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
||||
case R.id.menu_reply_to_all:
|
||||
onMenuReply(data, "reply_all");
|
||||
return true;
|
||||
case R.id.menu_reply_list:
|
||||
onMenuReply(data, "list");
|
||||
return true;
|
||||
case R.id.menu_reply_receipt:
|
||||
onMenuReply(data, "receipt");
|
||||
return true;
|
||||
|
||||
@@ -1191,6 +1191,7 @@ class Core {
|
||||
message.cc = ccs;
|
||||
message.bcc = helper.getBcc();
|
||||
message.reply = helper.getReply();
|
||||
message.list_post = helper.getListPost();
|
||||
message.subject = helper.getSubject();
|
||||
message.size = helper.getSize();
|
||||
message.content = false;
|
||||
|
||||
@@ -51,7 +51,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
|
||||
// https://developer.android.com/topic/libraries/architecture/room.html
|
||||
|
||||
@Database(
|
||||
version = 71,
|
||||
version = 72,
|
||||
entities = {
|
||||
EntityIdentity.class,
|
||||
EntityAccount.class,
|
||||
@@ -745,6 +745,13 @@ public abstract class DB extends RoomDatabase {
|
||||
db.execSQL("ALTER TABLE `answer` ADD COLUMN `hide` INTEGER NOT NULL DEFAULT 0");
|
||||
}
|
||||
})
|
||||
.addMigrations(new Migration(71, 72) {
|
||||
@Override
|
||||
public void migrate(SupportSQLiteDatabase db) {
|
||||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `message` ADD COLUMN `list_post` TEXT");
|
||||
}
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ public class EntityMessage implements Serializable {
|
||||
public Address[] cc;
|
||||
public Address[] bcc;
|
||||
public Address[] reply;
|
||||
public Address[] list_post;
|
||||
public String headers;
|
||||
public Boolean raw;
|
||||
public String subject;
|
||||
|
||||
@@ -1709,7 +1709,8 @@ public class FragmentCompose extends FragmentBase {
|
||||
if (answer > 0)
|
||||
body = EntityAnswer.getAnswerText(db, answer, null) + body;
|
||||
} else {
|
||||
if ("reply".equals(action) || "reply_all".equals(action) || "receipt".equals(action)) {
|
||||
if ("reply".equals(action) || "reply_all".equals(action) ||
|
||||
"list".equals(action) || "receipt".equals(action)) {
|
||||
if (ref.to != null && ref.to.length > 0) {
|
||||
String to = ((InternetAddress) ref.to[0]).getAddress();
|
||||
int at = to.indexOf('@');
|
||||
@@ -1721,7 +1722,10 @@ public class FragmentCompose extends FragmentBase {
|
||||
draft.inreplyto = ref.msgid;
|
||||
draft.thread = ref.thread;
|
||||
|
||||
if ("receipt".equals(action) && ref.receipt_to != null) {
|
||||
if ("list".equals(action) && ref.list_post != null) {
|
||||
draft.to = ref.list_post;
|
||||
draft.from = ref.to;
|
||||
} else if ("receipt".equals(action) && ref.receipt_to != null) {
|
||||
draft.to = ref.receipt_to;
|
||||
draft.from = ref.to;
|
||||
} else {
|
||||
@@ -1778,6 +1782,8 @@ public class FragmentCompose extends FragmentBase {
|
||||
draft.subject = context.getString(R.string.title_subject_reply, subject);
|
||||
else
|
||||
draft.subject = ref.subject;
|
||||
} else if ("list".equals(action)) {
|
||||
draft.subject = ref.subject;
|
||||
} else if ("receipt".equals(action)) {
|
||||
draft.subject = context.getString(R.string.title_receipt_subject, subject);
|
||||
|
||||
@@ -1859,7 +1865,7 @@ public class FragmentCompose extends FragmentBase {
|
||||
Core.updateMessageSize(context, draft.id);
|
||||
|
||||
// Write reference text
|
||||
if (ref != null && ref.content && !"receipt".equals(action)) {
|
||||
if (ref != null && ref.content && !"list".equals(action) && !"receipt".equals(action)) {
|
||||
String refBody = String.format("<p>%s %s:</p>\n<blockquote>%s</blockquote>",
|
||||
Html.escapeHtml(new Date(ref.received).toString()),
|
||||
Html.escapeHtml(MessageHelper.formatAddresses(ref.from)),
|
||||
|
||||
@@ -533,26 +533,6 @@ public class MessageHelper {
|
||||
return result;
|
||||
}
|
||||
|
||||
Address getSender() throws MessagingException {
|
||||
String sender = imessage.getHeader("Sender", null);
|
||||
if (sender == null)
|
||||
return null;
|
||||
|
||||
InternetAddress[] address = null;
|
||||
try {
|
||||
address = InternetAddress.parse(sender);
|
||||
} catch (AddressException ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
|
||||
if (address == null || address.length == 0)
|
||||
return null;
|
||||
|
||||
fix(address[0]);
|
||||
|
||||
return address[0];
|
||||
}
|
||||
|
||||
Address[] getFrom() throws MessagingException {
|
||||
return fix(imessage.getFrom());
|
||||
}
|
||||
@@ -577,6 +557,27 @@ public class MessageHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
Address[] getListPost() throws MessagingException {
|
||||
// https://www.ietf.org/rfc/rfc2369.txt
|
||||
String list = imessage.getHeader("List-Post", null);
|
||||
if (list == null || "NO".equals(list))
|
||||
return null;
|
||||
|
||||
InternetAddress[] address = null;
|
||||
try {
|
||||
address = InternetAddress.parse(list);
|
||||
} catch (AddressException ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
|
||||
if (address == null || address.length == 0)
|
||||
return null;
|
||||
|
||||
fix(address[0]);
|
||||
|
||||
return new Address[]{address[0]};
|
||||
}
|
||||
|
||||
private static Address[] fix(Address[] addresses) {
|
||||
if (addresses != null)
|
||||
for (int i = 0; i < addresses.length; i++)
|
||||
|
||||
Reference in New Issue
Block a user