From 2e512fcc1f579c5e63c3e16575e8f6a603bcbe19 Mon Sep 17 00:00:00 2001 From: moezbhatti Date: Sun, 29 Sep 2019 19:03:29 -0400 Subject: [PATCH] Include MMS in search results Closes #1471 --- .../QKSMS/repository/ConversationRepositoryImpl.kt | 6 ++++++ .../moez/QKSMS/repository/MessageRepositoryImpl.kt | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/com/moez/QKSMS/repository/ConversationRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/ConversationRepositoryImpl.kt index 494dd91f..59d67840 100644 --- a/data/src/main/java/com/moez/QKSMS/repository/ConversationRepositoryImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/repository/ConversationRepositoryImpl.kt @@ -107,13 +107,19 @@ class ConversationRepositoryImpl @Inject constructor( val messagesByConversation = Realm.getDefaultInstance() .where(Message::class.java) + .beginGroup() .contains("body", normalizedQuery, Case.INSENSITIVE) + .or() + .contains("parts.text", normalizedQuery, Case.INSENSITIVE) + .endGroup() .findAll() + .asSequence() .groupBy { message -> message.threadId } .filter { (threadId, _) -> conversations.firstOrNull { it.id == threadId } != null } .map { (threadId, messages) -> Pair(conversations.first { it.id == threadId }, messages.size) } .map { (conversation, messages) -> SearchResult(normalizedQuery, conversation, messages) } .sortedByDescending { result -> result.messages } + .toList() return conversations .filter { conversation -> conversationFilter.filter(conversation, normalizedQuery) } diff --git a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt index 7f687302..b4c02180 100644 --- a/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/repository/MessageRepositoryImpl.kt @@ -71,7 +71,17 @@ class MessageRepositoryImpl @Inject constructor( return Realm.getDefaultInstance() .where(Message::class.java) .equalTo("threadId", threadId) - .let { if (query.isEmpty()) it else it.contains("body", query, Case.INSENSITIVE) } + .let { + when (query.isEmpty()) { + true -> it + false -> it + .beginGroup() + .contains("body", query, Case.INSENSITIVE) + .or() + .contains("parts.text", query, Case.INSENSITIVE) + .endGroup() + } + } .sort("date") .findAllAsync() }