Skip to content

Commit 4fa8e84

Browse files
committed
Fix broken part after Obsidian update
1 parent 1a2a3cc commit 4fa8e84

29 files changed

+369
-126
lines changed

config/inversify.types.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ const SI = {
6363
api: "",
6464
defer: "",
6565
"factory:api": "",
66-
"factory:processor": "",
66+
"processor:factory": "",
6767
processor: "",
6868
"processor:args": "",
69+
"processor:argument.transformer": "",
6970
};
7071

7172
for (const key of Object.keys(SI)) {

config/services/processors.config.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ReplaceProcessor from "@src/Components/Processor/ReplaceProcessor";
66
import FunctionProcessor from "@src/Components/Processor/FunctionProcessor";
77
import { ProcessorTypes } from "@src/Components/Processor/ProcessorUtils";
88
import FunctionV2Processor from "@src/Components/Processor/FunctionV2Processor";
9+
import ProcessorArgumentTransformer from "@src/Components/Processor/ProcessorArgumentTransformer";
910

1011
export default new ContainerModule(bind => {
1112
bind(SI.processor).to(ReplaceProcessor).whenTargetNamed(ProcessorTypes.Replace);
@@ -14,5 +15,6 @@ export default new ContainerModule(bind => {
1415
bind(SI["processor:args"]).toDynamicValue(c =>
1516
c.container.get<KeyStorageInterface<SettingsType>>(SI["settings:storage"]).get("processor").get("args").value()
1617
);
17-
bind(SI["factory:processor"]).toAutoNamedFactory(SI.processor);
18+
bind(SI["processor:factory"]).toAutoNamedFactory(SI.processor);
19+
bind(SI["processor:argument.transformer"]).to(ProcessorArgumentTransformer);
1820
});

main.ts

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ export default class MetaTitlePlugin extends Plugin implements PluginInterface {
157157
} catch (e) {
158158
//TODO: refactor
159159
this.fc.toggle(id, false);
160+
this.logger.log(e);
160161
new Notice(e);
161162
}
162163
}

manifest.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"id": "obsidian-front-matter-title-plugin",
33
"name": "Front Matter Title",
4-
"version": "3.10.0",
5-
"minAppVersion": "1.5.3",
4+
"version": "3.11.0",
5+
"minAppVersion": "1.7.4",
66
"description": "Lets you define a title in frontmatter to be displayed as the filename for explorer, graph, search and etc.",
77
"author": "Snezhig",
88
"authorUrl": "https://github.com/snezhig",

package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "obsidian-front-matter-title",
3-
"version": "3.10.0",
3+
"version": "3.11.0",
44
"description": "This is a sample plugin for Obsidian (https://obsidian.md)",
55
"main": "main.js",
66
"scripts": {
@@ -33,7 +33,7 @@
3333
"eslint": "^8.44.0",
3434
"jest": "^29.6.1",
3535
"jest-mock-extended": "^3.0.4",
36-
"obsidian": "^1.4.11",
36+
"obsidian": "^1.7.2",
3737
"prettier": "^2.8.8",
3838
"ts-debounce": "^4.0.0",
3939
"ts-jest": "^29.1.1",

src/Components/Debug/Debugger.ts

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ import { injectable } from "inversify";
55
export default class Debugger implements LoggerInterface {
66
constructor(private name: string, private enabled: () => boolean) {}
77

8+
info(...value: any[]): void {
9+
this.log(...value);
10+
}
11+
debug(...value: any[]): void {
12+
this.log(...value);
13+
}
14+
warn(...value: any[]): void {
15+
this.log(...value);
16+
}
17+
818
log(...value: any) {
919
if (this.enabled()) {
1020
console.debug(`[${this.name}]`, ...value);
+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default interface LoggerInterface {
22
log(...value: any[]): void;
3+
info(...value: any[]): void;
4+
debug(...value: any[]): void;
5+
warn(...value: any[]): void;
36
}

src/Components/Processor/FunctionV2Processor.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@ import { inject, injectable } from "inversify";
22
import ProcessorInterface from "./Interfaces";
33
import SI from "../../../config/inversify.types";
44
import { FunctionV2ObjArg, ProcessorTypes } from "@src/Components/Processor/ProcessorUtils";
5+
import ObsidianFacade from "@src/Obsidian/ObsidianFacade";
56

67
@injectable()
78
export default class FunctionV2Processor implements ProcessorInterface {
89
private readonly func: Function | null;
910

1011
constructor(
1112
@inject(SI["processor:args"])
12-
args: string[]
13+
args: string[],
14+
@inject(SI["facade:obsidian"])
15+
private facade: ObsidianFacade
1316
) {
1417
this.func = args?.[0] ? new Function("obj", args[0]) : null;
1518
}
1619

1720
process(value: string): string {
1821
const obj = JSON.parse(value) as FunctionV2ObjArg;
22+
obj.file = this.facade.getTFile(obj.path);
1923
return this.func?.(obj) ?? obj.title;
2024
}
2125

src/Components/Processor/ProccessorListener.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ export default class ProcessorListener implements ListenerInterface {
2121
constructor(
2222
@inject(SI["event:dispatcher"])
2323
private dispatcher: EventDispatcherInterface<AppEvents & ResolverEvents>,
24-
@inject(SI["factory:processor"])
25-
private factory: ProcessorFactory
24+
@inject(SI["processor:factory"])
25+
private factory: ProcessorFactory,
26+
@inject(SI["processor:argument.transformer"])
27+
private transformer: ProcessorArgumentTransformer
2628
) {}
2729

2830
bind(): void {
@@ -71,7 +73,7 @@ export default class ProcessorListener implements ListenerInterface {
7173
if (this.processor === null) {
7274
return;
7375
}
74-
const arg = ProcessorArgumentTransformer.transform(event, this.processor.getType());
76+
const arg = this.transformer.transform(event, this.processor.getType());
7577
const value = this.processor.process(arg) ?? null;
7678
if (value) {
7779
obj.modify(value);
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
import EventInterface from "@src/Components/EventDispatcher/Interfaces/EventInterface";
22
import { ResolverEvents } from "@src/Resolver/ResolverType";
33
import { FunctionV2ObjArg, ProcessorTypes } from "@src/Components/Processor/ProcessorUtils";
4+
import { injectable } from "inversify";
45

6+
@injectable()
57
export default class ProcessorArgumentTransformer {
6-
static transform(event: EventInterface<ResolverEvents["resolver:resolved"]>, type: ProcessorTypes): string | null {
8+
transform(event: EventInterface<ResolverEvents["resolver:resolved"]>, type: ProcessorTypes): string | null {
79
switch (type) {
810
case ProcessorTypes.Function:
911
case ProcessorTypes.Replace:
1012
return event.get().value;
1113
case ProcessorTypes.FunctionV2:
12-
return JSON.stringify({ path: event.get().path, title: event.get().value } as FunctionV2ObjArg);
14+
return JSON.stringify({
15+
path: event.get().path,
16+
title: event.get().value,
17+
file: null,
18+
} as FunctionV2ObjArg);
1319
}
1420
}
1521
}

src/Components/Processor/ProcessorUtils.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import ProcessorInterface from "./Interfaces";
2+
import { TFile } from "obsidian";
23

34
export enum ProcessorTypes {
45
Function = "function",
@@ -14,4 +15,6 @@ export type FunctionV2ObjArg = {
1415
title: string;
1516
// Path to file
1617
path: string;
18+
// TFile
19+
file: TFile | null;
1720
};

src/Enum.ts

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
export enum Plugins {
2+
Search = "global-search",
3+
FileExplorer = "file-explorer",
4+
Backlink = "backlink",
5+
}
6+
17
export enum Leaves {
28
FE = "file-explorer",
39
G = "graph",

src/Feature/Backlink/BacklinkFeature.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { inject, injectable, named } from "inversify";
22
import ObsidianFacade from "../../Obsidian/ObsidianFacade";
3-
import { Feature, Leaves } from "@src/Enum";
3+
import { Feature, Leaves, Plugins } from "@src/Enum";
44
import SI from "../../../config/inversify.types";
55
import LoggerInterface from "../../Components/Debug/LoggerInterface";
66
import { BacklinkViewExt, MarkdownViewExt } from "obsidian";
@@ -53,7 +53,7 @@ export default class BacklinkFeature extends AbstractFeature<Feature> {
5353
}
5454

5555
public enable(): void {
56-
this.enabled = this.facade.isInternalPluginEnabled(this.getId());
56+
this.enabled = this.facade.isInternalPluginEnabled(Plugins.Backlink);
5757
this.logger.log(`Manager state is ${this.enabled}`);
5858
if (!this.enabled) {
5959
return;

src/Feature/Bookmarks/BookmarksManager.ts

+59-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BookmarksPluginView, EventRef } from "obsidian";
1+
import { BookmarksPluginLeaf, BookmarksPluginView, EventRef } from "obsidian";
22
import { inject, injectable, named } from "inversify";
33
import SI from "@config/inversify.types";
44
import ObsidianFacade from "@src/Obsidian/ObsidianFacade";
@@ -11,12 +11,19 @@ import EventDispatcherInterface from "@src/Components/EventDispatcher/Interfaces
1111
import { AppEvents } from "@src/Types";
1212
import ListenerRef from "@src/Components/EventDispatcher/Interfaces/ListenerRef";
1313

14+
enum State {
15+
Disabled = "disabled",
16+
Enabled = "enabled",
17+
Awaiting = "awaiting",
18+
}
19+
1420
@injectable()
1521
export default class BookmarksManager extends AbstractFeature<Feature> {
16-
private enabled = false;
22+
private state: State = State.Disabled;
1723
private view: BookmarksPluginView = null;
1824
private ref: EventRef = null;
1925
private metaRef: ListenerRef<"metadata:cache:changed"> = null;
26+
private activeLeafChangeRef: ListenerRef<"active:leaf:change"> = null;
2027
private resolver: ResolverInterface;
2128
private requestUpdate: () => void;
2229

@@ -33,29 +40,27 @@ export default class BookmarksManager extends AbstractFeature<Feature> {
3340
) {
3441
super();
3542
this.requestUpdate = () => setTimeout(this.onChanged.bind(this), 100);
36-
this.metaRef = this.dispatcher.addListener({
37-
name: "metadata:cache:changed",
38-
cb: this.requestUpdate.bind(this),
39-
});
4043
this.resolver = service.createResolver(this.getId());
4144
}
4245

46+
private setState(state: State): void {
47+
this.logger.log(`State changed from ${this.state} to ${state}`);
48+
this.state = state;
49+
}
4350
static getId(): Feature {
4451
return Feature.Bookmarks;
4552
}
4653

4754
enable(): void {
48-
if (!this.isEnabled() && this.initView() && this.subscribe()) {
49-
this.enabled = true;
50-
this.requestUpdate();
51-
}
55+
this.tryEnable(true);
5256
}
5357

5458
disable(): void {
59+
this.logger.log("disable");
5560
if (this.isEnabled()) {
5661
this.unsubscribe();
5762
this.view = null;
58-
this.enabled = false;
63+
this.setState(State.Disabled);
5964
}
6065
}
6166

@@ -64,7 +69,28 @@ export default class BookmarksManager extends AbstractFeature<Feature> {
6469
}
6570

6671
isEnabled(): boolean {
67-
return this.enabled;
72+
return this.state !== State.Disabled;
73+
}
74+
75+
private tryEnable(subscribeOnActive = false): void {
76+
const leaf = this.facade.getLeavesOfType<BookmarksPluginLeaf>(Leaves.Bookmarks)?.[0];
77+
78+
if (leaf.isVisible()) {
79+
if (this.state !== State.Enabled && this.initView() && this.subscribe()) {
80+
this.setState(State.Enabled);
81+
this.requestUpdate();
82+
}
83+
if (this.activeLeafChangeRef) {
84+
this.dispatcher.removeListener(this.activeLeafChangeRef);
85+
this.activeLeafChangeRef = null;
86+
}
87+
} else if (subscribeOnActive) {
88+
this.setState(State.Awaiting);
89+
this.activeLeafChangeRef = this.dispatcher.addListener({
90+
name: "active:leaf:change",
91+
cb: () => this.tryEnable(),
92+
});
93+
}
6894
}
6995

7096
private initView(): boolean {
@@ -87,16 +113,34 @@ export default class BookmarksManager extends AbstractFeature<Feature> {
87113
this.logger.log("Triggered by plugin event");
88114
this.requestUpdate();
89115
});
116+
this.metaRef = this.dispatcher.addListener({
117+
name: "metadata:cache:changed",
118+
cb: this.requestUpdate.bind(this),
119+
});
90120
return true;
91121
}
92122

93123
private unsubscribe(): void {
94-
this.dispatcher.removeListener(this.metaRef);
95-
this.view.plugin.offref(this.ref);
96-
this.view.plugin.trigger("changed");
124+
if (this.metaRef) {
125+
this.dispatcher.removeListener(this.metaRef);
126+
}
127+
if (this.activeLeafChangeRef) {
128+
this.dispatcher.removeListener(this.activeLeafChangeRef);
129+
}
130+
if (this.state === State.Enabled) {
131+
this.view.plugin.offref(this.ref);
132+
this.view.plugin.trigger("changed");
133+
}
97134
}
98135

99136
private onChanged(path: string = null): { [k: string]: boolean } {
137+
if (this.state !== State.Enabled) {
138+
this.logger.log(`Called onChanged when is ${this.state} state`);
139+
return;
140+
}
141+
if (!this.view.plugin) {
142+
return;
143+
}
100144
const items = this.view.plugin.items;
101145
const itemDoms = this.view.itemDoms;
102146
const result: { [k: string]: boolean } = {};

0 commit comments

Comments
 (0)