Refactor VaultAdapter.ts and AppUtils.ts

This commit is contained in:
kitelev 2025-01-03 11:22:23 +05:00
parent ff4362fe14
commit 36fb218170
6 changed files with 46 additions and 59 deletions

View File

@ -1,41 +0,0 @@
import {App, CachedMetadata, TFile} from "obsidian";
import KObject from "../../../core/src/domain/KObject";
import AppUtils from "../utils/AppUtils";
export default class VaultAdapter {
constructor(private app: App, private appUtils: AppUtils) {
}
getAllMdFiles() {
return this.app.vault.getMarkdownFiles();
}
getFileCache(file: TFile): CachedMetadata | null {
return this.app.metadataCache.getFileCache(file);
}
findMdWith(filter: (f: TFile) => boolean) {
return this.getAllMdFiles().filter(filter);
}
getObjectFileOrThrow(ko: KObject): TFile {
let res = this.getObjectFile(ko);
if (!res) {
throw new Error("Object file not found for " + ko);
}
return res;
}
getObjectFile(ko: KObject): TFile | null {
const a = this.findMdWith(f => {
const frontmatter = this.appUtils.getFrontmatterOrNull(f);
if (!frontmatter) {
return false;
}
const id: string = frontmatter["uid"];
return id === ko.id;
});
return a[0];
}
}

View File

@ -17,11 +17,6 @@ export default class OpenCurrentDailyNoteExoCommand implements ExoCommand {
throw new Error("No current daily note found");
}
let file = this.ctx.vaultAdapter.getObjectFile(currentDN);
if (!file) {
throw new Error("Daily note file not found");
}
await this.ctx.appUtils.openFile(file);
await this.ctx.appUtils.openKObject(currentDN);
}
}

View File

@ -1,13 +1,11 @@
import DailyNote from "../../../../core/src/domain/DailyNote";
import {TFile} from "obsidian";
import VaultAdapter from "../VaultAdapter";
import DailyNoteCreator from "../../utils/DailyNoteCreator";
import AppUtils from "../../utils/AppUtils";
import DailyNoteRepository from "../../../../core/src/ports/output/DailyNoteRepository";
export default class DailyNotePersistenceAdapter implements DailyNoteRepository {
constructor(private appUtils: AppUtils,
private vaultAdapter: VaultAdapter,
private dailyNoteCreator: DailyNoteCreator) {
}
@ -18,7 +16,7 @@ export default class DailyNotePersistenceAdapter implements DailyNoteRepository
}
async findAll(): Promise<DailyNote[]> {
const rawDailyNotes: TFile[] = this.vaultAdapter.findMdWith((f: TFile) => {
const rawDailyNotes: TFile[] = this.appUtils.findMdWith((f: TFile) => {
return this.appUtils.getTagsFromFile(f).includes("TMS/DailyNote");
});

View File

@ -1,4 +1,5 @@
import {App, FrontMatterCache, TFile} from "obsidian";
import {App, CachedMetadata, FrontMatterCache, TFile} from "obsidian";
import KObject from "../../../core/src/domain/KObject";
export default class AppUtils {
constructor(private app: App) {
@ -8,6 +9,11 @@ export default class AppUtils {
await this.app.vault.create(path, textContent);
}
async openKObject(ko: KObject) {
const file = this.getObjectFileOrThrow(ko);
await this.openFile(file);
}
async openFile(file: TFile) {
const leaf = this.app.workspace.getLeaf(false);
await leaf.openFile(file);
@ -65,4 +71,36 @@ export default class AppUtils {
}
getAllMdFiles() {
return this.app.vault.getMarkdownFiles();
}
getFileCache(file: TFile): CachedMetadata | null {
return this.app.metadataCache.getFileCache(file);
}
findMdWith(filter: (f: TFile) => boolean) {
return this.getAllMdFiles().filter(filter);
}
getObjectFileOrThrow(ko: KObject): TFile {
let res = this.getObjectFile(ko);
if (!res) {
throw new Error("Object file not found for " + ko);
}
return res;
}
getObjectFile(ko: KObject): TFile | null {
const a = this.findMdWith(f => {
const frontmatter = this.getFrontmatterOrNull(f);
if (!frontmatter) {
return false;
}
const id: string = frontmatter["uid"];
return id === ko.id;
});
return a[0];
}
}

View File

@ -2,7 +2,6 @@ import {App} from "obsidian";
import DailyNoteRepository from "../core/src/ports/output/DailyNoteRepository";
import Utils from "../core/src/utils/Utils";
import DailyNoteCreator from "../app/src/utils/DailyNoteCreator";
import VaultAdapter from "../app/src/adapters/VaultAdapter";
import KObjectCreator from "../app/src/utils/KObjectCreator";
import AppUtils from "../app/src/utils/AppUtils";
import CountNotesUseCase from "../core/src/ports/input/CountNotesUseCase";
@ -23,7 +22,6 @@ export default class ExoContext {
public readonly dailyNoteRepository: DailyNoteRepository;
public readonly kObjectUtility: KObjectUtility;
public readonly vaultAdapter: VaultAdapter;
public readonly appUtils: AppUtils;
public readonly countNotesUseCase: CountNotesUseCase;
@ -34,13 +32,12 @@ export default class ExoContext {
constructor(public app: App) {
this.utils = new Utils(this.app);
this.appUtils = new AppUtils(this.app);
this.vaultAdapter = new VaultAdapter(this.app, this.appUtils);
this.kObjectCreator = new KObjectCreator(this.appUtils);
this.dailyNoteCreator = new DailyNoteCreator(this.appUtils);
this.dailyNoteRepository = new DailyNotePersistenceAdapter(this.appUtils, this.vaultAdapter, this.dailyNoteCreator);
this.dailyNoteRepository = new DailyNotePersistenceAdapter(this.appUtils, this.dailyNoteCreator);
this.kObjectUtility = new KObjectUtility(this);
this.countNotesUseCase = new CountNotesService(this.vaultAdapter);
this.countNotesUseCase = new CountNotesService(this.appUtils);
this.getCurrentDNUseCase = new GetCurrentDailyNoteService(this.dailyNoteRepository);
this.effortRepository = new EffortPersistenceAdapter(this);
this.createEffortUseCase = new CreateEffortService(this.effortRepository);

View File

@ -1,12 +1,12 @@
import CountNotesUseCase from "../ports/input/CountNotesUseCase";
import VaultAdapter from "../../../app/src/adapters/VaultAdapter";
import AppUtils from "../../../app/src/utils/AppUtils";
export default class CountNotesService implements CountNotesUseCase {
constructor(private vaultAdapter: VaultAdapter) {
constructor(private appUtils: AppUtils) {
}
count(): number {
return this.vaultAdapter.getAllMdFiles().length;
return this.appUtils.getAllMdFiles().length;
}
}