mirror of https://github.com/M66B/FairEmail.git
Refactoring
This commit is contained in:
parent
69c8a2a356
commit
68bdc75c2b
|
@ -320,46 +320,22 @@ public class EntityMessage implements Serializable {
|
|||
return MessageHelper.equalDomain(context, reply, from);
|
||||
}
|
||||
|
||||
static int getReplies(Context context, String language, String subject) {
|
||||
int count = 0;
|
||||
static String getSubject(Context context, String language, String subject, boolean forward) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean prefix_once = prefs.getBoolean("prefix_once", true);
|
||||
boolean prefix_count = prefs.getBoolean("prefix_count", false);
|
||||
boolean alt = prefs.getBoolean(forward ? "alt_fwd" : "alt_re", false);
|
||||
|
||||
List<String> res = new ArrayList<>();
|
||||
res.addAll(Arrays.asList(Helper.getStrings(context, language, R.string.title_subject_reply, "")));
|
||||
res.addAll(Arrays.asList(Helper.getStrings(context, language, R.string.title_subject_reply_alt, "")));
|
||||
if (subject == null)
|
||||
subject = "";
|
||||
|
||||
subject = subject.trim();
|
||||
while (true) {
|
||||
boolean found = false;
|
||||
for (String re : res) {
|
||||
Matcher m = getPattern(re.trim()).matcher(subject);
|
||||
if (m.matches()) {
|
||||
found = true;
|
||||
subject = m.group(m.groupCount()).trim();
|
||||
int resid = forward
|
||||
? (alt ? R.string.title_subject_forward_alt : R.string.title_subject_forward)
|
||||
: (alt ? R.string.title_subject_reply_alt : R.string.title_subject_reply);
|
||||
|
||||
if (re.trim().endsWith(":"))
|
||||
try {
|
||||
String n = m.group(2);
|
||||
if (n == null)
|
||||
count++;
|
||||
else
|
||||
count += Integer.parseInt(n.substring(1, n.length() - 1));
|
||||
} catch (NumberFormatException ex) {
|
||||
Log.e(ex);
|
||||
count++;
|
||||
}
|
||||
else
|
||||
count++;
|
||||
if (!prefix_once)
|
||||
return Helper.getString(context, language, resid, subject);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
break;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static String collapsePrefixes(Context context, String language, String subject, boolean forward) {
|
||||
List<Pair<String, Boolean>> prefixes = new ArrayList<>();
|
||||
for (String re : Helper.getStrings(context, language, R.string.title_subject_reply, ""))
|
||||
prefixes.add(new Pair<>(re, false));
|
||||
|
@ -370,15 +346,33 @@ public class EntityMessage implements Serializable {
|
|||
for (String fwd : Helper.getStrings(context, language, R.string.title_subject_forward_alt, ""))
|
||||
prefixes.add(new Pair<>(fwd, true));
|
||||
|
||||
int replies = 0;
|
||||
boolean re = !forward;
|
||||
List<Boolean> scanned = new ArrayList<>();
|
||||
subject = subject.trim();
|
||||
String subj = subject.trim();
|
||||
while (true) {
|
||||
boolean found = false;
|
||||
for (Pair<String, Boolean> prefix : prefixes) {
|
||||
Matcher m = getPattern(prefix.first.trim()).matcher(subject);
|
||||
Matcher m = getPattern(prefix.first.trim()).matcher(subj);
|
||||
if (m.matches()) {
|
||||
found = true;
|
||||
subject = m.group(m.groupCount()).trim();
|
||||
subj = m.group(m.groupCount()).trim();
|
||||
|
||||
re = (re && !prefix.second);
|
||||
if (re)
|
||||
if (prefix.first.trim().endsWith(":"))
|
||||
try {
|
||||
String n = m.group(2);
|
||||
if (n == null)
|
||||
replies++;
|
||||
else
|
||||
replies += Integer.parseInt(n.substring(1, n.length() - 1));
|
||||
} catch (NumberFormatException ex) {
|
||||
Log.e(ex);
|
||||
replies++;
|
||||
}
|
||||
else
|
||||
replies++;
|
||||
|
||||
int count = scanned.size();
|
||||
if (!prefix.second.equals(count == 0 ? forward : scanned.get(count - 1)))
|
||||
|
@ -391,19 +385,24 @@ public class EntityMessage implements Serializable {
|
|||
break;
|
||||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
String pre = Helper.getString(context, language, resid, "");
|
||||
int semi = pre.lastIndexOf(':');
|
||||
if (prefix_count && replies > 0 && semi > 0)
|
||||
pre = pre.substring(0, semi) + "[" + (replies + 1) + "]" + pre.substring(semi);
|
||||
|
||||
StringBuilder result = new StringBuilder(pre);
|
||||
for (int i = 0; i < scanned.size(); i++)
|
||||
result.append(context.getString(scanned.get(i) ? R.string.title_subject_forward : R.string.title_subject_reply, ""));
|
||||
result.append(subject);
|
||||
result.append(subj);
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private static Pattern getPattern(String prefix) {
|
||||
String pre = prefix.endsWith(":")
|
||||
String pat = prefix.endsWith(":")
|
||||
? "(^" + Pattern.quote(prefix.substring(0, prefix.length() - 1)) + ")" + "((\\[\\d+\\])|(\\(\\d+\\)))?" + ":"
|
||||
: "(^" + Pattern.quote(prefix) + ")";
|
||||
return Pattern.compile(pre + "(\\s*)(.*)", Pattern.CASE_INSENSITIVE);
|
||||
return Pattern.compile(pat + "(\\s*)(.*)", Pattern.CASE_INSENSITIVE);
|
||||
}
|
||||
|
||||
Element getReplyHeader(Context context, Document document, boolean separate, boolean extended) {
|
||||
|
|
|
@ -650,14 +650,13 @@ public class EntityRule {
|
|||
boolean cc = jargs.optBoolean("cc");
|
||||
boolean attachments = jargs.optBoolean("attachments");
|
||||
|
||||
boolean isReply = TextUtils.isEmpty(to);
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean prefix_once = prefs.getBoolean("prefix_once", true);
|
||||
boolean alt_re = prefs.getBoolean("alt_re", false);
|
||||
boolean alt_fwd = prefs.getBoolean("alt_fwd", false);
|
||||
boolean separate_reply = prefs.getBoolean("separate_reply", false);
|
||||
boolean extended_reply = prefs.getBoolean("extended_reply", false);
|
||||
boolean quote_reply = prefs.getBoolean("quote_reply", true);
|
||||
boolean quote = (quote_reply && TextUtils.isEmpty(to));
|
||||
boolean quote = (quote_reply && isReply);
|
||||
|
||||
EntityIdentity identity = db.identity().getIdentity(iid);
|
||||
if (identity == null)
|
||||
|
@ -665,7 +664,7 @@ public class EntityRule {
|
|||
|
||||
EntityAnswer answer;
|
||||
if (aid < 0) {
|
||||
if (TextUtils.isEmpty(to))
|
||||
if (isReply)
|
||||
throw new IllegalArgumentException("Rule template missing name=" + rule.name);
|
||||
|
||||
answer = new EntityAnswer();
|
||||
|
@ -703,7 +702,7 @@ public class EntityRule {
|
|||
reply.identity = identity.id;
|
||||
reply.msgid = EntityMessage.generateMessageId();
|
||||
|
||||
if (TextUtils.isEmpty(to)) {
|
||||
if (isReply) {
|
||||
reply.references = (message.references == null ? "" : message.references + " ") + message.msgid;
|
||||
reply.inreplyto = message.msgid;
|
||||
reply.thread = message.thread;
|
||||
|
@ -719,20 +718,10 @@ public class EntityRule {
|
|||
reply.cc = message.cc;
|
||||
reply.unsubscribe = "mailto:" + identity.email;
|
||||
reply.auto_submitted = true;
|
||||
|
||||
String subject = (message.subject == null ? "" : message.subject);
|
||||
if (prefix_once)
|
||||
subject = EntityMessage.collapsePrefixes(context, message.language, subject, !TextUtils.isEmpty(to));
|
||||
|
||||
reply.subject = context.getString(
|
||||
TextUtils.isEmpty(to)
|
||||
? (alt_re ? R.string.title_subject_reply_alt : R.string.title_subject_reply)
|
||||
: (alt_fwd ? R.string.title_subject_forward_alt : R.string.title_subject_forward),
|
||||
subject);
|
||||
|
||||
reply.subject = EntityMessage.getSubject(context, message.language, message.subject, !isReply);
|
||||
reply.received = new Date().getTime();
|
||||
|
||||
reply.sender = MessageHelper.getSortKey(reply.from);
|
||||
|
||||
Uri lookupUri = ContactInfo.getLookupUri(reply.from);
|
||||
reply.avatar = (lookupUri == null ? null : lookupUri.toString());
|
||||
|
||||
|
|
|
@ -164,7 +164,6 @@ import org.jsoup.select.Elements;
|
|||
import org.jsoup.select.NodeFilter;
|
||||
import org.openintents.openpgp.OpenPgpError;
|
||||
import org.openintents.openpgp.util.OpenPgpApi;
|
||||
import org.openintents.openpgp.util.OpenPgpServiceConnection;
|
||||
import org.w3c.dom.css.CSSStyleSheet;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
|
@ -273,10 +272,6 @@ public class FragmentCompose extends FragmentBase {
|
|||
private ContentResolver resolver;
|
||||
private AdapterAttachment adapter;
|
||||
|
||||
private boolean prefix_once = false;
|
||||
private boolean prefix_count = false;
|
||||
private boolean alt_re = false;
|
||||
private boolean alt_fwd = false;
|
||||
private boolean monospaced = false;
|
||||
private String compose_font;
|
||||
private Integer encrypt = null;
|
||||
|
@ -335,10 +330,6 @@ public class FragmentCompose extends FragmentBase {
|
|||
super.onCreate(savedInstanceState);
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
prefix_once = prefs.getBoolean("prefix_once", true);
|
||||
prefix_count = prefs.getBoolean("prefix_count", false);
|
||||
alt_re = prefs.getBoolean("alt_re", false);
|
||||
alt_fwd = prefs.getBoolean("alt_fwd", false);
|
||||
monospaced = prefs.getBoolean("monospaced", false);
|
||||
compose_font = prefs.getString("compose_font", monospaced ? "monospace" : "sans-serif");
|
||||
media = prefs.getBoolean("compose_media", true);
|
||||
|
@ -4580,24 +4571,8 @@ public class FragmentCompose extends FragmentBase {
|
|||
// Subject
|
||||
String subject = (ref.subject == null ? "" : ref.subject);
|
||||
if ("reply".equals(action) || "reply_all".equals(action)) {
|
||||
int replies = 0;
|
||||
if (prefix_once) {
|
||||
if (prefix_count)
|
||||
replies = EntityMessage.getReplies(context, ref.language, subject);
|
||||
subject = EntityMessage.collapsePrefixes(context, ref.language, subject, false);
|
||||
}
|
||||
String re = Helper.getString(context,
|
||||
ref.language,
|
||||
alt_re ? R.string.title_subject_reply_alt : R.string.title_subject_reply,
|
||||
"").trim();
|
||||
String s = Helper.getString(context,
|
||||
ref.language,
|
||||
alt_re ? R.string.title_subject_reply_alt : R.string.title_subject_reply,
|
||||
subject);
|
||||
if (replies > 0 && re.endsWith(":") && s.startsWith(re))
|
||||
s = re.substring(0, re.length() - 1) + "[" + (replies + 1) + "]:" +
|
||||
s.substring(re.length());
|
||||
data.draft.subject = s;
|
||||
data.draft.subject =
|
||||
EntityMessage.getSubject(context, ref.language, subject, false);
|
||||
|
||||
if (external_text != null) {
|
||||
Element div = document.createElement("div");
|
||||
|
@ -4610,12 +4585,8 @@ public class FragmentCompose extends FragmentBase {
|
|||
document.body().appendChild(div);
|
||||
}
|
||||
} else if ("forward".equals(action)) {
|
||||
if (prefix_once)
|
||||
subject = EntityMessage.collapsePrefixes(context, ref.language, subject, true);
|
||||
data.draft.subject = Helper.getString(context,
|
||||
ref.language,
|
||||
alt_fwd ? R.string.title_subject_forward_alt : R.string.title_subject_forward,
|
||||
subject);
|
||||
data.draft.subject =
|
||||
EntityMessage.getSubject(context, ref.language, subject, true);
|
||||
} else if ("resend".equals(action)) {
|
||||
data.draft.subject = ref.subject;
|
||||
} else if ("editasnew".equals(action)) {
|
||||
|
|
|
@ -303,8 +303,6 @@ public class ServiceUI extends IntentService {
|
|||
|
||||
private void onReplyDirect(long id, Intent intent) throws IOException {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
boolean prefix_once = prefs.getBoolean("prefix_once", true);
|
||||
boolean alt_re = prefs.getBoolean("alt_re", false);
|
||||
boolean plain_only = prefs.getBoolean("plain_only", false);
|
||||
|
||||
DB db = DB.getInstance(this);
|
||||
|
@ -321,10 +319,6 @@ public class ServiceUI extends IntentService {
|
|||
if (outbox == null)
|
||||
throw new IllegalArgumentException("outbox not found");
|
||||
|
||||
String subject = (ref.subject == null ? "" : ref.subject);
|
||||
if (prefix_once)
|
||||
subject = EntityMessage.collapsePrefixes(this, ref.language, subject, false);
|
||||
|
||||
Bundle results = RemoteInput.getResultsFromIntent(intent);
|
||||
String body = results.getString("text");
|
||||
if (body != null)
|
||||
|
@ -346,7 +340,7 @@ public class ServiceUI extends IntentService {
|
|||
reply.thread = ref.thread;
|
||||
reply.to = ref.from;
|
||||
reply.from = new Address[]{new InternetAddress(identity.email, identity.name, StandardCharsets.UTF_8.name())};
|
||||
reply.subject = getString(alt_re ? R.string.title_subject_reply_alt : R.string.title_subject_reply, subject);
|
||||
reply.subject = EntityMessage.getSubject(this, ref.language, ref.subject, false);
|
||||
reply.received = new Date().getTime();
|
||||
reply.seen = true;
|
||||
reply.ui_seen = true;
|
||||
|
|
Loading…
Reference in New Issue