|
|
|
|
|
let lastHeadImg = null; |
|
|
|
let notificationButton = null; |
|
|
|
onAfterUiUpdate(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_"] div[id$="_results"] .thumbnail-item > img'); |
|
|
|
if (galleryPreviews == null) return; |
|
|
|
const headImg = galleryPreviews[0]?.src; |
|
|
|
if (headImg == null || headImg == lastHeadImg) return; |
|
|
|
lastHeadImg = headImg; |
|
|
|
|
|
gradioApp().querySelector('#audio_notification audio')?.play(); |
|
|
|
if (document.hasFocus()) return; |
|
|
|
|
|
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(); |
|
}; |
|
}); |
|
|