diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte index 24496e8..8482be3 100644 --- a/src/components/ModalVault.svelte +++ b/src/components/ModalVault.svelte @@ -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} -{#if $isIndexing} +{#if indexingStepDesc}
- ⏳ Omnisearch indexing is currently in progress + ⏳ Work in progress: {indexingStepDesc}
{/if} diff --git a/src/globals.ts b/src/globals.ts index f77e44a..dc457da 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -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 diff --git a/src/main.ts b/src/main.ts index bd741a2..b924185 100644 --- a/src/main.ts +++ b/src/main.ts @@ -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 { } // 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 { // 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 { // 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 { // 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 { // 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...') diff --git a/src/search/search-engine.ts b/src/search/search-engine.ts index cbaec26..88c6d31 100644 --- a/src/search/search-engine.ts +++ b/src/search/search-engine.ts @@ -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 = { export class SearchEngine { private static engine?: SearchEngine - public static isIndexing = writable(true) + public static indexingStep = writable(IndexingStep.LoadingCache) /** * The main singleton SearchEngine instance.