2024-01-21 02:16:07 +08:00
|
|
|
import { editor, space } from "$sb/syscalls.ts";
|
|
|
|
import { cacheFileListing, readFile } from "./federation.ts";
|
|
|
|
|
|
|
|
export async function importLibraryCommand(_def: any, uri?: string) {
|
|
|
|
if (!uri) {
|
|
|
|
uri = await editor.prompt("Import library (federation URL):");
|
|
|
|
}
|
|
|
|
if (!uri) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
uri = uri.trim();
|
|
|
|
if (!uri.startsWith("!")) {
|
|
|
|
uri = `!${uri}`;
|
|
|
|
}
|
|
|
|
const allTemplates = (await cacheFileListing(uri)).filter((f) =>
|
|
|
|
f.name.endsWith(".md")
|
|
|
|
);
|
|
|
|
if (
|
|
|
|
!await editor.confirm(
|
|
|
|
`You are about to import ${allTemplates.length} templates, want to do this?`,
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
for (const template of allTemplates) {
|
|
|
|
// Clean up file path
|
|
|
|
let pageName = template.name.replace(/\.md$/, "");
|
|
|
|
// Remove the federation part
|
|
|
|
const pieces = pageName.split("/");
|
|
|
|
pageName = pieces.slice(1).join("/");
|
|
|
|
|
|
|
|
// Fetch the file
|
|
|
|
const buf = (await readFile(template.name)).data;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// Check if it already exists
|
|
|
|
await space.getPageMeta(pageName);
|
|
|
|
|
|
|
|
if (
|
|
|
|
!await editor.confirm(
|
|
|
|
`Page ${pageName} already exists, are you sure you want to override it?`,
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
// Expected
|
|
|
|
}
|
|
|
|
|
|
|
|
// Write to local space
|
|
|
|
await space.writePage(pageName, new TextDecoder().decode(buf));
|
2024-01-21 05:53:51 +08:00
|
|
|
|
|
|
|
await editor.flashNotification(`Imported ${pageName}`);
|
2024-01-21 02:16:07 +08:00
|
|
|
}
|
|
|
|
await editor.reloadSettingsAndCommands();
|
|
|
|
await editor.flashNotification("Import complete!");
|
|
|
|
}
|