generated from tpl/obsidian-sample-plugin
35 lines
1.3 KiB
TypeScript
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.");
|
|
}
|
|
}
|