2025-02-03 03:15:14 +01:00
|
|
|
import { AddInstanceDialog } from "./add_an_instance.mjs";
|
2025-01-14 15:58:30 +01:00
|
|
|
import { initializeInstanceDetailsDialog } from "./confirm_instance_details.mjs";
|
|
|
|
import storageManager, { Instance } from "./storage_manager.mjs";
|
|
|
|
|
|
|
|
export function initializeAddInstanceFlow(
|
|
|
|
detailsDialog: HTMLDialogElement,
|
|
|
|
addDialog: HTMLDialogElement
|
|
|
|
): {
|
|
|
|
showAddInstanceDialog: () => void,
|
|
|
|
hideAddInstanceDialog: () => void
|
|
|
|
} {
|
|
|
|
const instanceDetailsDialogCallback = (
|
|
|
|
name: string,
|
|
|
|
host: string,
|
|
|
|
hostSecure: boolean,
|
|
|
|
software: string,
|
|
|
|
icon: string | null
|
|
|
|
) => {
|
|
|
|
const instance: Instance = {
|
|
|
|
name,
|
|
|
|
origin: `http${hostSecure ? "s" : ""}://${host}`,
|
|
|
|
software,
|
|
|
|
iconURL: icon ?? undefined
|
|
|
|
};
|
|
|
|
storageManager.storage.instances.push(instance);
|
|
|
|
storageManager.save();
|
|
|
|
console.log("Successfully added new instance:", instance);
|
|
|
|
};
|
|
|
|
|
|
|
|
const {
|
|
|
|
showInstanceDetailsDialog,
|
|
|
|
hideInstanceDetailsDialog,
|
|
|
|
populateInstanceDetailsDialog
|
|
|
|
} = initializeInstanceDetailsDialog(detailsDialog, instanceDetailsDialogCallback);
|
|
|
|
|
|
|
|
const addInstanceDialogCallback = async (
|
|
|
|
host: string,
|
|
|
|
secure: boolean,
|
|
|
|
autoQueryMetadata: boolean,
|
|
|
|
) => {
|
|
|
|
try {
|
|
|
|
if (!autoQueryMetadata) throw new Error("Don't");
|
|
|
|
const { name, software, iconURL } =
|
|
|
|
await fetch(`/api/instance_info/${secure}/${encodeURIComponent(host)}`)
|
|
|
|
.then(r => r.json());
|
|
|
|
if (
|
|
|
|
typeof name !== "string"
|
|
|
|
|| typeof software !== "string"
|
|
|
|
|| !(typeof iconURL === "string" || iconURL === null)
|
|
|
|
)
|
|
|
|
throw new Error("Invalid API response");
|
|
|
|
populateInstanceDetailsDialog(name, host, secure, software, iconURL as string | null);
|
|
|
|
} catch {
|
2025-01-14 17:57:27 +01:00
|
|
|
populateInstanceDetailsDialog(host, host, secure, "", null);
|
2025-01-14 15:58:30 +01:00
|
|
|
} finally {
|
|
|
|
showInstanceDetailsDialog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const {
|
|
|
|
showAddInstanceDialog,
|
|
|
|
hideAddInstanceDialog
|
|
|
|
} = initializeAddInstanceDialog(addDialog, addInstanceDialogCallback);
|
|
|
|
|
|
|
|
return {
|
|
|
|
showAddInstanceDialog,
|
|
|
|
hideAddInstanceDialog
|
|
|
|
};
|
|
|
|
}
|