Spaces:
Build error
Build error
// Monitors the gallery and sends a browser notification when the leading image is new. | |
let lastHeadImg = null; | |
notificationButton = null | |
onUiUpdate(function(){ | |
if(notificationButton == null){ | |
notificationButton = gradioApp().getElementById('request_notifications') | |
if(notificationButton != null){ | |
notificationButton.addEventListener('click', function (evt) { | |
Notification.requestPermission(); | |
},true); | |
} | |
} | |
const galleryPreviews = gradioApp().querySelectorAll('div[id^="tab_"][style*="display: block"] img.h-full.w-full.overflow-hidden'); | |
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(); | |
}; | |
}); | |