Finetuning initial application of custom sort order:
- console messages more accurate - DOM-based watcher for deferred File Explorer view to automatically apply custom sort when File Explorer view is actually displayed
This commit is contained in:
parent
2342b08e5f
commit
b8708f81e9
53
src/main.ts
53
src/main.ts
|
@ -201,7 +201,7 @@ export default class CustomSortPlugin
|
|||
let fileExplorerOrError = this.getFileExplorer()
|
||||
if (fileExplorerOrError.e === FileExplorerStateError.DeferredView) {
|
||||
if (logWarning) {
|
||||
this.logWarningFileExplorerDeferred()
|
||||
this.logDeferredFileExplorerInfo()
|
||||
}
|
||||
return fileExplorerOrError
|
||||
}
|
||||
|
@ -269,12 +269,17 @@ export default class CustomSortPlugin
|
|||
}
|
||||
}
|
||||
|
||||
logWarningFileExplorerDeferred() {
|
||||
const msg = `${PLUGIN_ID} v${this.manifest.version}: failed to get active File Explorer view.\n`
|
||||
logDeferredFileExplorerInfo() {
|
||||
const msg = `${PLUGIN_ID} v${this.manifest.version}: File Explorer is not displayed yet (Obsidian deferred view detected).\n`
|
||||
+ `Until the File Explorer is visible, the custom-sort plugin cannot apply the custom order.\n`
|
||||
console.warn(msg)
|
||||
}
|
||||
|
||||
logDeferredFileExplorerWatcherSetupInfo() {
|
||||
const msg = `${PLUGIN_ID} v${this.manifest.version}: Set up a watcher to apply custom sort automatically when the File Explorer is displayed.\n`
|
||||
console.warn(msg)
|
||||
}
|
||||
|
||||
logWarningFileExplorerNotAvailable() {
|
||||
const msg = `${PLUGIN_ID} v${this.manifest.version}: failed to locate File Explorer. The 'Files' core plugin can be disabled.\n`
|
||||
+ `Some community plugins can also disable it.\n`
|
||||
|
@ -583,7 +588,7 @@ export default class CustomSortPlugin
|
|||
const plugin = this
|
||||
this.app.workspace.onLayoutReady(() => {
|
||||
setTimeout(() => {
|
||||
plugin.initialDelayedApplicationOfCustomSorting.apply(this)
|
||||
plugin.delayedApplicationOfCustomSorting.apply(this)
|
||||
},
|
||||
plugin.settings.delayForInitialApplication)
|
||||
})
|
||||
|
@ -682,7 +687,30 @@ export default class CustomSortPlugin
|
|||
return false
|
||||
}
|
||||
|
||||
initialDelayedApplicationOfCustomSorting() {
|
||||
setWatcherForDelayedFileExplorerView() {
|
||||
const self = this
|
||||
const fullyFledgedFileExplorerElementSelector = () => document.querySelector('[data-type="file-explorer"] .nav-files-container');
|
||||
|
||||
const mutationObserver = new MutationObserver((_, observerInstance) => {
|
||||
const fullyFledgedFileExplorerElement = fullyFledgedFileExplorerElementSelector();
|
||||
if (fullyFledgedFileExplorerElement) {
|
||||
observerInstance.disconnect();
|
||||
self.delayedApplicationOfCustomSorting(true)
|
||||
}
|
||||
});
|
||||
const workspaceElement = document.querySelector(".workspace");
|
||||
if (workspaceElement) {
|
||||
mutationObserver.observe(workspaceElement, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Entering this method for the first time after initial delay after plugin loaded (via setTimeout()),
|
||||
// and if first attempt is unsuccessful, then entering this method again from DOM watcher, when
|
||||
// the File Explorer view gets transformed from delayed view into fully-fledged active view
|
||||
delayedApplicationOfCustomSorting(fromDOMwatcher?: boolean) {
|
||||
if (!this?.isThePluginStillInstalledAndEnabled()) {
|
||||
console.log(`${PLUGIN_ID} v${this.manifest.version} - delayed handler skipped, plugin no longer active.`)
|
||||
return
|
||||
|
@ -695,7 +723,20 @@ export default class CustomSortPlugin
|
|||
return
|
||||
}
|
||||
|
||||
this.switchPluginStateTo(true)
|
||||
if (!fromDOMwatcher) {
|
||||
// Only for the first delayed invocation:
|
||||
// If file explorer is delayed, configure the watcher
|
||||
// NOTE: Do not configure the watcher if the file explorer is not available
|
||||
let fileExplorerOrError: FileExplorerLeafOrError = this.checkFileExplorerIsAvailableAndPatchable()
|
||||
if (fileExplorerOrError.e === FileExplorerStateError.DeferredView) {
|
||||
this.logDeferredFileExplorerWatcherSetupInfo()
|
||||
this.setWatcherForDelayedFileExplorerView()
|
||||
} else { // file explorer is available or does not exist
|
||||
this.switchPluginStateTo(true)
|
||||
}
|
||||
} else {
|
||||
this.switchPluginStateTo(true)
|
||||
}
|
||||
}
|
||||
|
||||
setRibbonIconToEnabled() {
|
||||
|
|
Loading…
Reference in New Issue