From 010d99869f12702958457ba4e6c7fc921ba505f4 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 19 Oct 2023 09:35:23 +0200 Subject: [PATCH] Added searching in attachment filenames --- .../faircode/email/BoundaryCallbackMessages.java | 14 ++++++++++++++ .../eu/faircode/email/FragmentDialogSearch.java | 11 +++++++++++ .../main/java/eu/faircode/email/Fts4DbHelper.java | 12 ++++++++++-- .../main/java/eu/faircode/email/WorkerFts.java | 4 +++- app/src/main/res/layout/dialog_search.xml | 15 +++++++++++++-- app/src/main/res/values/strings.xml | 1 + 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java index db0c548170..ee7c6f2d4a 100644 --- a/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java +++ b/app/src/main/java/eu/faircode/email/BoundaryCallbackMessages.java @@ -831,6 +831,15 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback attachments = db.attachment().getAttachments(message.id); + if (attachments != null) + for (EntityAttachment attachment : attachments) + if (!TextUtils.isEmpty(attachment.name) && contains(attachment.name, criteria.query, true, false)) + return true; // Partial search to find "filename.extension" + } + if (criteria.in_headers) { if (message.headers != null && message.headers.contains(criteria.query)) return true; @@ -991,6 +1000,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback attachments, String text) { Log.i("FTS insert id=" + message.id); List
address = new ArrayList<>(); if (message.from != null) @@ -110,6 +111,12 @@ public class Fts4DbHelper extends SQLiteOpenHelper { if (message.bcc != null) address.addAll(Arrays.asList(message.bcc)); + List filenames = new ArrayList<>(); + if (attachments != null) + for (EntityAttachment attachment : attachments) + if (!TextUtils.isEmpty(attachment.name)) + filenames.add(attachment.name); + delete(db, message.id); ContentValues cv = new ContentValues(); @@ -122,6 +129,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper { cv.put("keyword", TextUtils.join(" ", message.keywords)); cv.put("text", processBreakText(text)); cv.put("notes", processBreakText(message.notes)); + cv.put("filenames", processBreakText(TextUtils.join(" ", filenames))); db.insertWithOnConflict("message", null, cv, SQLiteDatabase.CONFLICT_FAIL); } diff --git a/app/src/main/java/eu/faircode/email/WorkerFts.java b/app/src/main/java/eu/faircode/email/WorkerFts.java index 7135e0f9d0..13e92400aa 100644 --- a/app/src/main/java/eu/faircode/email/WorkerFts.java +++ b/app/src/main/java/eu/faircode/email/WorkerFts.java @@ -81,6 +81,8 @@ public class WorkerFts extends Worker { continue; } + List attachments = db.attachment().getAttachments(message.id); + String text = null; if (message.content) { File file = message.getFile(context); @@ -89,7 +91,7 @@ public class WorkerFts extends Worker { try { sdb.beginTransaction(); - Fts4DbHelper.insert(sdb, message, text); + Fts4DbHelper.insert(sdb, message, attachments, text); sdb.setTransactionSuccessful(); } catch (SQLiteException ex) { Log.w(ex); diff --git a/app/src/main/res/layout/dialog_search.xml b/app/src/main/res/layout/dialog_search.xml index 0b28017e93..6094a1cfb2 100644 --- a/app/src/main/res/layout/dialog_search.xml +++ b/app/src/main/res/layout/dialog_search.xml @@ -363,6 +363,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvSearchTextUnsupported" /> + + + app:layout_constraintTop_toBottomOf="@id/cbFileNames" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 107cbe6580..e07e03445b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1805,6 +1805,7 @@ In keywords (if supported) In message text In local notes + In filenames (on device only) In headers In HTML Limit search to