44 lines
1.9 KiB
TypeScript
44 lines
1.9 KiB
TypeScript
import {InstalledPlugin, PluginInstance, TAbstractFile, TFile, TFolder} from "obsidian";
|
|
|
|
export const StarredPlugin_findStarredFile_methodName = 'findStarredFile'
|
|
|
|
export interface findStarredFile_pathParam {
|
|
path: string
|
|
}
|
|
|
|
export interface Starred_PluginInstance extends PluginInstance {
|
|
[StarredPlugin_findStarredFile_methodName]: (filePath: findStarredFile_pathParam) => TFile | null
|
|
}
|
|
|
|
export const StarredCorePluginId: string = 'starred'
|
|
|
|
export const getStarredPlugin = (): Starred_PluginInstance | undefined => {
|
|
const starredPlugin: InstalledPlugin | undefined = app?.internalPlugins?.getPluginById(StarredCorePluginId)
|
|
if (starredPlugin && starredPlugin.enabled && starredPlugin.instance) {
|
|
const starredPluginInstance: Starred_PluginInstance = starredPlugin.instance as Starred_PluginInstance
|
|
// defensive programming, in case Obsidian changes its internal APIs
|
|
if (typeof starredPluginInstance?.[StarredPlugin_findStarredFile_methodName] === 'function') {
|
|
return starredPluginInstance
|
|
}
|
|
}
|
|
}
|
|
|
|
const isFolder = (entry: TAbstractFile) => {
|
|
// The plain obvious 'entry instanceof TFolder' doesn't work inside Jest unit tests, hence a workaround below
|
|
return !!((entry as any).isRoot);
|
|
}
|
|
|
|
export const determineStarredStatusOfFolder = (folder: TFolder, starredPluginInstance: Starred_PluginInstance): boolean => {
|
|
return folder.children.some((folderItem) => {
|
|
return !isFolder(folderItem) && starredPluginInstance[StarredPlugin_findStarredFile_methodName]({path: folderItem.path})
|
|
})
|
|
}
|
|
|
|
export const determineStarredStatusOf = (entry: TFile | TFolder, aFile: boolean, starredPluginInstance: Starred_PluginInstance) => {
|
|
if (aFile) {
|
|
return !!starredPluginInstance[StarredPlugin_findStarredFile_methodName]({path: entry.path})
|
|
} else { // aFolder
|
|
return determineStarredStatusOfFolder(entry as TFolder, starredPluginInstance)
|
|
}
|
|
}
|