From 52b43e0d731ee2e2aa218c01b8fa9a2a2a8b2de3 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 6 Apr 2021 11:58:54 +0200 Subject: [PATCH] Refactoring --- .../java/eu/faircode/email/DaoMessage.java | 5 +- .../java/eu/faircode/email/WorkerFts.java | 75 +++++++++---------- 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index ed45b6beff..6143e53581 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -249,7 +249,7 @@ public interface DaoMessage { " JOIN folder_view AS folder ON folder.id = message.folder" + " WHERE " + is_outbox + " AND NOT ui_snoozed IS NULL") - LiveData liveOutboxPending(); + LiveData liveOutboxPending(); @Query("SELECT account.name AS accountName" + ", COUNT(message.id) AS count" + @@ -310,13 +310,14 @@ public interface DaoMessage { " ORDER BY message.received DESC") List getMessageIdsByFolder(Long folder); + @Transaction @Query("SELECT message.id FROM message" + " JOIN folder_view AS folder ON folder.id = message.folder" + " WHERE content" + " AND NOT fts" + " AND folder.type <> '" + EntityFolder.OUTBOX + "'" + " ORDER BY message.received") - Cursor getMessageFts(); + List getMessageFts(); @Query("SELECT message.id, account, thread, (:find IS NULL" + " OR (:senders AND `from` LIKE :find COLLATE NOCASE)" + // no index diff --git a/app/src/main/java/eu/faircode/email/WorkerFts.java b/app/src/main/java/eu/faircode/email/WorkerFts.java index 2c3de8c2c5..ba74757a2c 100644 --- a/app/src/main/java/eu/faircode/email/WorkerFts.java +++ b/app/src/main/java/eu/faircode/email/WorkerFts.java @@ -21,7 +21,6 @@ package eu.faircode.email; import android.content.Context; import android.content.SharedPreferences; -import android.database.Cursor; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -66,49 +65,47 @@ public class WorkerFts extends Worker { SQLiteDatabase sdb = FtsDbHelper.getInstance(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - try (Cursor cursor = db.message().getMessageFts()) { - while (cursor.moveToNext()) - try { - long id = cursor.getLong(0); - Log.i("FTS index=" + id); - ids.add(id); + for (long id : db.message().getMessageFts()) + try { + Log.i("FTS index=" + id); - EntityMessage message = db.message().getMessage(id); - if (message == null) { - Log.i("FTS gone"); - continue; - } + ids.add(id); - File file = message.getFile(context); - String text = HtmlHelper.getFullText(file); - if (TextUtils.isEmpty(text)) { - Log.i("FTS empty"); - continue; - } - - boolean fts = prefs.getBoolean("fts", false); - if (!fts) - break; - - try { - sdb.beginTransaction(); - FtsDbHelper.insert(sdb, message, text); - sdb.setTransactionSuccessful(); - } finally { - sdb.endTransaction(); - } - - indexed++; - - if (ids.size() > INDEX_BATCH_SIZE) - markIndexed(db, ids); - } catch (Throwable ex) { - Log.e(ex); + EntityMessage message = db.message().getMessage(id); + if (message == null) { + Log.i("FTS gone"); + continue; } - markIndexed(db, ids); - } + File file = message.getFile(context); + String text = HtmlHelper.getFullText(file); + if (TextUtils.isEmpty(text)) { + Log.i("FTS empty"); + continue; + } + + boolean fts = prefs.getBoolean("fts", false); + if (!fts) + break; + + try { + sdb.beginTransaction(); + FtsDbHelper.insert(sdb, message, text); + sdb.setTransactionSuccessful(); + } finally { + sdb.endTransaction(); + } + + indexed++; + + if (ids.size() > INDEX_BATCH_SIZE) + markIndexed(db, ids); + } catch (Throwable ex) { + Log.e(ex); + } + + markIndexed(db, ids); Log.i("FTS indexed=" + indexed); return Result.success();