parent
f6f1d9b687
commit
110622415e
45
src/main.ts
45
src/main.ts
|
@ -101,6 +101,8 @@ export default class CustomSortPlugin
|
|||
sortSpecCache?: SortSpecsCollection | null
|
||||
customSortAppliedAtLeastOnce: boolean = false
|
||||
|
||||
uninstallerOfFolderSortFunctionWrapper: MonkeyAroundUninstaller|undefined = undefined
|
||||
|
||||
showNotice(message: string, timeout?: number) {
|
||||
if (this.settings.notificationsEnabled || (Platform.isMobile && this.settings.mobileNotificationsEnabled)) {
|
||||
new Notice(message, timeout)
|
||||
|
@ -231,21 +233,12 @@ export default class CustomSortPlugin
|
|||
// For the idea of monkey-patching credits go to https://github.com/nothingislost/obsidian-bartender
|
||||
patchFileExplorer(patchableFileExplorer: FileExplorerLeaf): FileExplorerLeaf|undefined {
|
||||
let plugin = this;
|
||||
const requestStandardObsidianSortAfter = (patchUninstaller: MonkeyAroundUninstaller|undefined) => {
|
||||
return () => {
|
||||
if (patchUninstaller) patchUninstaller()
|
||||
|
||||
const fileExplorerOrError= this.checkFileExplorerIsAvailableAndPatchable()
|
||||
if (fileExplorerOrError.v && fileExplorerOrError.v.view) {
|
||||
fileExplorerOrError.v.view.requestSort?.()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// patching file explorer might fail here because of various non-error reasons.
|
||||
// That's why not showing and not logging error message here
|
||||
if (patchableFileExplorer) {
|
||||
const uninstallerOfFolderSortFunctionWrapper: MonkeyAroundUninstaller = around(patchableFileExplorer.view.constructor.prototype, {
|
||||
this.uninstallFileExplorerPatchIfInstalled()
|
||||
this.uninstallerOfFolderSortFunctionWrapper = around(patchableFileExplorer.view.constructor.prototype, {
|
||||
getSortedFolderItems(old: any) {
|
||||
return function (...args: any[]) {
|
||||
// quick check for plugin status
|
||||
|
@ -272,7 +265,6 @@ export default class CustomSortPlugin
|
|||
};
|
||||
}
|
||||
})
|
||||
this.register(requestStandardObsidianSortAfter(uninstallerOfFolderSortFunctionWrapper))
|
||||
return patchableFileExplorer
|
||||
} else {
|
||||
return undefined
|
||||
|
@ -379,6 +371,8 @@ export default class CustomSortPlugin
|
|||
|
||||
this.registerCommands()
|
||||
|
||||
this.registerUninstallerHandler()
|
||||
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
|
@ -576,6 +570,33 @@ export default class CustomSortPlugin
|
|||
})
|
||||
}
|
||||
|
||||
uninstallFileExplorerPatchIfInstalled() {
|
||||
if (this.uninstallerOfFolderSortFunctionWrapper) {
|
||||
try {
|
||||
this.uninstallerOfFolderSortFunctionWrapper()
|
||||
} catch {
|
||||
|
||||
}
|
||||
this.uninstallerOfFolderSortFunctionWrapper = undefined
|
||||
}
|
||||
}
|
||||
|
||||
registerUninstallerHandler() {
|
||||
let plugin = this;
|
||||
const requestStandardObsidianSortAfterFileExplorerPatchUninstaller = () => {
|
||||
return () => {
|
||||
plugin.uninstallFileExplorerPatchIfInstalled()
|
||||
|
||||
const fileExplorerOrError= this.checkFileExplorerIsAvailableAndPatchable()
|
||||
if (fileExplorerOrError.v && fileExplorerOrError.v.view) {
|
||||
fileExplorerOrError.v.view.requestSort?.()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.register(requestStandardObsidianSortAfterFileExplorerPatchUninstaller())
|
||||
}
|
||||
|
||||
registerCommands() {
|
||||
const plugin: CustomSortPlugin = this
|
||||
this.addCommand({
|
||||
|
|
Loading…
Reference in New Issue