obsidian-book-tracker/src/commands/RedownloadCoverCommand.ts

35 lines
1.3 KiB
TypeScript

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<void> {
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.");
}
}