Use the session SearchService to search in a room.

This commit is contained in:
Benoit Marty 2022-04-21 21:06:53 +02:00 committed by Benoit Marty
parent 0092a7057e
commit 272bdf95cb
5 changed files with 7 additions and 52 deletions

View File

@ -60,9 +60,10 @@ class SearchMessagesTest : InstrumentedTest {
fun sendTextMessageAndSearchPartOfItUsingRoom() { fun sendTextMessageAndSearchPartOfItUsingRoom() {
doTest { cryptoTestData -> doTest { cryptoTestData ->
cryptoTestData.firstSession cryptoTestData.firstSession
.getRoom(cryptoTestData.roomId)!! .searchService()
.search( .search(
searchTerm = "lore", searchTerm = "lore",
roomId = cryptoTestData.roomId,
limit = 10, limit = 10,
includeProfile = true, includeProfile = true,
afterLimit = 0, afterLimit = 0,

View File

@ -38,7 +38,6 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineService
import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.session.room.typing.TypingService
import org.matrix.android.sdk.api.session.room.uploads.UploadsService import org.matrix.android.sdk.api.session.room.uploads.UploadsService
import org.matrix.android.sdk.api.session.room.version.RoomVersionService import org.matrix.android.sdk.api.session.room.version.RoomVersionService
import org.matrix.android.sdk.api.session.search.SearchResult
import org.matrix.android.sdk.api.session.space.Space import org.matrix.android.sdk.api.session.space.Space
import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.api.util.Optional
@ -84,26 +83,6 @@ interface Room :
*/ */
fun roomSummary(): RoomSummary? fun roomSummary(): RoomSummary?
/**
* Generic function to search a term in a room.
* Ref: https://matrix.org/docs/spec/client_server/latest#module-search
* @param searchTerm the term to search
* @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results
* @param orderByRecent if true, the most recent message events will return in the first places of the list
* @param limit the maximum number of events to return.
* @param beforeLimit how many events before the result are returned.
* @param afterLimit how many events after the result are returned.
* @param includeProfile requests that the server returns the historic profile information for the users that sent the events that were returned.
* @return The search result
*/
suspend fun search(searchTerm: String,
nextBatch: String?,
orderByRecent: Boolean,
limit: Int,
beforeLimit: Int,
afterLimit: Int,
includeProfile: Boolean): SearchResult
/** /**
* Use this room as a Space, if the type is correct. * Use this room as a Space, if the type is correct.
*/ */

View File

@ -42,14 +42,12 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineService
import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.session.room.typing.TypingService
import org.matrix.android.sdk.api.session.room.uploads.UploadsService import org.matrix.android.sdk.api.session.room.uploads.UploadsService
import org.matrix.android.sdk.api.session.room.version.RoomVersionService import org.matrix.android.sdk.api.session.room.version.RoomVersionService
import org.matrix.android.sdk.api.session.search.SearchResult
import org.matrix.android.sdk.api.session.space.Space import org.matrix.android.sdk.api.session.space.Space
import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.api.util.Optional
import org.matrix.android.sdk.api.util.awaitCallback import org.matrix.android.sdk.api.util.awaitCallback
import org.matrix.android.sdk.internal.session.permalinks.ViaParameterFinder import org.matrix.android.sdk.internal.session.permalinks.ViaParameterFinder
import org.matrix.android.sdk.internal.session.room.state.SendStateTask import org.matrix.android.sdk.internal.session.room.state.SendStateTask
import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryDataSource import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryDataSource
import org.matrix.android.sdk.internal.session.search.SearchTask
import org.matrix.android.sdk.internal.session.space.DefaultSpace import org.matrix.android.sdk.internal.session.space.DefaultSpace
import java.security.InvalidParameterException import java.security.InvalidParameterException
@ -76,7 +74,6 @@ internal class DefaultRoom(override val roomId: String,
private val roomVersionService: RoomVersionService, private val roomVersionService: RoomVersionService,
private val sendStateTask: SendStateTask, private val sendStateTask: SendStateTask,
private val viaParameterFinder: ViaParameterFinder, private val viaParameterFinder: ViaParameterFinder,
private val searchTask: SearchTask,
override val coroutineDispatchers: MatrixCoroutineDispatchers override val coroutineDispatchers: MatrixCoroutineDispatchers
) : ) :
Room, Room,
@ -140,34 +137,14 @@ internal class DefaultRoom(override val roomId: String,
eventType = EventType.STATE_ROOM_ENCRYPTION, eventType = EventType.STATE_ROOM_ENCRYPTION,
body = mapOf( body = mapOf(
"algorithm" to algorithm "algorithm" to algorithm
)) )
)
sendStateTask.execute(params) sendStateTask.execute(params)
} }
} }
} }
override suspend fun search(searchTerm: String,
nextBatch: String?,
orderByRecent: Boolean,
limit: Int,
beforeLimit: Int,
afterLimit: Int,
includeProfile: Boolean): SearchResult {
return searchTask.execute(
SearchTask.Params(
searchTerm = searchTerm,
roomId = roomId,
nextBatch = nextBatch,
orderByRecent = orderByRecent,
limit = limit,
beforeLimit = beforeLimit,
afterLimit = afterLimit,
includeProfile = includeProfile
)
)
}
override fun asSpace(): Space? { override fun asSpace(): Space? {
if (roomSummary()?.roomType != RoomType.SPACE) return null if (roomSummary()?.roomType != RoomType.SPACE) return null
return DefaultSpace(this, roomSummaryDataSource, viaParameterFinder) return DefaultSpace(this, roomSummaryDataSource, viaParameterFinder)

View File

@ -41,7 +41,6 @@ import org.matrix.android.sdk.internal.session.room.timeline.DefaultTimelineServ
import org.matrix.android.sdk.internal.session.room.typing.DefaultTypingService import org.matrix.android.sdk.internal.session.room.typing.DefaultTypingService
import org.matrix.android.sdk.internal.session.room.uploads.DefaultUploadsService import org.matrix.android.sdk.internal.session.room.uploads.DefaultUploadsService
import org.matrix.android.sdk.internal.session.room.version.DefaultRoomVersionService import org.matrix.android.sdk.internal.session.room.version.DefaultRoomVersionService
import org.matrix.android.sdk.internal.session.search.SearchTask
import javax.inject.Inject import javax.inject.Inject
internal interface RoomFactory { internal interface RoomFactory {
@ -71,7 +70,6 @@ internal class DefaultRoomFactory @Inject constructor(private val cryptoService:
private val roomAccountDataServiceFactory: DefaultRoomAccountDataService.Factory, private val roomAccountDataServiceFactory: DefaultRoomAccountDataService.Factory,
private val sendStateTask: SendStateTask, private val sendStateTask: SendStateTask,
private val viaParameterFinder: ViaParameterFinder, private val viaParameterFinder: ViaParameterFinder,
private val searchTask: SearchTask,
private val coroutineDispatchers: MatrixCoroutineDispatchers) : private val coroutineDispatchers: MatrixCoroutineDispatchers) :
RoomFactory { RoomFactory {
@ -99,7 +97,6 @@ internal class DefaultRoomFactory @Inject constructor(private val cryptoService:
roomAccountDataService = roomAccountDataServiceFactory.create(roomId), roomAccountDataService = roomAccountDataServiceFactory.create(roomId),
roomVersionService = roomVersionServiceFactory.create(roomId), roomVersionService = roomVersionServiceFactory.create(roomId),
sendStateTask = sendStateTask, sendStateTask = sendStateTask,
searchTask = searchTask,
viaParameterFinder = viaParameterFinder, viaParameterFinder = viaParameterFinder,
coroutineDispatchers = coroutineDispatchers coroutineDispatchers = coroutineDispatchers
) )

View File

@ -35,7 +35,7 @@ import org.matrix.android.sdk.api.session.search.SearchResult
class SearchViewModel @AssistedInject constructor( class SearchViewModel @AssistedInject constructor(
@Assisted private val initialState: SearchViewState, @Assisted private val initialState: SearchViewState,
session: Session private val session: Session
) : VectorViewModel<SearchViewState, SearchAction, SearchViewEvents>(initialState) { ) : VectorViewModel<SearchViewState, SearchAction, SearchViewEvents>(initialState) {
private val room = session.getRoom(initialState.roomId) private val room = session.getRoom(initialState.roomId)
@ -101,8 +101,9 @@ class SearchViewModel @AssistedInject constructor(
currentTask = viewModelScope.launch { currentTask = viewModelScope.launch {
try { try {
val result = room.search( val result = session.searchService().search(
searchTerm = state.searchTerm, searchTerm = state.searchTerm,
roomId = initialState.roomId,
nextBatch = nextBatch, nextBatch = nextBatch,
orderByRecent = true, orderByRecent = true,
beforeLimit = 0, beforeLimit = 0,