debug: add detailed logging and failsafe notification logic to bridge
This commit is contained in:
@@ -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
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user