This commit is contained in:
Simon Cambier
2022-05-24 12:53:52 +02:00
parent eb32b0af24
commit 7cd2786d15
3 changed files with 56 additions and 9 deletions

View File

@@ -1,14 +1,23 @@
import { Plugin, TFile } from 'obsidian'
import {
addNoteToReindex,
addToIndex,
initGlobalSearchIndex,
reindexNotes,
removeFromIndex,
} from './search'
import { OmnisearchInFileModal, OmnisearchVaultModal } from './modals'
import { loadSettings, SettingsTab } from './settings'
import { loadSettings, settings, SettingsTab } from './settings'
const mainWindow = require('electron').remote.getCurrentWindow()
const onBlur = (): void => {
reindexNotes()
}
export default class OmnisearchPlugin extends Plugin {
async onload(): Promise<void> {
mainWindow.on('blur', onBlur)
await loadSettings(this)
this.addSettingTab(new SettingsTab(this))
@@ -43,8 +52,13 @@ export default class OmnisearchPlugin extends Plugin {
)
this.registerEvent(
this.app.vault.on('modify', async file => {
if (settings.reindexInRealTime) {
removeFromIndex(file.path)
await addToIndex(file)
}
else {
addNoteToReindex(file)
}
}),
)
this.registerEvent(
@@ -59,4 +73,8 @@ export default class OmnisearchPlugin extends Plugin {
await initGlobalSearchIndex()
})
}
onunload(): void {
mainWindow.off('blur', onBlur)
}
}

View File

@@ -1,4 +1,4 @@
import { Notice, TFile, type TAbstractFile } from 'obsidian'
import { Notice, TAbstractFile, TFile } from 'obsidian'
import MiniSearch, { type SearchResult } from 'minisearch'
import {
chsRegex,
@@ -281,7 +281,7 @@ export async function addToIndex(file: TAbstractFile): Promise<void> {
* Useful to find internal links that lead (yet) to nowhere
* @param name
*/
export function addNonExistingToIndex(name: string, parent:string): void {
export function addNonExistingToIndex(name: string, parent: string): void {
name = removeAnchors(name)
if (getNoteFromCache(name)) return
@@ -315,7 +315,9 @@ export function removeFromIndex(path: string): void {
if (note) {
minisearchInstance.remove(note)
removeNoteFromCache(path)
getNonExistingNotesFromCache().filter(n => n.parent === path).forEach(n => {
getNonExistingNotesFromCache()
.filter(n => n.parent === path)
.forEach(n => {
removeFromIndex(n.path)
})
}
@@ -323,3 +325,15 @@ export function removeFromIndex(path: string): void {
console.warn(`not not found under path ${path}`)
}
}
const notesToReindex = new Set<TAbstractFile>()
export function addNoteToReindex(note: TAbstractFile): void {
notesToReindex.add(note)
}
export async function reindexNotes(): Promise<void> {
for (const note of notesToReindex) {
removeFromIndex(note.path)
await addToIndex(note)
}
notesToReindex.clear()
}

View File

@@ -11,6 +11,7 @@ interface WeightingSettings {
export interface OmnisearchSettings extends WeightingSettings {
showIndexingNotices: boolean
respectExcluded: boolean
reindexInRealTime: boolean
}
export class SettingsTab extends PluginSettingTab {
@@ -52,10 +53,23 @@ export class SettingsTab extends PluginSettingTab {
}),
)
// Index in real-time
new Setting(containerEl)
.setName('Reindex in real-time')
.setDesc('By default, notes a reindexed when Obsidian focus is lost. Enable this to reindex in real-time. May affect performances.')
.addToggle(toggle =>
toggle.setValue(settings.reindexInRealTime).onChange(async v => {
settings.reindexInRealTime = v
await saveSettings(this.plugin)
}),
)
new Setting(containerEl).setName('Results weighting').setHeading()
new Setting(containerEl)
.setName(`File name & declared aliases (default: ${DEFAULT_SETTINGS.weightBasename})`)
.setName(
`File name & declared aliases (default: ${DEFAULT_SETTINGS.weightBasename})`,
)
.addSlider(cb => this.weightSlider(cb, 'weightBasename'))
new Setting(containerEl)
@@ -85,6 +99,7 @@ export class SettingsTab extends PluginSettingTab {
export const DEFAULT_SETTINGS: OmnisearchSettings = {
showIndexingNotices: false,
respectExcluded: true,
reindexInRealTime: false,
weightBasename: 2,
weightH1: 1.5,
weightH2: 1.3,