Implement an event callback + Obsidian notifications on the publishing status
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user