|
|
@ -320,46 +320,22 @@ public class EntityMessage implements Serializable {
|
|
|
|
return MessageHelper.equalDomain(context, reply, from);
|
|
|
|
return MessageHelper.equalDomain(context, reply, from);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int getReplies(Context context, String language, String subject) {
|
|
|
|
static String getSubject(Context context, String language, String subject, boolean forward) {
|
|
|
|
int count = 0;
|
|
|
|
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<>();
|
|
|
|
if (subject == null)
|
|
|
|
res.addAll(Arrays.asList(Helper.getStrings(context, language, R.string.title_subject_reply, "")));
|
|
|
|
subject = "";
|
|
|
|
res.addAll(Arrays.asList(Helper.getStrings(context, language, R.string.title_subject_reply_alt, "")));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subject = subject.trim();
|
|
|
|
int resid = forward
|
|
|
|
while (true) {
|
|
|
|
? (alt ? R.string.title_subject_forward_alt : R.string.title_subject_forward)
|
|
|
|
boolean found = false;
|
|
|
|
: (alt ? R.string.title_subject_reply_alt : R.string.title_subject_reply);
|
|
|
|
for (String re : res) {
|
|
|
|
|
|
|
|
Matcher m = getPattern(re.trim()).matcher(subject);
|
|
|
|
|
|
|
|
if (m.matches()) {
|
|
|
|
|
|
|
|
found = true;
|
|
|
|
|
|
|
|
subject = m.group(m.groupCount()).trim();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (re.trim().endsWith(":"))
|
|
|
|
if (!prefix_once)
|
|
|
|
try {
|
|
|
|
return Helper.getString(context, language, resid, subject);
|
|
|
|
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++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!found)
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static String collapsePrefixes(Context context, String language, String subject, boolean forward) {
|
|
|
|
|
|
|
|
List<Pair<String, Boolean>> prefixes = new ArrayList<>();
|
|
|
|
List<Pair<String, Boolean>> prefixes = new ArrayList<>();
|
|
|
|
for (String re : Helper.getStrings(context, language, R.string.title_subject_reply, ""))
|
|
|
|
for (String re : Helper.getStrings(context, language, R.string.title_subject_reply, ""))
|
|
|
|
prefixes.add(new Pair<>(re, false));
|
|
|
|
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, ""))
|
|
|
|
for (String fwd : Helper.getStrings(context, language, R.string.title_subject_forward_alt, ""))
|
|
|
|
prefixes.add(new Pair<>(fwd, true));
|
|
|
|
prefixes.add(new Pair<>(fwd, true));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int replies = 0;
|
|
|
|
|
|
|
|
boolean re = !forward;
|
|
|
|
List<Boolean> scanned = new ArrayList<>();
|
|
|
|
List<Boolean> scanned = new ArrayList<>();
|
|
|
|
subject = subject.trim();
|
|
|
|
String subj = subject.trim();
|
|
|
|
while (true) {
|
|
|
|
while (true) {
|
|
|
|
boolean found = false;
|
|
|
|
boolean found = false;
|
|
|
|
for (Pair<String, Boolean> prefix : prefixes) {
|
|
|
|
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()) {
|
|
|
|
if (m.matches()) {
|
|
|
|
found = true;
|
|
|
|
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();
|
|
|
|
int count = scanned.size();
|
|
|
|
if (!prefix.second.equals(count == 0 ? forward : scanned.get(count - 1)))
|
|
|
|
if (!prefix.second.equals(count == 0 ? forward : scanned.get(count - 1)))
|
|
|
@ -391,19 +385,24 @@ public class EntityMessage implements Serializable {
|
|
|
|
break;
|
|
|
|
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++)
|
|
|
|
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(context.getString(scanned.get(i) ? R.string.title_subject_forward : R.string.title_subject_reply, ""));
|
|
|
|
result.append(subject);
|
|
|
|
result.append(subj);
|
|
|
|
|
|
|
|
|
|
|
|
return result.toString();
|
|
|
|
return result.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static Pattern getPattern(String prefix) {
|
|
|
|
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.substring(0, prefix.length() - 1)) + ")" + "((\\[\\d+\\])|(\\(\\d+\\)))?" + ":"
|
|
|
|
: "(^" + Pattern.quote(prefix) + ")";
|
|
|
|
: "(^" + 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) {
|
|
|
|
Element getReplyHeader(Context context, Document document, boolean separate, boolean extended) {
|
|
|
|