Displaying different indexing steps while Omnisearch is loading

This commit is contained in:
Simon Cambier
2022-11-08 20:11:54 +01:00
parent 7fd7dc38cf
commit 32161ca94a
4 changed files with 46 additions and 7 deletions

View File

@@ -3,7 +3,7 @@
import { onDestroy, onMount, tick } from 'svelte'
import InputSearch from './InputSearch.svelte'
import ModalContainer from './ModalContainer.svelte'
import { eventBus, type ResultNote } from 'src/globals'
import { eventBus, IndexingStep, type ResultNote } from 'src/globals'
import { createNote, openNote } from 'src/tools/notes'
import { SearchEngine } from 'src/search/search-engine'
import { getCtrlKeyLabel, getExtension, loopIndex } from 'src/tools/utils'
@@ -24,7 +24,8 @@
let searchQuery: string | undefined
let resultNotes: ResultNote[] = []
let query: Query
let { isIndexing } = SearchEngine
let { indexingStep } = SearchEngine
let indexingStepDesc = ''
$: selectedNote = resultNotes[selectedIndex]
$: searchQuery = searchQuery ?? previousQuery
@@ -33,6 +34,30 @@
} else {
resultNotes = []
}
$: {
switch ($indexingStep) {
case IndexingStep.LoadingCache:
indexingStepDesc = 'Loading cache...'
break
case IndexingStep.ReadingNotes:
updateResults()
indexingStepDesc = 'Reading notes...'
break
case IndexingStep.ReadingPDFs:
indexingStepDesc = 'Reading PDFs...'
break
case IndexingStep.ReadingImages:
indexingStepDesc = 'Reading images...'
break
case IndexingStep.UpdatingCache:
indexingStepDesc = 'Updating cache...'
break
default:
updateResults()
indexingStepDesc = ''
break
}
}
onMount(async () => {
eventBus.enable('vault')
@@ -211,9 +236,9 @@
{/if}
</InputSearch>
{#if $isIndexing}
{#if indexingStepDesc}
<div style="text-align: center; color: var(--text-accent); margin-top: 10px">
Omnisearch indexing is currently in progress
Work in progress: {indexingStepDesc}
</div>
{/if}

View File

@@ -16,6 +16,15 @@ export const EventNames = {
ToggleExcerpts: 'toggle-excerpts',
} as const
export const enum IndexingStep {
Done,
LoadingCache,
ReadingNotes,
ReadingPDFs,
ReadingImages,
UpdatingCache,
}
export type IndexedDocument = {
path: string
basename: string

View File

@@ -5,7 +5,7 @@ import {
OmnisearchVaultModal,
} from './components/modals'
import { loadSettings, settings, SettingsTab, showExcerpt } from './settings'
import { eventBus, EventNames } from './globals'
import { eventBus, EventNames, IndexingStep } from './globals'
import { registerAPI } from '@vanakat/plugin-api'
import api from './tools/api'
import { isFilePlaintext, wait } from './tools/utils'
@@ -114,6 +114,7 @@ async function populateIndex(): Promise<void> {
}
// Load plaintext files
SearchEngine.indexingStep.set(IndexingStep.ReadingNotes)
console.log('Omnisearch - Reading notes')
const plainTextFiles = await FileLoader.getPlainTextFiles()
let allFiles = [...plainTextFiles]
@@ -125,6 +126,7 @@ async function populateIndex(): Promise<void> {
// Load PDFs
if (settings.PDFIndexing) {
SearchEngine.indexingStep.set(IndexingStep.ReadingPDFs)
console.log('Omnisearch - Reading PDFs')
const pdfDocuments = await FileLoader.getPDFAsDocuments()
// iOS: since there's no cache, just index the documents
@@ -138,6 +140,7 @@ async function populateIndex(): Promise<void> {
// Load Images
if (settings.imagesIndexing) {
SearchEngine.indexingStep.set(IndexingStep.ReadingImages)
console.log('Omnisearch - Reading Images')
const imagesDocuments = await FileLoader.getImagesAsDocuments()
// iOS: since there's no cache, just index the documents
@@ -154,6 +157,7 @@ async function populateIndex(): Promise<void> {
// Other platforms: make a diff of what's to add/update/delete
if (!Platform.isIosApp) {
SearchEngine.indexingStep.set(IndexingStep.UpdatingCache)
console.log('Omnisearch - Checking index cache diff...')
// Check which documents need to be removed/added/updated
const diffDocs = await cacheManager.getDiffDocuments(allFiles)
@@ -184,7 +188,7 @@ async function populateIndex(): Promise<void> {
// Load PDFs into the main search engine, and write cache
// SearchEngine.loadTmpDataIntoMain()
SearchEngine.isIndexing.set(false)
SearchEngine.indexingStep.set(IndexingStep.Done)
if (!Platform.isIosApp && needToUpdateCache) {
console.log('Omnisearch - Writing cache...')

View File

@@ -5,6 +5,7 @@ import {
type ResultNote,
type SearchMatch,
SPACE_OR_PUNCTUATION,
IndexingStep,
} from '../globals'
import {
removeDiacritics,
@@ -53,7 +54,7 @@ export const minisearchOptions: Options<IndexedDocument> = {
export class SearchEngine {
private static engine?: SearchEngine
public static isIndexing = writable(true)
public static indexingStep = writable(IndexingStep.LoadingCache)
/**
* The main singleton SearchEngine instance.