Files
stable-diffusion-webui-ux/javascript/notification.js
T
2023-05-10 20:02:58 +03:00

55 lines
1.4 KiB
JavaScript

// Monitors the gallery and sends a browser notification when the leading image is new.
let lastHeadImg = null;
let notificationButton = null;
onUiUpdate(function () {
if (notificationButton == null) {
notificationButton = gradioApp().getElementById("request_notifications");
if (notificationButton != null) {
notificationButton.addEventListener(
"click",
() => {
void Notification.requestPermission();
},
true
);
}
}
const galleryPreviews = gradioApp().querySelectorAll(
'div[id^="tab_"][style*="display: block"] div[id$="_results"] .thumbnail-item > img'
);
if (galleryPreviews == null) return;
const headImg = galleryPreviews[0]?.src;
if (headImg == null || headImg == lastHeadImg) return;
lastHeadImg = headImg;
// play notification sound if available
gradioApp().querySelector("#audio_notification audio")?.play();
if (document.hasFocus()) return;
// Multiple copies of the images are in the DOM when one is selected. Dedup with a Set to get the real number generated.
const imgs = new Set(Array.from(galleryPreviews).map((img) => img.src));
const notification = new Notification("Stable Diffusion", {
body: `Generated ${imgs.size > 1 ? imgs.size - opts.return_grid : 1} image${
imgs.size > 1 ? "s" : ""
}`,
icon: headImg,
image: headImg,
});
notification.onclick = function (_) {
parent.focus();
this.close();
};
});