forked from upstream-mirrors/quik
@@ -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) }
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user