import type { IconInfo } from "@aidenlx/obsidian-icon-shortcodes/lib/icon-packs/types"; import matter from "gray-matter"; import { MarkdownView, TFile, TFolder } from "obsidian"; import type ALxFolderNote from "../fn-main"; const registerSetFolderIconCmd = (plugin: ALxFolderNote) => { const { workspace, vault } = plugin.app; const setIconField = async (icon: IconInfo | null, file: TFile) => icon && vault.modify( file, (matter(await vault.read(file)).stringify as any)( { icon: icon.id }, { flowLevel: 3, indent: 4 }, ), ); plugin.addCommand({ id: "set-folder-icon", name: "Set Folder Icon", checkCallback: (checking) => { const iscAPI = plugin.IconSCAPI; if (!iscAPI) return false; const mdView = workspace.getActiveViewOfType(MarkdownView); if (!mdView) return false; const folder = plugin.CoreApi.getFolderFromNote(mdView.file); if (!folder) return false; if (checking) return true; iscAPI.getIconFromUser().then((icon) => setIconField(icon, mdView.file)); }, }); plugin.registerEvent( workspace.on("file-menu", (menu, af, src) => { const iscAPI = plugin.IconSCAPI; if (!iscAPI) return; let note; if ( (af instanceof TFolder && (note = plugin.CoreApi.getFolderNote(af))) || (af instanceof TFile && ((note = af), plugin.CoreApi.getFolderFromNote(af))) ) { const folderNote = note; menu.addItem((item) => item .setIcon("image-glyph") .setTitle("Set Folder Icon") .onClick(async () => setIconField(await iscAPI.getIconFromUser(), folderNote), ), ); } }), ); }; export default registerSetFolderIconCmd;