diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt new file mode 100644 index 0000000000..0976ceba18 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2020 New Vector Ltd + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.matrix.android.sdk.api.session.room.search + +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse + +/** + * This interface defines methods to search messages in rooms. + */ +interface SearchService { + + /** + * Generic function to search a term in multiple rooms. + * Ref: https://matrix.org/docs/spec/client_server/latest#module-search + * @param searchTerm the term to search + * @param rooms roomIds to search term inside + * @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results + * @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. + */ + fun search(searchTerm: String, + rooms: List, + nextBatch: String?, + orderByRecent: Boolean, + limit: Int, + beforeLimit: Int, + afterLimit: Int, + includeProfile: Boolean, + callback: MatrixCallback): Cancelable +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index d3a7cf7df0..af0abc526a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -25,6 +25,7 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.session.file.FileService import org.matrix.android.sdk.api.session.room.RoomDirectoryService import org.matrix.android.sdk.api.session.room.RoomService +import org.matrix.android.sdk.api.session.room.search.SearchService import org.matrix.android.sdk.internal.session.DefaultFileService import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.android.sdk.internal.session.room.alias.AddRoomAliasTask @@ -61,6 +62,7 @@ import org.matrix.android.sdk.internal.session.room.relation.FindReactionEventFo import org.matrix.android.sdk.internal.session.room.relation.UpdateQuickReactionTask import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportContentTask import org.matrix.android.sdk.internal.session.room.reporting.ReportContentTask +import org.matrix.android.sdk.internal.session.room.search.DefaultSearchService import org.matrix.android.sdk.internal.session.room.search.DefaultSearchTask import org.matrix.android.sdk.internal.session.room.search.SearchTask import org.matrix.android.sdk.internal.session.room.state.DefaultSendStateTask @@ -123,6 +125,9 @@ internal abstract class RoomModule { @Binds abstract fun bindFileService(service: DefaultFileService): FileService + @Binds + abstract fun bindSearchService(service: DefaultSearchService): SearchService + @Binds abstract fun bindCreateRoomTask(task: DefaultCreateRoomTask): CreateRoomTask diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt new file mode 100644 index 0000000000..cf57e2a491 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2020 New Vector Ltd + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.matrix.android.sdk.internal.session.room.search + +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.room.search.SearchService +import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import javax.inject.Inject +import org.matrix.android.sdk.internal.task.TaskExecutor +import org.matrix.android.sdk.internal.task.configureWith + +internal class DefaultSearchService @Inject constructor( + private val taskExecutor: TaskExecutor, + private val searchTask: SearchTask +) : SearchService { + + override fun search(searchTerm: String, + rooms: List, + nextBatch: String?, + orderByRecent: Boolean, + limit: Int, + beforeLimit: Int, + afterLimit: Int, + includeProfile: Boolean, + callback: MatrixCallback): Cancelable { + return searchTask + .configureWith(SearchTask.Params( + searchTerm = searchTerm, + rooms = rooms, + nextBatch = nextBatch, + orderByRecent = orderByRecent, + limit = limit, + beforeLimit = beforeLimit, + afterLimit = afterLimit, + includeProfile = includeProfile + )) { + this.callback = callback + }.executeBy(taskExecutor) + } +}