From 2a8dae7caad5298372d1e0fd2a9b4fa31f4d10f5 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 13 Oct 2022 21:48:27 +0200 Subject: [PATCH] Fixed searching for words containing a plus/minus sign --- .../email/BoundaryCallbackMessages.java | 27 ++++++------------- .../java/eu/faircode/email/Fts4DbHelper.java | 2 +- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java index da42927e2e..f1268201a5 100644 --- a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java +++ b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java @@ -839,28 +839,17 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback word = new ArrayList<>(); for (String w : query.trim().split("\\s+")) - if ("+".equals(w)) - plus = true; - else if ("-".equals(w)) - minus = true; - else { - if (plus) { - if (!text.contains(w)) - return false; - } else if (minus) { - if (!html && text.contains(w)) - return false; - } else - word.add(w); - plus = false; - minus = false; - } + if (w.length() > 1 && w.startsWith("+")) { + if (!text.contains(Fts4DbHelper.preprocessText(w.substring(1)))) + return false; + } else if (w.length() > 1 && w.startsWith("-")) { + if (!html && text.contains(Fts4DbHelper.preprocessText(w.substring(1)))) + return false; + } else + word.addAll(Arrays.asList(Fts4DbHelper.breakText(w).split("\\s+"))); if (word.size() == 0) return true; diff --git a/app/src/main/java/eu/faircode/email/Fts4DbHelper.java b/app/src/main/java/eu/faircode/email/Fts4DbHelper.java index 2a20176530..3f785a3d93 100644 --- a/app/src/main/java/eu/faircode/email/Fts4DbHelper.java +++ b/app/src/main/java/eu/faircode/email/Fts4DbHelper.java @@ -134,7 +134,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper { db.delete("message", "rowid = ?", new String[]{Long.toString(id)}); } - private static String preprocessText(String text) { + static String preprocessText(String text) { return Normalizer.normalize(text.trim().toLowerCase(), Normalizer.Form.NFKD) .replaceAll("[\\p{InCombiningDiacriticalMarks}]", ""); }