2022-09-19 01:41:57 +00:00
|
|
|
// Monitors the gallery and sends a browser notification when the leading image is new.
|
|
|
|
|
|
|
|
let lastHeadImg = null;
|
|
|
|
|
2023-04-30 19:08:52 +00:00
|
|
|
let notificationButton = null;
|
2022-09-22 10:15:33 +00:00
|
|
|
|
2023-05-25 06:09:13 +00:00
|
|
|
onAfterUiUpdate(function() {
|
2022-09-22 10:15:33 +00:00
|
|
|
if (notificationButton == null) {
|
|
|
|
notificationButton = gradioApp().getElementById('request_notifications');
|
|
|
|
|
|
|
|
if (notificationButton != null) {
|
2023-04-30 19:12:24 +00:00
|
|
|
notificationButton.addEventListener('click', () => {
|
2023-04-30 19:14:51 +00:00
|
|
|
void Notification.requestPermission();
|
2022-09-22 10:15:33 +00:00
|
|
|
}, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-25 18:28:20 +00:00
|
|
|
const galleryPreviews = gradioApp().querySelectorAll('div[id^="tab_"][style*="display: block"] div[id$="_results"] .thumbnail-item > img');
|
2022-09-19 01:41:57 +00:00
|
|
|
|
|
|
|
if (galleryPreviews == null) return;
|
|
|
|
|
|
|
|
const headImg = galleryPreviews[0]?.src;
|
|
|
|
|
|
|
|
if (headImg == null || headImg == lastHeadImg) return;
|
|
|
|
|
|
|
|
lastHeadImg = headImg;
|
|
|
|
|
2022-09-26 20:57:31 +00:00
|
|
|
// play notification sound if available
|
|
|
|
gradioApp().querySelector('#audio_notification audio')?.play();
|
|
|
|
|
2022-09-19 01:41:57 +00:00
|
|
|
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',
|
|
|
|
{
|
2022-10-12 21:12:20 +00:00
|
|
|
body: `Generated ${imgs.size > 1 ? imgs.size - opts.return_grid : 1} image${imgs.size > 1 ? 's' : ''}`,
|
2022-09-19 01:41:57 +00:00
|
|
|
icon: headImg,
|
|
|
|
image: headImg,
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
notification.onclick = function(_) {
|
|
|
|
parent.focus();
|
|
|
|
this.close();
|
|
|
|
};
|
|
|
|
});
|