From 2505ac8b7748108fcc9228fd28d193d86e56e5ff Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 1 May 2018 09:58:43 +0200 Subject: [PATCH] only search text messages --- .../siacs/conversations/persistance/DatabaseBackend.java | 2 +- .../siacs/conversations/services/MessageSearchTask.java | 9 ++++----- src/main/java/eu/siacs/conversations/utils/FtsUtils.java | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index e42de05e6..9bb35ebbd 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -725,7 +725,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { public Cursor getMessageSearchCursor(List term) { SQLiteDatabase db = this.getReadableDatabase(); - String SQL = "SELECT "+Message.TABLENAME+".*,"+Conversation.TABLENAME+'.'+Conversation.CONTACTJID+','+Conversation.TABLENAME+'.'+Conversation.ACCOUNT+','+Conversation.TABLENAME+'.'+Conversation.MODE+" FROM "+Message.TABLENAME +" join "+Conversation.TABLENAME+" on "+Message.TABLENAME+'.'+Message.CONVERSATION+'='+Conversation.TABLENAME+'.'+Conversation.UUID+" join messages_index ON messages_index.uuid=messages.uuid where "+Message.ENCRYPTION+" NOT IN("+Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE+','+Message.ENCRYPTION_PGP+','+Message.ENCRYPTION_DECRYPTION_FAILED+") AND messages_index.body MATCH ? ORDER BY "+Message.TIME_SENT+" DESC limit "+Config.MAX_SEARCH_RESULTS; + String SQL = "SELECT "+Message.TABLENAME+".*,"+Conversation.TABLENAME+'.'+Conversation.CONTACTJID+','+Conversation.TABLENAME+'.'+Conversation.ACCOUNT+','+Conversation.TABLENAME+'.'+Conversation.MODE+" FROM "+Message.TABLENAME +" join "+Conversation.TABLENAME+" on "+Message.TABLENAME+'.'+Message.CONVERSATION+'='+Conversation.TABLENAME+'.'+Conversation.UUID+" join messages_index ON messages_index.uuid=messages.uuid where "+Message.ENCRYPTION+" NOT IN("+Message.ENCRYPTION_AXOLOTL_NOT_FOR_THIS_DEVICE+','+Message.ENCRYPTION_PGP+','+Message.ENCRYPTION_DECRYPTION_FAILED+") AND "+Message.TYPE+" IN("+Message.TYPE_TEXT+','+Message.TYPE_PRIVATE+") AND messages_index.body MATCH ? ORDER BY "+Message.TIME_SENT+" DESC limit "+Config.MAX_SEARCH_RESULTS; Log.d(Config.LOGTAG,"search term: "+FtsUtils.toMatchString(term)); return db.rawQuery(SQL,new String[]{FtsUtils.toMatchString(term)}); } diff --git a/src/main/java/eu/siacs/conversations/services/MessageSearchTask.java b/src/main/java/eu/siacs/conversations/services/MessageSearchTask.java index 5d5aeefbe..91dc4feed 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageSearchTask.java +++ b/src/main/java/eu/siacs/conversations/services/MessageSearchTask.java @@ -87,6 +87,7 @@ public class MessageSearchTask implements Runnable, Cancellable { final HashMap conversationCache = new HashMap<>(); final List result = new ArrayList<>(); cursor = xmppConnectionService.databaseBackend.getMessageSearchCursor(term); + long dbTimer = SystemClock.elapsedRealtime(); if (isCancelled) { Log.d(Config.LOGTAG, "canceled search task"); return; @@ -99,10 +100,8 @@ public class MessageSearchTask implements Runnable, Cancellable { return; } final String conversationUuid = cursor.getString(cursor.getColumnIndex(Message.CONVERSATION)); - Conversational conversation; - if (conversationCache.containsKey(conversationUuid)) { - conversation = conversationCache.get(conversationUuid); - } else { + Conversational conversation = conversationCache.get(conversationUuid); + if (conversation == null) { String accountUuid = cursor.getString(cursor.getColumnIndex(Conversation.ACCOUNT)); String contactJid = cursor.getString(cursor.getColumnIndex(Conversation.CONTACTJID)); int mode = cursor.getInt(cursor.getColumnIndex(Conversation.MODE)); @@ -114,7 +113,7 @@ public class MessageSearchTask implements Runnable, Cancellable { } while (cursor.moveToPrevious()); } long stopTimestamp = SystemClock.elapsedRealtime(); - Log.d(Config.LOGTAG, "found " + result.size() + " messages in " + (stopTimestamp - startTimestamp) + "ms"); + Log.d(Config.LOGTAG, "found " + result.size() + " messages in " + (stopTimestamp - startTimestamp) + "ms"+ " (db was "+(dbTimer - startTimestamp)+"ms)"); onSearchResultsAvailable.onSearchResultsAvailable(term, result); } catch (Exception e) { Log.d(Config.LOGTAG, "exception while searching ", e); diff --git a/src/main/java/eu/siacs/conversations/utils/FtsUtils.java b/src/main/java/eu/siacs/conversations/utils/FtsUtils.java index 5e36cdbcf..7ffb41bed 100644 --- a/src/main/java/eu/siacs/conversations/utils/FtsUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/FtsUtils.java @@ -46,7 +46,7 @@ public class FtsUtils { continue; } final String cleaned = clean(part); - if (isKeyword(cleaned)) { + if (isKeyword(cleaned) || cleaned.contains("*")) { term.add(part); } else if (!cleaned.isEmpty()) { term.add(cleaned); @@ -72,7 +72,7 @@ public class FtsUtils { return builder.toString(); } - public static boolean isKeyword(String term) { + static boolean isKeyword(String term) { return KEYWORDS.contains(term.toUpperCase(Locale.ENGLISH)); }