43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { events } from "$sb/plugos-syscall/mod.ts";
|
|
import { editor, markdown } from "$sb/silverbullet-syscall/mod.ts";
|
|
import { extractFrontmatter } from "$sb/lib/frontmatter.ts";
|
|
import { PublishEvent } from "$sb/app_event.ts";
|
|
|
|
export async function publishCommand() {
|
|
await editor.save();
|
|
const text = await editor.getText();
|
|
const pageName = await editor.getCurrentPage();
|
|
const tree = await markdown.parseMarkdown(text);
|
|
let { $share } = await extractFrontmatter(tree);
|
|
if (!$share) {
|
|
// Nothing to do here
|
|
return;
|
|
}
|
|
if (!Array.isArray($share)) {
|
|
$share = [$share];
|
|
}
|
|
await editor.flashNotification("Sharing...");
|
|
try {
|
|
await publish(pageName, $share);
|
|
await editor.flashNotification("Done!");
|
|
} catch (e: any) {
|
|
await editor.flashNotification(e.message, "error");
|
|
}
|
|
}
|
|
|
|
async function publish(pageName: string, uris: string[]) {
|
|
for (const uri of uris) {
|
|
const publisher = uri.split(":")[0];
|
|
const results = await events.dispatchEvent(
|
|
`share:${publisher}`,
|
|
{
|
|
uri: uri,
|
|
name: pageName,
|
|
} as PublishEvent,
|
|
);
|
|
if (results.length === 0) {
|
|
throw new Error(`Unsupported publisher: ${publisher} for URI: ${uri}`);
|
|
}
|
|
}
|
|
}
|