From 632f54d126737a5cfe3fdd15055cc86e671d0710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 10 Jun 2020 10:09:16 +0200 Subject: [PATCH] Searching: Split out the search methods. This splits out the search methods out into ones that process the search result and ones that do not instead of toggling the return format using a boolean. --- src/Searching.js | 80 +++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/src/Searching.js b/src/Searching.js index d2fd67fa27..be5e61aca7 100644 --- a/src/Searching.js +++ b/src/Searching.js @@ -19,7 +19,7 @@ import {MatrixClientPeg} from "./MatrixClientPeg"; const SEARCH_LIMIT = 10; -async function serverSideSearch(term, roomId = undefined, processResult = true) { +async function serverSideSearch(term, roomId = undefined) { const client = MatrixClientPeg.get(); const filter = { @@ -45,16 +45,6 @@ async function serverSideSearch(term, roomId = undefined, processResult = true) const response = await client.search({body: body}); - if (processResult) { - const searchResult = { - _query: body, - results: [], - highlights: [], - }; - - return client._processRoomEventsSearch(searchResult, response); - } - const result = { response: response, query: body, @@ -63,6 +53,19 @@ async function serverSideSearch(term, roomId = undefined, processResult = true) return result; } +async function serverSideSearchProcess(term, roomId = undefined) { + const client = MatrixClientPeg.get(); + const result = await serverSideSearch(term, roomId); + + const searchResult = { + _query: result.query, + results: [], + highlights: [], + }; + + return client._processRoomEventsSearch(searchResult, result.response); +} + function compareEvents(a, b) { const aEvent = a.result; const bEvent = b.result; @@ -78,8 +81,8 @@ async function combinedSearch(searchTerm) { // Create two promises, one for the local search, one for the // server-side search. - const serverSidePromise = serverSideSearch(searchTerm, undefined, false); - const localPromise = localSearch(searchTerm, undefined, false); + const serverSidePromise = serverSideSearch(searchTerm, undefined); + const localPromise = localSearch(searchTerm, undefined); // Wait for both promises to resolve. await Promise.all([serverSidePromise, localPromise]); @@ -121,6 +124,8 @@ async function combinedSearch(searchTerm) { } async function localSearch(searchTerm, roomId = undefined, processResult = true) { + const eventIndex = EventIndexPeg.get(); + const searchArgs = { search_term: searchTerm, before_limit: 1, @@ -134,30 +139,8 @@ async function localSearch(searchTerm, roomId = undefined, processResult = true) searchArgs.room_id = roomId; } - const emptyResult = { - seshatQuery: searchArgs, - results: [], - highlights: [], - }; - - if (searchTerm === "") return emptyResult; - - const eventIndex = EventIndexPeg.get(); - const localResult = await eventIndex.search(searchArgs); - if (processResult) { - emptyResult.seshatQuery.next_batch = localResult.next_batch; - - const response = { - search_categories: { - room_events: localResult, - }, - }; - - return MatrixClientPeg.get()._processRoomEventsSearch(emptyResult, response); - } - searchArgs.next_batch = localResult.next_batch; const result = { @@ -168,6 +151,27 @@ async function localSearch(searchTerm, roomId = undefined, processResult = true) return result; } +async function localSearchProcess(searchTerm, roomId = undefined) { + const emptyResult = { + results: [], + highlights: [], + }; + + if (searchTerm === "") return emptyResult; + + const result = await localSearch(searchTerm, roomId); + + emptyResult.seshatQuery = result.query; + + const response = { + search_categories: { + room_events: result.response, + }, + }; + + return MatrixClientPeg.get()._processRoomEventsSearch(emptyResult, response); +} + async function localPagination(searchResult) { const eventIndex = EventIndexPeg.get(); @@ -469,11 +473,11 @@ function eventIndexSearch(term, roomId = undefined) { if (MatrixClientPeg.get().isRoomEncrypted(roomId)) { // The search is for a single encrypted room, use our local // search method. - searchPromise = localSearch(term, roomId); + searchPromise = localSearchProcess(term, roomId); } else { // The search is for a single non-encrypted room, use the // server-side search. - searchPromise = serverSideSearch(term, roomId); + searchPromise = serverSideSearchProcess(term, roomId); } } else { // Search across all rooms, combine a server side search and a @@ -523,6 +527,6 @@ export function searchPagination(searchResult) { export default function eventSearch(term, roomId = undefined) { const eventIndex = EventIndexPeg.get(); - if (eventIndex === null) return serverSideSearch(term, roomId); + if (eventIndex === null) return serverSideSearchProcess(term, roomId); else return eventIndexSearch(term, roomId); }