debug: add detailed logging and failsafe notification logic to bridge

This commit is contained in:
Thomas
2026-05-09 21:48:58 +02:00
parent a4fc0f23a6
commit 9ba1fac932
4 changed files with 84 additions and 48 deletions
@@ -123,14 +123,17 @@ public class DefaultDownloadManager implements IDownloadManager {
// NEU: Benachrichtigt ComfyUI
private void notifyComfyUI() {
try {
System.out.println("🚀 [Model-Downloader] Sende Refresh-Ping an ComfyUI (Port 8188)...");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8188/kippster/model-downloaded"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
// Fire and forget
httpClient.sendAsync(request, HttpResponse.BodyHandlers.discarding());
// Synchron senden, damit wir sehen, was passiert
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("✅ [Model-Downloader] ComfyUI hat geantwortet mit Status: " + response.statusCode());
} catch (Exception e) {
// Wenn ComfyUI nicht läuft, ignorieren wir das leise
System.err.println("❌ [Model-Downloader] Konnte ComfyUI nicht erreichen. Läuft es auf Port 8188? Fehler: " + e.getMessage());
}
}
@@ -4,13 +4,13 @@ from aiohttp import web
print("\033[95m[Model-Downloader] UI Extension Bridge active\033[0m")
# NEU: Der API-Endpunkt für den Java-Ping
@server.PromptServer.instance.routes.post("/kippster/model-downloaded")
async def model_downloaded(request):
print("[Model-Downloader] Download finished trigger received from Java!")
# Sendet das Signal ans Frontend
server.PromptServer.instance.send_sync("kippster-refresh-ui", {"message": "New models available!"})
return web.json_response({"status": "success", "message": "UI refresh triggered"})
# Dieser Text MUSS in der ComfyUI-Konsole auftauchen, wenn Java fertig ist!
print("\033[92m🔥 [Model-Downloader] PING ERHALTEN! Sende Signal ans Frontend...\033[0m")
server.PromptServer.instance.send_sync("kippster-refresh-ui", {"message": "ready"})
return web.json_response({"status": "success", "message": "UI refreshed"})
WEB_DIRECTORY = "web"
NODE_CLASS_MAPPINGS = {}
@@ -39,23 +39,47 @@ const tryImports = async () => {
await tryImports();
// NEU: Dynamischer Import für den WebSocket-Listener
const setupListener = async () => {
const apiPaths = [
"../../scripts/api.js",
"/scripts/api.js",
"../../../scripts/api.js"
];
for (const path of apiPaths) {
try {
const mod = await import(path);
if (mod.api) {
console.log("%c[Model-Downloader] WebSocket Listener erfolgreich verknüpft!", "color: #00ff00; font-weight: bold;");
mod.api.addEventListener("kippster-refresh-ui", (event) => {
console.log("%c🔥 [Model-Downloader] SIGNAL EMPFANGEN! Lade UI neu...", "background: #ff0000; color: #fff; font-size: 14px;");
if (app && typeof app.refresh === 'function') {
app.refresh(); // Aktualisiert die Model-Dropdowns!
// Kleines UI-Popup zur Bestätigung
if (app.ui?.dialog?.show) {
app.ui.dialog.show("✅ Downloads abgeschlossen! Modelle sind jetzt im Dropdown.");
} else {
alert("✅ Downloads abgeschlossen! Modelle aktualisiert.");
}
}
});
break; // Erfolgreich gefunden, Schleife abbrechen
}
} catch (e) {}
}
};
await setupListener();
// Define setup logic that can be called by extension or as fallback
const initializeExtension = async () => {
let apiToken = null;
if (api) {
api.addEventListener("kippster-refresh-ui", () => {
console.log("[Model-Downloader] Refresh event received from WebSocket. Refreshing ComfyUI...");
if (app?.refresh) {
app.refresh();
// We don't use alert() here because it's annoying during background downloads,
// but we could use a non-blocking toast if available.
if (app.ui?.dialog?.show) {
// Optional: show a temporary notification if we want
}
}
});
}
// We removed the old inline listener here to avoid duplicates
const loadConfig = async () => {
try {
+36 -27
View File
@@ -39,6 +39,42 @@ const tryImports = async () => {
await tryImports();
// NEU: Dynamischer Import für den WebSocket-Listener
const setupListener = async () => {
const apiPaths = [
"../../scripts/api.js",
"/scripts/api.js",
"../../../scripts/api.js"
];
for (const path of apiPaths) {
try {
const mod = await import(path);
if (mod.api) {
console.log("%c[Model-Downloader] WebSocket Listener erfolgreich verknüpft!", "color: #00ff00; font-weight: bold;");
mod.api.addEventListener("kippster-refresh-ui", (event) => {
console.log("%c🔥 [Model-Downloader] SIGNAL EMPFANGEN! Lade UI neu...", "background: #ff0000; color: #fff; font-size: 14px;");
if (app && typeof app.refresh === 'function') {
app.refresh(); // Aktualisiert die Model-Dropdowns!
// Kleines UI-Popup zur Bestätigung
if (app.ui?.dialog?.show) {
app.ui.dialog.show("✅ Downloads abgeschlossen! Modelle sind jetzt im Dropdown.");
} else {
alert("✅ Downloads abgeschlossen! Modelle aktualisiert.");
}
}
});
break; // Erfolgreich gefunden, Schleife abbrechen
}
} catch (e) {}
}
};
await setupListener();
// Define setup logic that can be called by extension or as fallback
const initializeExtension = async () => {
let apiToken = null;
@@ -296,33 +332,6 @@ const initializeExtension = async () => {
addFAB(); addClassic(); addV2Action();
};
// NEU: Wir laden die API
const setupListener = async () => {
try {
const { api } = await import("../../scripts/api.js");
api.addEventListener("kippster-refresh-ui", (event) => {
console.log("%c[Model-Downloader] Triggering UI Refresh!", "background: green; color: white;");
if (app && app.refresh) {
app.refresh(); // Magischer Reload-Befehl
// Kleines Popup für den User
const notify = (msg) => {
if (app.ui?.dialog?.show) app.ui.dialog.show(msg);
else if (window.comfyAPI?.dialog?.show) window.comfyAPI.dialog.show(msg);
else alert(msg);
};
notify("✅ Downloads abgeschlossen! Modelle sind jetzt in ComfyUI verfügbar.");
}
});
console.log("[Model-Downloader] WebSocket Listener aktiv.");
} catch (e) {
console.error("[Model-Downloader] Konnte API nicht für Listener laden.", e);
}
};
setupListener();
if (app) {
app.registerExtension({ name: "TKI.ModelDownloader", async setup() { await initializeExtension(); } });
} else if (document.readyState === "complete") {