#141 - Added callback when indexing is done

This commit is contained in:
Simon Cambier
2023-02-11 16:52:33 +01:00
parent 8c78c91cc3
commit c1d82dab54
3 changed files with 34 additions and 8 deletions

View File

@@ -17,7 +17,7 @@ import {
IndexingStepType,
isCacheEnabled,
} from './globals'
import api from './tools/api'
import api, { notifyOnIndexed } from './tools/api'
import { isFileIndexable } from './tools/utils'
import { database, OmnisearchCache } from './database'
import * as NotesIndex from './notes-index'
@@ -210,6 +210,7 @@ export default class OmnisearchPlugin extends Plugin {
new Notice(`Omnisearch - Your files have been indexed.`)
}
indexingStep.set(IndexingStepType.Done)
notifyOnIndexed()
}
}

View File

@@ -17,6 +17,13 @@ export type SearchMatchApi = {
offset: number
}
let notified = false
/**
* Callbacks to be called when the search index is ready
*/
let onIndexedCallbacks: Array<() => void> = []
function mapResults(results: ResultNote[]): ResultNoteApi[] {
return results.map(result => {
const { score, path, basename, foundWords, matches, content } = result
@@ -39,13 +46,27 @@ function mapResults(results: ResultNote[]): ResultNoteApi[] {
})
}
async function search(
q: string,
options: Partial<{ excerpt: boolean }> = {}
): Promise<ResultNoteApi[]> {
async function search(q: string): Promise<ResultNoteApi[]> {
const query = new Query(q)
const raw = await searchEngine.getSuggestions(query)
return mapResults(raw)
}
export default { search }
function registerOnIndexed(cb: () => void): void {
onIndexedCallbacks.push(cb)
// Immediately call the callback if the indexing is already ready done
if (notified) {
cb()
}
}
function unregisterOnIndexed(cb: () => void): void {
onIndexedCallbacks = onIndexedCallbacks.filter(o => o !== cb)
}
export function notifyOnIndexed(): void {
notified = true
onIndexedCallbacks.forEach(cb => cb())
}
export default { search, registerOnIndexed, unregisterOnIndexed }