import type { BookTrackerPluginSettings } from "@ui/settings"; import { Notice, type Editor, type MarkdownFileInfo, type MarkdownView, type MetadataCache } from "obsidian"; import { CoverImageDownloaderService } from "../services/CoverImageDownloaderService"; import { EditorCheckCommand } from "./Command"; export class RedownloadCoverCommand extends EditorCheckCommand { constructor( private readonly metadataCache: MetadataCache, private readonly settings: BookTrackerPluginSettings, private readonly downloader: CoverImageDownloaderService, ) { super("redownload-cover", "Redownload Cover from Current Image URL"); } protected check(_editor: Editor, ctx: MarkdownView | MarkdownFileInfo): boolean { return ctx.file != null; } protected async run(_editor: Editor, ctx: MarkdownView | MarkdownFileInfo): Promise { const file = ctx.file!; const fm = this.metadataCache.getFileCache(file)?.frontmatter!; const url = fm[this.settings.coverImageUrlProperty]; try { await this.downloader.download(url, file.basename, true); } catch (error) { console.error("Failed to download cover image:", error); new Notice("Failed to download cover image. Check console for details."); return; } new Notice("Fetched newest cover image."); } }