Implement an event callback + Obsidian notifications on the publishing status

This commit is contained in:
2026-08-09 14:57:04 -04:00
parent e4117a3d28
commit c31e7323b8
3 changed files with 42 additions and 4 deletions

View File

@@ -15,6 +15,7 @@ export interface PublishInput {
}
export type ImageResolver = (linktext: string) => Promise<Buffer | null>;
export type PublishEventsListener = (on: 'beforeClone' | 'beforeWrite' | 'beforePush') => void;
export interface PublishResult {
postPath: string;
@@ -26,7 +27,8 @@ export async function publish(
input: PublishInput,
settings: JekyllPublishSettings,
git: GitClient,
resolveImage: ImageResolver
imageResolver: ImageResolver,
onProgress?: PublishEventsListener
): Promise<PublishResult> {
if (!settings.remoteUrl.trim()) throw new Error("No git remote URL configured");
@@ -37,7 +39,7 @@ export async function publish(
const unresolved: string[] = [];
for (const ref of refs) {
if (resolved.some((r) => r.linktext === ref.linktext)) continue;
const data = await resolveImage(ref.linktext);
const data = await imageResolver(ref.linktext);
if (data) resolved.push({ linktext: ref.linktext, data });
else unresolved.push(ref.linktext);
}
@@ -59,8 +61,11 @@ export async function publish(
files.push({ repoPath: item.repoPath, data: r.data });
}
onProgress?.('beforeClone');
await git.syncClone({ url: settings.remoteUrl, branch: settings.branch });
onProgress?.('beforeWrite');
await git.writeFiles(files);
onProgress?.('beforePush');
await git.commitAndPush({
message: input.commitMessage,
branch: settings.branch,