import BookTrackerPlugin from "@src/main"; import { App, normalizePath } from "obsidian"; export class Storage { public constructor( private readonly app: App, private readonly plugin: BookTrackerPlugin ) {} private readonly baseDir = this.plugin.manifest.dir!; private getFilePath(filename: string): string { return normalizePath(`${this.baseDir}/${filename}`.replace(/\/$/, "")); } public async readJSON(filename: string): Promise { const filePath = this.getFilePath(filename); const content = await this.app.vault.adapter.read(filePath); if (!content) { return null; } try { return JSON.parse(content) as T; } catch (error) { console.error(`Error parsing JSON from ${filePath}:`, error); return null; } } public async writeJSON(filename: string, data: T): Promise { const filePath = this.getFilePath(filename); const content = JSON.stringify(data, null, 2); await this.app.vault.adapter.write(filePath, content); } public async listFiles(subdir = ""): Promise { const files = await this.app.vault.adapter.list( this.getFilePath(subdir) ); return files.files; } public async listFolders(): Promise { const files = await this.app.vault.adapter.list(this.baseDir); return files.folders; } }