From 5010a4746674bc7eecba231b56b37ee4816b1382 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 18 May 2024 09:52:28 +0200 Subject: [PATCH] Cleaned global app warnings --- src/cache-manager.ts | 3 +++ src/database.ts | 3 ++- src/globals.ts | 5 +++-- src/main.ts | 5 +++-- src/search/omnisearch.ts | 14 +++++++++----- src/settings.ts | 3 +++ src/stores/obsidian-app.ts | 17 +++++++++++++++++ src/stores/results.ts | 19 ------------------- src/tools/api.ts | 3 +++ src/tools/notes.ts | 4 +++- 10 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 src/stores/obsidian-app.ts delete mode 100644 src/stores/results.ts diff --git a/src/cache-manager.ts b/src/cache-manager.ts index 867977c..1f14fec 100644 --- a/src/cache-manager.ts +++ b/src/cache-manager.ts @@ -25,6 +25,9 @@ import type { CanvasData } from 'obsidian/canvas' import type { AsPlainObject } from 'minisearch' import type MiniSearch from 'minisearch' import { settings } from './settings' +import { getObsidianApp } from './stores/obsidian-app' + +const app = getObsidianApp() /** * This function is responsible for extracting the text from a file and diff --git a/src/database.ts b/src/database.ts index d3500b8..51c559b 100644 --- a/src/database.ts +++ b/src/database.ts @@ -2,10 +2,11 @@ import Dexie from 'dexie' import type { AsPlainObject } from 'minisearch' import type { DocumentRef } from './globals' import { Notice } from 'obsidian' +import { getObsidianApp } from './stores/obsidian-app' export class OmnisearchCache extends Dexie { public static readonly dbVersion = 8 - public static readonly dbName = 'omnisearch/cache/' + app.appId + public static readonly dbName = 'omnisearch/cache/' + getObsidianApp().appId private static instance: OmnisearchCache diff --git a/src/globals.ts b/src/globals.ts index 8edbfe8..833fe4a 100644 --- a/src/globals.ts +++ b/src/globals.ts @@ -3,6 +3,7 @@ import { writable } from 'svelte/store' import { settings } from './settings' import type { TFile } from 'obsidian' import { Platform } from 'obsidian' +import { getObsidianApp } from './stores/obsidian-app' export const regexLineSplit = /\r?\n|\r|((\.|\?|!)( |\r?\n|\r))/g export const regexYaml = /^---\s*\n(.*?)\n?^---\s?/ms @@ -101,7 +102,7 @@ export function isInputComposition(): boolean { * @returns */ export function getChsSegmenter(): any | undefined { - return (app as any).plugins.plugins['cm-chs-patch'] + return (getObsidianApp() as any).plugins.plugins['cm-chs-patch'] } export type TextExtractorApi = { @@ -114,7 +115,7 @@ export type TextExtractorApi = { * @returns */ export function getTextExtractor(): TextExtractorApi | undefined { - return (app as any).plugins?.plugins?.['text-extractor']?.api + return (getObsidianApp() as any).plugins?.plugins?.['text-extractor']?.api } export function isCacheEnabled(): boolean { diff --git a/src/main.ts b/src/main.ts index f72bcbe..571a38d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,14 +25,15 @@ import { database, OmnisearchCache } from './database' import * as NotesIndex from './notes-index' import { searchEngine } from './search/omnisearch' import { cacheManager } from './cache-manager' +import { setObsidianApp } from './stores/obsidian-app' export default class OmnisearchPlugin extends Plugin { - private ribbonButton?: HTMLElement - // FIXME: fix the type public apiHttpServer: null | any = null + private ribbonButton?: HTMLElement async onload(): Promise { + setObsidianApp(this.app) await loadSettings(this) this.addSettingTab(new SettingsTab(this)) diff --git a/src/search/omnisearch.ts b/src/search/omnisearch.ts index 57ac7e9..0f7f99b 100644 --- a/src/search/omnisearch.ts +++ b/src/search/omnisearch.ts @@ -9,8 +9,12 @@ import { cacheManager } from '../cache-manager' import { sortBy } from 'lodash-es' import { getMatches, stringsToRegex } from 'src/tools/text-processing' import { tokenizeForIndexing, tokenizeForSearch } from './tokenizer' +import { getObsidianApp } from '../stores/obsidian-app' export class Omnisearch { + + app = getObsidianApp() + public static readonly options: Options = { tokenize: tokenizeForIndexing, extractField: (doc, fieldName) => { @@ -244,16 +248,16 @@ export class Omnisearch { results = results.filter( result => !( - app.metadataCache.isUserIgnored && - app.metadataCache.isUserIgnored(result.id) + this.app.metadataCache.isUserIgnored && + this.app.metadataCache.isUserIgnored(result.id) ) ) } else { // Just downrank them results.forEach(result => { if ( - app.metadataCache.isUserIgnored && - app.metadataCache.isUserIgnored(result.id) + this.app.metadataCache.isUserIgnored && + this.app.metadataCache.isUserIgnored(result.id) ) { result.score /= 10 } @@ -293,7 +297,7 @@ export class Omnisearch { } // Boost custom properties - const metadata = app.metadataCache.getCache(path) + const metadata = this.app.metadataCache.getCache(path) if (metadata) { for (const { name, weight } of settings.weightCustomProperties) { const values = metadata?.frontmatter?.[name] diff --git a/src/settings.ts b/src/settings.ts index 1186fb1..d9a4b41 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -15,6 +15,7 @@ import { isCacheEnabled, } from './globals' import type OmnisearchPlugin from './main' +import { getObsidianApp } from './stores/obsidian-app' interface WeightingSettings { weightBasename: number @@ -711,6 +712,8 @@ export class SettingsTab extends PluginSettingTab { } } +const app = getObsidianApp() + export const DEFAULT_SETTINGS: OmnisearchSettings = { useCache: true, hideExcluded: false, diff --git a/src/stores/obsidian-app.ts b/src/stores/obsidian-app.ts new file mode 100644 index 0000000..f9984d5 --- /dev/null +++ b/src/stores/obsidian-app.ts @@ -0,0 +1,17 @@ +import type { App } from 'obsidian' + +let obsidianApp: App | null = null + +export function setObsidianApp(app: App) { + obsidianApp = app +} + +/** + * Helper function to get the Obsidian app instance. + */ +export function getObsidianApp() { + if (!obsidianApp) { + throw new Error('Obsidian app not set') + } + return obsidianApp as App +} diff --git a/src/stores/results.ts b/src/stores/results.ts deleted file mode 100644 index 6384d0a..0000000 --- a/src/stores/results.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ResultNote } from 'src/globals' -import { writable } from 'svelte/store' - -function createSearchResultsStore() { - const { subscribe, set, update } = writable([]) - - return { - subscribe, - add: (item: ResultNote) => - update(arr => { - arr.push(item) - return arr - }), - set: (items: ResultNote[]) => set(items), - reset: () => set([]), - } -} - -export const searchResultsStore = createSearchResultsStore() diff --git a/src/tools/api.ts b/src/tools/api.ts index 93abe7a..7b7d4dc 100644 --- a/src/tools/api.ts +++ b/src/tools/api.ts @@ -3,6 +3,7 @@ import { Query } from '../search/query' import { searchEngine } from '../search/omnisearch' import { makeExcerpt } from './text-processing' import { refreshIndex } from '../notes-index' +import { getObsidianApp } from '../stores/obsidian-app' type ResultNoteApi = { score: number @@ -19,6 +20,8 @@ export type SearchMatchApi = { offset: number } +const app = getObsidianApp() + let notified = false /** diff --git a/src/tools/notes.ts b/src/tools/notes.ts index 2750ae6..6081d60 100644 --- a/src/tools/notes.ts +++ b/src/tools/notes.ts @@ -1,6 +1,8 @@ import { type CachedMetadata, MarkdownView, TFile } from 'obsidian' import type { ResultNote } from '../globals' -import { stringsToRegex } from './text-processing' +import { getObsidianApp } from '../stores/obsidian-app' + +const app = getObsidianApp() export async function openNote( item: ResultNote,