From d07c61290af84f07400fbf17d10f1fa591617f0b Mon Sep 17 00:00:00 2001 From: SebastianMC <23032356+SebastianMC@users.noreply.github.com> Date: Fri, 3 Jan 2025 13:22:02 +0100 Subject: [PATCH] 185 - drop backward compatibility - removed legacy code to handle backward compatibility with <0.15.0, <1.2.0, <1.4.11 and <1.6.0 --- src/custom-sort/custom-sort.ts | 26 +----- src/main.ts | 164 ++++++++++++--------------------- src/types/types.d.ts | 1 - 3 files changed, 60 insertions(+), 131 deletions(-) diff --git a/src/custom-sort/custom-sort.ts b/src/custom-sort/custom-sort.ts index 6b041e9..c249af7 100644 --- a/src/custom-sort/custom-sort.ts +++ b/src/custom-sort/custom-sort.ts @@ -1,8 +1,6 @@ import { FrontMatterCache, MetadataCache, - Plugin, - requireApiVersion, TAbstractFile, TFile, TFolder, @@ -719,28 +717,8 @@ export const determineBookmarksOrderIfNeeded = (folderItems: Array { - if (!this.settings.customSortContextSubmenu) return; // Don't show the context menus at all + this.registerEvent( + // "files-menu" event was exposed in 1.4.11 + // @ts-ignore + this.app.workspace.on("files-menu", (menu: Menu, files: TAbstractFile[], source: string, leaf?: WorkspaceLeaf) => { + if (!this.settings.customSortContextSubmenu) return; // Don't show the context menus at all - const customSortMenuItem = (item?: MenuItem) => { - // if parameter is empty it means mobile invocation, where submenus are not supported. - // In that case flatten the menu. - let submenu: Menu|undefined - if (item) { - item.setTitle('Custom sort:'); - item.setIcon('hashtag'); - submenu = item.setSubmenu() - } - if (!submenu) menu.addSeparator(); - (submenu ?? menu).addItem(applyCustomSortMenuItem) - if (submenu) submenu.addSeparator(); - - if (this.settings.bookmarksContextMenus) { - const bookmarksPlugin = getBookmarksPlugin(plugin.app, plugin.settings.bookmarksGroupToConsumeAsOrderingReference) - if (bookmarksPlugin) { - (submenu ?? menu).addItem(getBookmarkSelectedMenuItemForFiles(files)); - (submenu ?? menu).addItem(getUnbookmarkSelectedMenuItemForFiles(files)); - } - } - (submenu ?? menu).addItem(suspendCustomSortMenuItem); - }; - - if (m) { - customSortMenuItem(undefined) - } else { - menu.addItem(customSortMenuItem) + const customSortMenuItem = (item?: MenuItem) => { + // if parameter is empty it means mobile invocation, where submenus are not supported. + // In that case flatten the menu. + let submenu: Menu|undefined + if (item) { + item.setTitle('Custom sort:'); + item.setIcon('hashtag'); + submenu = item.setSubmenu() } - }) - ) - } + if (!submenu) menu.addSeparator(); + (submenu ?? menu).addItem(applyCustomSortMenuItem) + if (submenu) submenu.addSeparator(); + + if (this.settings.bookmarksContextMenus) { + const bookmarksPlugin = getBookmarksPlugin(plugin.app, plugin.settings.bookmarksGroupToConsumeAsOrderingReference) + if (bookmarksPlugin) { + (submenu ?? menu).addItem(getBookmarkSelectedMenuItemForFiles(files)); + (submenu ?? menu).addItem(getUnbookmarkSelectedMenuItemForFiles(files)); + } + } + (submenu ?? menu).addItem(suspendCustomSortMenuItem); + }; + + if (m) { + customSortMenuItem(undefined) + } else { + menu.addItem(customSortMenuItem) + } + }) + ) this.registerEvent( this.app.vault.on("rename", (file: TAbstractFile, oldPath: string) => { @@ -633,60 +616,29 @@ export default class CustomSortPlugin // That's why not showing and not logging error message here patchableFileExplorer = patchableFileExplorer ?? this.checkFileExplorerIsAvailableAndPatchable(false) if (patchableFileExplorer) { - if (requireApiVersion && requireApiVersion("1.6.0")) { - // Starting from Obsidian 1.6.0 the sorting mechanics has been significantly refactored internally in Obsidian - const uninstallerOfFolderSortFunctionWrapper: MonkeyAroundUninstaller = around(patchableFileExplorer.constructor.prototype, { - getSortedFolderItems(old: any) { - return function (...args: any[]) { - // quick check for plugin status - if (plugin.settings.suspended) { - return old.call(this, ...args); - } + const uninstallerOfFolderSortFunctionWrapper: MonkeyAroundUninstaller = around(patchableFileExplorer.constructor.prototype, { + getSortedFolderItems(old: any) { + return function (...args: any[]) { + // quick check for plugin status + if (plugin.settings.suspended) { + return old.call(this, ...args); + } - plugin.resetIconInaccurateStateToEnabled() + plugin.resetIconInaccurateStateToEnabled() - const folder = args[0] - const sortingData = plugin.determineAndPrepareSortingDataForFolder(folder) + const folder = args[0] + const sortingData = plugin.determineAndPrepareSortingDataForFolder(folder) - if (sortingData.sortSpec) { - return getSortedFolderItems_vFrom_1_6_0.call(this, folder, sortingData.sortSpec, plugin.createProcessingContextForSorting(sortingData.sortingAndGroupingStats)) - } else { - return old.call(this, ...args); - } - }; - } - }) - this.register(requestStandardObsidianSortAfter(uninstallerOfFolderSortFunctionWrapper)) - return true - } else { - // Up to Obsidian 1.6.0 - // @ts-ignore - let tmpFolder = new TFolder(Vault, ""); - let Folder = patchableFileExplorer.createFolderDom(tmpFolder).constructor; - const uninstallerOfFolderSortFunctionWrapper: MonkeyAroundUninstaller = around(Folder.prototype, { - sort(old: any) { - return function (...args: any[]) { - // quick check for plugin status - if (plugin.settings.suspended) { - return old.call(this, ...args); - } - - plugin.resetIconInaccurateStateToEnabled() - - const folder: TFolder = this.file - const sortingData = plugin.determineAndPrepareSortingDataForFolder(folder) - - if (sortingData.sortSpec) { - return folderSort_vUpTo_1_6_0.call(this, sortingData.sortSpec, plugin.createProcessingContextForSorting(sortingData.sortingAndGroupingStats)); - } else { - return old.call(this, ...args); - } - }; - } - }) - this.register(requestStandardObsidianSortAfter(uninstallerOfFolderSortFunctionWrapper)) - return true - } + if (sortingData.sortSpec) { + return getSortedFolderItems.call(this, folder, sortingData.sortSpec, plugin.createProcessingContextForSorting(sortingData.sortingAndGroupingStats)) + } else { + return old.call(this, ...args); + } + }; + } + }) + this.register(requestStandardObsidianSortAfter(uninstallerOfFolderSortFunctionWrapper)) + return true } else { return false } @@ -730,7 +682,7 @@ export default class CustomSortPlugin const data: any = await this.loadData() || {} const isFreshInstall: boolean = Object.keys(data).length === 0 this.settings = Object.assign({}, DEFAULT_SETTINGS, data); - if (requireApiVersion('1.2.0') && isFreshInstall) { + if (isFreshInstall) { this.settings = Object.assign(this.settings, DEFAULT_SETTING_FOR_1_2_0_UP) } } diff --git a/src/types/types.d.ts b/src/types/types.d.ts index d6a52b0..6e9a2ee 100644 --- a/src/types/types.d.ts +++ b/src/types/types.d.ts @@ -50,7 +50,6 @@ declare module 'obsidian' { } export interface FileExplorerView extends View { - createFolderDom(folder: TFolder): FileExplorerFolder; getSortedFolderItems(sortedFolder: TFolder): any[]; requestSort(): void;