mirror of
https://github.com/MarekWo/mc-webui.git
synced 2026-07-13 13:21:21 +02:00
feat: Add PWA notification support with badge counters
Implements Progressive Web App notification capabilities: - Service Worker foundation for PWA installability and offline support - Browser notification toggle in side menu with permission management - Local notifications triggered on new messages (channels, DMs, pending) - App Badge API integration showing total unread count on app icon - Smart notification logic (only when app hidden, only for NEW messages) - Graceful degradation for unsupported browsers Technical details: - Service Worker with network-first fetch strategy for dynamic content - Notification permission stored in localStorage (mc_notifications_enabled) - Delta-based notification tracking (prevents spam on page load) - Notification tag prevents duplicate alerts - App badge auto-clears when user returns to app Limitations (documented): - Android may freeze background JS after 5-10 minutes (OS behavior) - Full "wake device" support requires Web Push API (future enhancement) - Works best for active users who check app regularly Files modified: - app/static/js/sw.js (new) - app/templates/base.html - app/static/js/app.js - app/static/js/dm.js - app/static/manifest.json - app/static/css/style.css 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,19 @@
|
||||
<i class="bi bi-broadcast-pin" style="font-size: 1.5rem;"></i>
|
||||
<span>Manage Channels</span>
|
||||
</button>
|
||||
<!-- Notifications Toggle -->
|
||||
<button id="notificationsToggle" class="list-group-item list-group-item-action d-flex align-items-center gap-3" type="button">
|
||||
<i class="bi bi-bell" style="font-size: 1.5rem;"></i>
|
||||
<div class="flex-grow-1">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span>Powiadomienia</span>
|
||||
<span id="notificationStatus" class="badge bg-secondary">Wyłączone</span>
|
||||
</div>
|
||||
<small class="text-muted d-block mt-1" style="font-size: 0.75rem;">
|
||||
Działa gdy app w tle
|
||||
</small>
|
||||
</div>
|
||||
</button>
|
||||
<div class="list-group-item">
|
||||
<div class="d-flex align-items-center gap-3 mb-2">
|
||||
<i class="bi bi-calendar3" style="font-size: 1.5rem;"></i>
|
||||
@@ -277,6 +290,22 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Service Worker Registration for PWA -->
|
||||
<script>
|
||||
// Register Service Worker for PWA functionality
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('/static/js/sw.js')
|
||||
.then((registration) => {
|
||||
console.log('Service Worker registered:', registration.scope);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Service Worker registration failed:', error);
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
{% block extra_scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user